Page tree
Skip to end of metadata
Go to start of metadata

О CLI

При входе в интерфейс свежеустановленного SONiC'а пользователь попадает в обычный Linux shell (bash). Отсюда можно запускать, как специальные комманды CLI SONiC'a, так и обычные для Linux команды и программы. В том числе может быть запущена интерактивная оболочка sonic-cli (/usr/bin/sonic-cli), она чуть отзывчивее дополняет вводимые команды. Также sonic-cli может быть установлена как оболочка по умолчанию для некоторых пользователей, если требуется ограничиться их доступ к операционной системе.

Все основные команды SONiC'а делятся на изменяющие конфигурацию устройства и отображающие конфигурацию и/или состояние. Первые начинаются со слова config , вторые - с show . Команды config ... применяются немедленно.

# config vlan add 3000
# config vlan member add 3000 Ethernet40
# show vlan brief
+-----------+--------------+------------+----------------+-----------------------+-------------+
|   VLAN ID | IP Address   | Ports      | Port Tagging   | DHCP Helper Address   | Proxy ARP   |
+===========+==============+============+================+=======================+=============+
|      3000 |              | Ethernet40 | tagged         |                       | disabled    |
+-----------+--------------+------------+----------------+-----------------------+-------------+

Команды изменяющие конфигурацию должны запускаться от имени root, то есть нужно либо сперва зайти под ним, либо выполнять команды через sudo .

admin@sonic:~$ config interface ip add Vlan3000 10.10.10.1/24
Root privileges are required for this operation
admin@sonic:~$ sudo config interface ip add Vlan3000 10.10.10.1/24
admin@sonic:~$ sudo su
root@sonic:/home/admin# config interface ip remove Vlan3000 10.10.10.1/24

Слова в командах могут сокращаться до первых нескольких букв, по которым можно однозначно определить следующее слово.

# show i st
Usage: show [OPTIONS] COMMAND [ARGS]...
Try "show -h" for help.

Error: Too many matches: interfaces, ip, ipv6
# show int st
    Interface            Lanes    Speed    MTU    FEC           Alias           Vlan    Oper    Admin    Type    Asym PFC
-------------  ---------------  -------  -----  -----  --------------  -------------  ------  -------  ------  ----------
    Ethernet0      25,26,27,28      40G   9100    N/A    fortyGigE0/0   PortChannel1      up       up     N/A         N/A
    Ethernet4      29,30,31,32      40G   9100    N/A    fortyGigE0/4   PortChannel1      up       up     N/A         N/A
...

При запуске команд из сеанса bash, первое слово сокращать нельзя. Так как для него это название исполняемого файла. Работает автодополнение по нажатию Tab.


Для большинства команд можно вызвать подсказку по синтаксису и следующим аргументам, добавив ключ -h или --help .

# config int -h
Usage: config int [OPTIONS] COMMAND [ARGS]...

  Interface-related configuration tasks

Options:
  -n, --namespace []  Namespace name
  -?, -h, --help      Show this message and exit.

Commands:
  breakout      Set interface breakout mode
  buffer        Set or clear buffer configuration
  cable-length  Set lossless PGs for the interface
  fec           Set interface fec
  ip            Add or remove IP address
  mtu           Set interface mtu
  pfc           Set PFC configuration.
  shutdown      Shut down interface
  speed         Set interface speed
  startup       Start up interface
  transceiver   SFP transceiver configuration
  vrf           Bind or unbind VRF


Сохранение конфигурации, файл /etc/sonic/config_dg.json

Текущая конфигурация, сформированная командами config ... (не считая config save ) не сохраняется автоматически и будет утеряна при перезагрузки. Хранится текущая конфигурация в базе Redis, но непосредственное взаимодействие с ним не рекоммендуется. Для сохранения текущей конфигурации для автоматического применения после перезагрузки необходимо использовать как раз таки команду config save . Конфигурация сохраняется в файле /etc/sonic/config_db.json. Структура данного файла в значительной мере понятна интуитивно, поэтому его вполне можно изменить текстовым редактором, после чего применить новую конфигурацию командой config reload .

