О CLI
При входе в интерфейс свежеустановленного SONiC'а пользователь попадает в обычный Linux shell (bash). Отсюда можно запускать, как специальные комманды CLI SONiC'a, так и обычные для Linux команды и программы. В том числе может быть запущена интерактивная оболочка sonic-cli (/usr/bin/sonic-cli), она чуть отзывчивее дополняет вводимые команды. Также sonic-cli может быть установлена как оболочка по умолчанию для некоторых пользователей, если требуется ограничиться их доступ к операционной системе.
Все основные команды SONiC'а делятся на изменяющие конфигурацию устройства и отображающие конфигурацию и/или состояние. Первые начинаются со слова config , вторые - с show . Команды config ... применяются немедленно.
| Code Block |
|---|
|
# 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 .
| Code Block |
|---|
|
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 |
Слова в командах могут сокращаться до первых нескольких букв, по которым можно однозначно определить следующее слово.
| Code Block |
|---|
|
# 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 .
| Code Block |
|---|
|
# 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 .
| Warning |
|---|
Команда config reload всегда вызывает прерывание связи на несколько десятков секунд. Даже если в файле /etc/sonic/config_db.json изменений совсем не производилось. |
Некоторые элементы конфигурации не могут быть изменены с помощью основных инструментов CLI SONiC'а, и требуют внесения изменений непосредственно в данный файл (или использования иных инструментов).
Связь с конфигурацией ядра Linux
Продвижение бОльшей части трафика выполняет ASIC (application-specific integrated circuit) без участия ядра Linux и другого ПО работающего на CPU. Тем не менее, по ряду причин удобно, чтобы сетевая подсистема ядра Linux имела эквивалентную в некоторых аспектах конфигурацию. Более того, некоторые элементы постоянно синхронизируются, например ПО frr, реализующее динамическую маршрутизацию вообще не взаимодействует с ASIC'ом, а записывает импортируемые маршруты именно в сетевую подсистему ядра, откуда они переносятся в ASIC.
В связи с этим стандартные утилиты Linux в некоторых аспектах могут быть использованы для отображения текущей конфигурации/состояния.
| Code Block |
|---|
|
# 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 |
| Warning |
|---|
Использовать стандартные утилиты 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.
| Expand |
|---|
| title | Пример результата (незатрагиваемые блоки опущены, удалять из не требуется): |
|---|
|
| Panel |
|---|
{
"//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 после применения изменений:
| Expand |
|---|
| title | show runningconfiguration 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.
Полезные ссылки