はじめに
著者は割と以前、2019年あたりからSONiCに触れていたため、当時のCLIについてはだいたい把握していたつもりだったのですが、気づくといつのまにかCLIやコマンドが増えていたりして、それ知らんかったわー!となったりします。
そこで、網羅はできませんが、そういうものについていくつか紹介したいと思います。過去に言及したことがあるものも含まれるかもしれませんがご容赦ください。
なお、2022年12月現在のコミュニティ版SONiC、master
ブランチのイメージで確認しています。
configのサブコマンド
config
コマンドはCONFIG_DBを操作するためのものです。設定を追加するだけであれば/etc/sonic/config_db.json
に書き加えてconfig load -y
などとするのと同等です。昔はCLIの実装が不足していて、CONFIG_DBを編集して再起動するのが普通だったりしましたが、現在では改善されていてふつうにCLIで設定することができる項目が大半です。
config loopback
たぶん昔からあったのを気づいてなかっただけだと思います。(あるいはすっかり忘れたか)
ループバックインタフェースの追加・削除を実行します。
sudo config loopback add Loopback0
CONFIG_DBを変更して再起動、としなくてもその場で追加・削除ができます。
CONFIG_DBとしては下記のような設定が加わります。
{
"LOOPBACK_INTERFACE": {
"Loopback0": {}
}
}
config subinterface
こちらもたぶん昔からあったのを(VLANサブインタフェース自体が手元の実機で動いてなかったので)気づいてなかっただけだと思います。
VLANサブインタフェース (Linuxでいうeth0.200みたいなやつ) の追加・削除を実行します。
sudo config subinterface add Ethernet0.400 400
なにもないところからsudo config interface ip add Ethetnet0.100 10.0.0.1/24
なととすれば勝手にサブインタフェースが生えてたのですが、正規にはconfig subinteface add
で作成した後にIPアドレスを設定するものののようでした。
CONFIG_DBには下記の設定が加わります。
{
"VLAN_SUB_INTERFACE": {
"Ethernet0.400": {
"admin_status": "up",
"Vlan": "400"
}
}
}
サブインタフェースの名前は「親インタフェース.VLANID」になります。
config checkpoint/delete-checkpoint/...
コンフィグの履歴管理ができるものです。config checkpoint
で履歴に残すことができ、rollback
でそこに戻ることができたりするようです。イメージを更新したらどうなるかは未確認です。
-
checkpoint
記録 -
list-checkpoints
記録したコンフィグのリスト表示 -
delete-checkpoint
記録を指定して削除 -
rollback
指定した記録に戻す -
replace
指定した記録を現在のコンフィグと入れ替える
使ったことないので細かいところはわかりませんすみません。。
config nvgre-tunnel
NVGREの設定コマンドですが、CONFIG_DBの内容がYANG modelに適合していることを前提としているようで、想定外の設定(不足していたり)だとエラーが出て設定できません。
admin@sonic:~$ sudo config nvgre-tunnel add nvgre0 --src-ip 1.1.1.1
sonic_yang(6):Note: Below table(s) have no YANG models: XCVRD_LOG
libyang[0]: Leafref "/sonic-mgmt_port:sonic-mgmt_port/sonic-mgmt_port:MGMT_PORT/sonic-mgmt_port:MGMT_PORT_LIST/sonic-mgmt_port:name" of value "eth0" points to a non-existing leaf. (path: /sonic-mgmt_interface:sonic-mgmt_interface/MGMT_INTERFACE/MGMT_INTERFACE_LIST[name='eth0'][ip_prefix='10.207.9.133/24']/name)
sonic_yang(3):Data Loading Failed:Leafref "/sonic-mgmt_port:sonic-mgmt_port/sonic-mgmt_port:MGMT_PORT/sonic-mgmt_port:MGMT_PORT_LIST/sonic-mgmt_port:name" of value "eth0" points to a non-existing leaf.
Data Loading Failed
Leafref "/sonic-mgmt_port:sonic-mgmt_port/sonic-mgmt_port:MGMT_PORT/sonic-mgmt_port:MGMT_PORT_LIST/sonic-mgmt_port:name" of value "eth0" points to a non-existing leaf.
Error: Failed to validate configuration: ConfigMgmt Class creation failed
上記はCONFIG_DBにMGMT_PORT
テーブルが用意されてないことがエラーの原因です。下記を加えてみます。
{
"MGMT_PORT": {
"eth0": {
"admin_status": "up"
}
}
}
すると
admin@sonic:~$ sudo config nvgre-tunnel add nvgre0 --src-ip 1.1.1.1
sonic_yang(6):Note: Below table(s) have no YANG models: XCVRD_LOG
sonic_yang(6):Note: Below table(s) have no YANG models: XCVRD_LOG
admin@sonic:~$
設定できたようですが、動作するかは未確認です。
configコマンドでは設定できない項目
記憶に残ってるのはinterface
のdescription
です。とくに動作に影響ないので、さくっと作ってしまえばいいのに、と思ったりします。商用SONiCではCLIがあるかもしれません。
show コマンド
show system-health
admin@sonic:~$ show system-health
Usage: show system-health [OPTIONS] COMMAND [ARGS]...
Show system-health information
Options:
-?, -h, --help Show this message and exit.
Commands:
detail Show system-health detail information
monitor-list Show system-health monitored services and devices name...
summary Show system-health summary information
sysready-status Show system-health system ready status
admin@sonic:~$
sysready-status
はSONiCの起動が完了したかを確認するのに便利なはずです。うまく動いていないといつまで経ってもreadyにならないのですが。。(なお、sysready-status
は202205にない、というくらい新しいようです)
このコマンドに関しては機種ごとに対応未対応がバラバラなので、動かないことのほうが多いかもしれません。
sonic-* コマンド
sonic-package-manager
dockerコンテナを管理するもののようです。
admin@sonic:~$ sonic-package-manager
Usage: sonic-package-manager [OPTIONS] COMMAND [ARGS]...
SONiC Package Manager
Options:
--help Show this message and exit.
Commands:
install Install/Upgrade package using [PACKAGE_EXPR] in format...
list List available packages.
migrate Migrate packages from the given database file.
repository Repository management commands.
reset Reset package to the default version.
show Package manager show commands.
uninstall Uninstall package.
$ sonic-package-manager list
Name Repository Description Version Status
--------------- --------------------------- ----------------------------- --------- ---------
database docker-database SONiC database package 1.0.0 Built-In
dhcp-relay docker-dhcp-relay N/A 1.0.0 Installed
eventd docker-eventd SONiC eventd package 1.0.0 Built-In
fpm-frr docker-fpm-frr SONiC fpm-frr package 1.0.0 Built-In
gbsyncd docker-gbsyncd-credo SONiC gbsyncd package 1.0.0 Built-In
gbsyncd-broncos docker-gbsyncd-broncos SONiC gbsyncd-broncos package 1.0.0 Built-In
lldp docker-lldp SONiC lldp package 1.0.0 Built-In
macsec docker-macsec N/A 1.0.0 Installed
mgmt-framework docker-sonic-mgmt-framework SONiC mgmt-framework package 1.0.0 Built-In
mux docker-mux SONiC mux package 1.0.0 Built-In
nat docker-nat SONiC nat package 1.0.0 Built-In
p4rt docker-sonic-p4rt SONiC p4rt package 1.0.0 Built-In
pmon docker-platform-monitor SONiC pmon package 1.0.0 Built-In
radv docker-router-advertiser SONiC radv package 1.0.0 Built-In
restapi docker-sonic-restapi SONiC restapi package 1.0.0 Built-In
sflow docker-sflow SONiC sflow package 1.0.0 Built-In
snmp docker-snmp SONiC snmp package 1.0.0 Built-In
swss docker-orchagent SONiC swss package 1.0.0 Built-In
syncd docker-syncd-brcm SONiC syncd package 1.0.0 Built-In
teamd docker-teamd SONiC teamd package 1.0.0 Built-In
telemetry docker-sonic-telemetry SONiC telemetry package 1.0.0 Built-In
なにをもってpackegeと言っているのか未確認なので、どういうイメージを用意すればsonic-package-manager install
できるのかよくわかっていません。
sonic-clear
統計情報などの初期化を実行するコマンドになります。
admin@sonic:~$ sonic-clear
Usage: sonic-clear [OPTIONS] COMMAND [ARGS]...
SONiC command line - 'Clear' command
Options:
-?, -h, --help Show this message and exit.
Commands:
arp Clear IP ARP table
counters Clear counters
dhcp6relay_counters Clear dhcp6relay message counts
dropcounters Clear drop counters
fdb Clear FDB table
flowcnt-route Clear all route flow counters
flowcnt-trap Clear trap flow counters
headroom-pool Clear headroom pool WM
ip Clear IP
ipv6 Clear IPv6 information
line Clear preexisting connection to line
macsec Clear MACsec counts.
nat Clear the nat info
ndp Clear IPv6 NDP table
pbh Clear the PBH info
pfccounters Clear pfc counters
priority-group Clear priority_group WM
queue Clear queue WM
queuecounters Clear queue counters
rifcounters Clear RIF counters
tunnelcounters Clear Tunnel counters
わざわざdocker exec -it swss arp -d -a
とかやらずにすみます。
sonic-cfg-help
YANGモデルで定義されたものに符合するSONiCの設定一覧が表示されます。CONFIG_DBに定義できるテーブルと中に書けるフィールド、その説明になります。-a
を指定すると全部出力するので大量です。
admin@sonic:~$ sonic-cfg-help
Error: Table or all option is required
usage: sonic-cfg-help [-h] [-t TABLE] [-f FIELD] [-p PRINT_FORMAT] [-a]
Description of table name
optional arguments:
-h, --help show this help message and exit
-t TABLE, --table TABLE
Table name
-f FIELD, --field FIELD
Field
-p PRINT_FORMAT, --print_format PRINT_FORMAT
Print format
-a, --all Print all tables
admin@sonic:~$ sonic-cfg-help -a
ACL_RULE
Description: ACL_RULE part of config_db.json
key - ACL_TABLE_NAME:RULE_NAME
+-----------------------+---------------------------------------------+-------------+-----------+--------------------------+
| Field | Description | Mandatory | Default | Reference |
+=======================+=============================================+=============+===========+==========================+
| ACL_TABLE_NAME | | | | ACL_TABLE:ACL_TABLE_NAME |
+-----------------------+---------------------------------------------+-------------+-----------+--------------------------+
| RULE_NAME | | | | |
+-----------------------+---------------------------------------------+-------------+-----------+--------------------------+
| PACKET_ACTION | | | | |
+-----------------------+---------------------------------------------+-------------+-----------+--------------------------+
| MIRROR_INGRESS_ACTION | | | | MIRROR_SESSION:name |
+-----------------------+---------------------------------------------+-------------+-----------+--------------------------+
| MIRROR_EGRESS_ACTION | | | | MIRROR_SESSION:name |
+-----------------------+---------------------------------------------+-------------+-----------+--------------------------+
| IP_TYPE | | | | |
+-----------------------+---------------------------------------------+-------------+-----------+--------------------------+
| PRIORITY | | true | | |
上記例では空欄ですが、なかにはdescriptionに解説が入っていたりして、興味深く眺めています。
-p
で指定するフォーマットはPythonのtabulateモジュールに準拠していて、下記のいずれかを指定できます。
- "plain"
- "simple"
- "grid"
- "pipe"
- "orgtbl"
- "rst"
- "mediawiki"
- "latex"
たとえばpipe
を指定すると、下記のような出力になります。
admin@sonic:~$ sonic-cfg-help -p pipe -a
ACL_RULE
Description: ACL_RULE part of config_db.json
key - ACL_TABLE_NAME:RULE_NAME
| Field | Description | Mandatory | Default | Reference |
|:----------------------|:--------------------------------------------|:------------|:----------|:-------------------------|
| ACL_TABLE_NAME | | | | ACL_TABLE:ACL_TABLE_NAME |
| RULE_NAME | | | | |
| PACKET_ACTION | | | | |
| MIRROR_INGRESS_ACTION | | | | MIRROR_SESSION:name |
| MIRROR_EGRESS_ACTION | | | | MIRROR_SESSION:name |
CONFIG_DBに項目を追加したり、あるいは構造を変えたりする場合、YANG modelとの整合性がおそらく? いずれ? 問われることになると思います。
sonic-cli
klish
によるCLIを提供する対話シェルです。mgmt-frameworkが動いているのが前提です。Cisco風味。CLIのsyntaxはYANG modelから生成されるもののようです。sonic-cli-gen
にモデル定義を突っ込めが生成されるようですが、試したことはないので違うかもしれません。コミュニティ版SONiCではインタフェースにIPアドレスをつけるくらいしかできないようです。
admin@sonic:~$ sonic-cli
sonic# configure terminal
sonic(config)#
end Exit to the exec Mode
exit Exit from current mode
interface Select an interface
ip Global IP configuration subcommands
no To delete / disable commands in config mode
sonic(config)#
もしかすると、ベンダーサポートのある商用のSONiCだと設定項目が大幅に拡充されているかもしれません。
おわりに
よくわからんと言いながら紹介したものが多数あります。知ってる方、使ったことのある方がいらっしゃたら、ご教示いただけると嬉しく思います。