Команда config reload всегда вызывает прерывание связи на несколько десятков секунд. Даже если в файле /etc/sonic/config_db.json изменений совсем не производилось.

Некоторые элементы конфигурации не могут быть изменены с помощью основных инструментов CLI SONiC'а, и требуют внесения изменений непосредственно в данный файл (или использования иных инструментов).

Связь с конфигурацией ядра Linux

Продвижение бОльшей части трафика выполняет ASIC (application-specific integrated circuit) без участия ядра Linux и другого ПО работающего на CPU. Тем не менее, по ряду причин удобно, чтобы сетевая подсистема ядра Linux имела эквивалентную в некоторых аспектах конфигурацию. Более того, некоторые элементы постоянно синхронизируются, например ПО frr, реализующее динамическую маршрутизацию вообще не взаимодействует с ASIC'ом, а записывает импортируемые маршруты именно в сетевую подсистему ядра,  откуда они переносятся в ASIC.

В связи с этим стандартные утилиты Linux в некоторых аспектах могут быть использованы для отображения текущей конфигурации/состояния.

# bridge vlan
port            vlan ids

docker0         1 PVID Egress Untagged

PortChannel1    10
                777

Ethernet40      3000

Bridge          10
                777
                3000

dummy           1 PVID Egress Untagged

PortChannel02   10

PortChannel03   10 PVID Egress Untagged

# ip -4 neighbour
192.168.10.2 dev Vlan777 lladdr 52:54:00:12:34:56 STALE
172.30.204.1 dev eth0 lladdr de:09:9c:1f:89:6d REACHABLE

Использовать стандартные утилиты Linux для конфигурации сетевых функций коммутатора не следует. Не всё сконфигурированное с их помощью попадает в ASIC.


Конфигурация Control Plane

В состав SONiC входит известный открытый программный frr . Возможности его конфигурирования весьма широки, но почти не представлены в основном CLI SONiC'а. Поэтому, рекоммендуется настраивать его отдельно. Для этого необходимо отключить автоматическое отображение основной конфигурации SONiC (/etc/sonic/config_db.json) в конфигурацию frr, внеся следующие изменения в /etc/sonic/config_db.json:

  • "Закомментировать раздел" BGP_NEIGHBOR;
  • Удалить ключ bgp_asn из раздела DEVICE_METADATA;
  • Добавить в тот же раздел DEVICE_METADATA ключ docker_routing_config_mode со значением split.
          {
              "//BGP_NEIGHBOR": {
                  "10.0.0.1": {
                      "asn": "65200",
                      "holdtime": "180",
                      "keepalive": "60",
                      "local_addr": "10.0.0.0",
                      "name": "ARISTA01T2",
                      "nhopself": 0,
                      "rrclient": 0
                  },
                  omitted...
              },
              omitted...
              "DEVICE_METADATA": {
                  "localhost": {
                      "bgp_asn": "65100",
        "hostname": "sonic",         "hwsku": "Accton-AS5835-54X",         "mac": "80:a2:35:d2:47:b5",       "platform": "x86_64-accton_as5835_54x-r0",   "type": "LeafRouter",         "docker_routing_config_mode": "split"       }   },
omitted...
}

После изменения файла применить изменения - config reload -y .

Примерная ожидаемая конфигурация bgp после применения изменений:

Building configuration...

Current configuration:
!
frr version 7.2.1-sonic
frr defaults traditional
hostname sonic
service integrated-vtysh-config
!
route-map RM_SET_SRC permit 10
 set src 10.1.0.1
!
ip protocol bgp route-map RM_SET_SRC
!
line vty
!
end

Теперь frr может конфигурироваться независимо от основной конфигурации SONiC'а.

Попасть в CLI frr можно запустив vtysh . Для сохранения текущей конфигурации frr используется команда write (внутри vtysh). Также возмно прямое редактирование файлов в директории /etc/sonic/frr.

Полезные ссылки

  • No labels