SONiC: configの新しいサブコマンドいろいろ

# はじめに

SONiCの機能を制御する設定ですが、

- CLIで設定する
- JSONで設定ファイルを書く
- REST APIで設定する
- gRPCで設定する

といった方法があります。このうちCLIは`config`コマンドによって盛況されます。

`config`コマンドには第1パラメータにサブコマンドを指定し、それぞれの機能についてさらに細かい指定をしていくのですが、まずこのサブコマンドが増え続けています。本稿では、いくつかのサブコマンドについて解説したいと思います。

なお、下記実行例は2021年11月30日ビルドのSONiC仮想マシンにて実行しています。

# 増えたサブコマンド

202012ブランチと比較して増えたサブコマンドをざっと並べてみます。

- `apply-patch`
- `cbf`
- `checkpoint`
- `delete-checkpoint`
- `ipv6`
- `list-checkpoints`
- `replace`
- `rollback`

また、`interface`のサブコマンドも増えました。

- `ipv6`
- `tpid`
- `type`
- `advertised-speeds`
- `advertised-types`
- `mpls`

# 増えたサブコマンド: コンフィグ関連

設定そのものを操作するコマンド群が増えました。

- `apply-patch`
- `checkpoint`
- `delete-checkpoint`
- `list-checkpoint`
- `replace`
- `rollback`

現時点ではYANG model関連の作業が終わっていないためまだ使えないようですが、設定ミスからの復帰などに役立つサブコマンドになると思われます。動く日を楽しみに待ちましょう。

# `config cbf`

ヘルプを見ると

```
admin@sonic:~$ sudo config cbf -h
Usage: config cbf [OPTIONS] COMMAND [ARGS]...

  CBF-related configuration tasks

Options:
  -?, -h, --help  Show this message and exit.

Commands:
  clear   Clear CBF configuration
  reload  Reload CBF configuration
```

なんだかよくわかりません。いろいろ検索してみると、どうも**CoS-Based Forwarding**の略のようです。

# `config ipv6`

IPv6リンクローカルアドレスの有効化/無効化を設定します。全インタフェースに個別に設定が入ります。個別設定については後ほど解説します。

# `config interface`のサブコマンド

## `config interface ipv6`

IPv6リンクローカルの有効化/無効化をインタフェース単位で指定します。

```
admin@sonic:~$ sudo config interface ipv6 -h
Usage: config interface ipv6 [OPTIONS] COMMAND [ARGS]...

  Enable or Disable IPv6 processing on interface

Options:
  -h, -?, --help  Show this message and exit.

Commands:
  disable  Disble IPv6 processing on interface
  enable   Enable IPv6 processing on interface
admin@sonic:~$ sudo config interface ipv6 enable use-link-local-only Ethernet0
```

## `config interface tpid`

物理ポートに対して、VLAN TPIDを指定します。

```
admin@sonic:~$ sudo config interface tpid -h
Usage: config interface tpid [OPTIONS] <interface_name> <interface_tpid>

  Set interface tpid

Options:
  -v, --verbose   Enable verbose output
  -h, -?, --help  Show this message and exit.
admin@sonic:~$ sudo config interface tpid Ethernet8 0x8100
admin@sonic:~$ sudo config interface tpid Ethernet8 0
TPID 0 is not allowed. Allowed: 0x8100, 9100, 9200, or 88A8.
```

CLIからは削除する方法がなさそうです。`9100`を指定したらダブルタギングになるのかというと、そうでもないかんじです(VIDを指定できないので)。うーん?

## `config interface type`

インタフェースタイプを指定します。`SR4`だの`GMII`だの指定するようです。自動検出できないときに使うのでしょうか?

## `config interface advertised-speeds`

```
admin@sonic:~$ sudo config interface advertised-speeds -h
Usage: config interface advertised-speeds [OPTIONS] <interface_name>
                                          <speed_list>

  Set interface advertised speeds

Options:
  -v, --verbose   Enable verbose output
  -?, -h, --help  Show this message and exit.
```


インタフェースのリンク速度について、オートネゴシエーション時に相手に申告する速度を指定するようです。速度はカンマ区切りで並べるようです。現時点では、なにを書いてもチェックされずCONFIG DBに入ってしまうようです(`foo`とか`bar`とか書いても通ります)。しかもCLIからだと削除ができないっぽくて困ります。


## `config interface advertised-types`


```
admin@sonic:~$ sudo config interface advertised-types -h
Usage: config interface advertised-types [OPTIONS] <interface_name>
                                         <interface_type_list>

  Set interface advertised types

Options:
  -v, --verbose   Enable verbose output
  -?, -h, --help  Show this message and exit.
admin@sonic:~$ sudo config interface advertised-types Ethernet8 X
Invalid interface type specified: X
Valid interface types:CR2,SFI,SR4,CR,CAUI4,GMII,LR4,XLAUI,KR4,SR2,CAUI,SR,XFI,KR2,XAUI,XGMII,CR4,none,LR,KR
```


こちらはインタフェースタイプについて、やはり広告するタイプを指定するようですが、ふつうにタイプ指定する`type`となにが違うのか、よくわかっていません。


## `config interface mpls`

MPLSの設定ができるようになりました?

```
admin@sonic:~$ sudo config interface mpls -h
Usage: config interface mpls [OPTIONS] COMMAND [ARGS]...

  Add or remove MPLS

Options:
  -?, -h, --help  Show this message and exit.

Commands:
  add     Add MPLS operation on the interface
  remove  Remove MPLS operation from the interface
admin@sonic:~$ sudo config interface mpls add -h
Usage: config interface mpls add [OPTIONS] <interface_name>

  Add MPLS operation on the interface

Options:
  -?, -h, --help  Show this message and exit.
admin@sonic:~$ sudo config interface mpls add Ethernet8
Usage: config interface mpls add [OPTIONS] <interface_name>
Try "config interface mpls add -h" for help.

Error: interface Ethernet8 doesn`t exist
admin@sonic:~$ sudo config interface mpls add Ethernet0
```

ん? どういうこと?? 実行後のJSONを見てみると

```
        "Ethernet0": {
            "mpls": "enable"
        },
```

なん、これ?


# まとめ

総じて発展途上と思われます。将来が楽しみです。あるいは、「おめえ物知らずだな、こうなんだよ」とご指導いただける方がいらっしゃいましたら、コメントなどいただけますと幸いです。