BREAKOUT_CFG テーブル (DPB)¶
概要¶
BREAKOUT_CFG テーブルは Dynamic Port Breakout (DPB) 機能で導入された CONFIG_DB テーブル1。
各親ポート(parent port)の 現在の breakout モード(brkout_mode)を 1 エントリで保持する。
起動時は sonic-cfggen が hwsku.json の default_brkout_mode フィールドをもとに全親ポートのエントリを書き込む。
config interface breakout <port> <mode> コマンドが breakout を変更するたびに当該エントリの brkout_mode を上書きする。
orchagent は BREAKOUT_CFG を直接購読しない。CLI(portconfig ライブラリ)が PORT テーブルを再構成し、orchagent は PORT テーブルの変更を受け取る間接フロー。BREAKOUT_CFG はモード履歴の管理テーブルとして機能する。
データフロー¶
flowchart LR
HW[("hwsku.json<br/>default_brkout_mode")]
CFGGEN["sonic-cfggen<br/>portconfig.py"]
CDB[("CONFIG_DB<br/>BREAKOUT_CFG")]
CLI["config interface breakout<br/>(sonic-utilities)"]
PORT[("CONFIG_DB<br/>PORT")]
ORCH["orchagent<br/>PortsOrch"]
HW --> CFGGEN
CFGGEN -->|起動時書き込み| CDB
CLI -->|モード変更時上書き| CDB
CLI -->|PORT テーブル再構成| PORT
PORT --> ORCH
凡例
BREAKOUT_CFG は orchagent への間接経路。orchagent は PORT テーブルの変更を受け取る。
key 構造¶
<port-name> は親ポート名(例: Ethernet0)。YANG では PORT テーブルへの leafref でなく自由文字列として定義されており、DPB 操作中に PORT テーブルに存在しない場合でも有効なエントリとなる2。
フィールド¶
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
brkout_mode |
string (1..64) | hwsku.json の default_brkout_mode |
現在の breakout モード文字列(例: 4x25G[10G], 2x50G, 1x100G[40G]) |
mode 文字列フォーマット¶
brkout_mode の値は portconfig.py:42 で定義されたパターンに従う:
代表例:
| モード文字列 | 意味 |
|---|---|
1x100G[40G] |
全レーンを 1 ポートに集約、デフォルト 100G (40G 切り替え可) |
2x50G |
全レーンを 2 ポートに均等分割、各 50G |
4x25G[10G] |
全レーンを 4 ポートに均等分割、各 25G (10G 切り替え可) |
2x25G(2)+1x50G(2) |
2 レーン × 2 ポート (25G) + 2 レーン × 1 ポート (50G) の混在 |
1x400G |
400G 世代向け全レーン集約 |
8x50G |
800G 世代向け 8 分割 |
利用可能なモード一覧は platform.json の各親ポートの breakout_modes フィールドで定義され、hwsku.json の default_brkout_mode がそのうちの 1 つでなければならない。
設定フロー¶
- 起動時:
sonic-cfggen→get_breakout_mode()→parse_breakout_mode()がhwsku.jsonから読み取ったdefault_brkout_modeをBREAKOUT_CFG|<port>.brkout_modeに書き込む - breakout 変更:
config interface breakout <port> <mode>がplatform.jsonでモードを検証後、PORTテーブルを再構成し、最後にconfig_db.set_entry("BREAKOUT_CFG", port, {'brkout_mode': mode})で更新
制約¶
BREAKOUT_CFGテーブルが存在しない場合、CLI は[ERROR] BREAKOUT_CFG table is NOT present in CONFIG DBを返す(main.py:5481)- 指定ポートが
BREAKOUT_CFGに存在しない場合、CLI はエラーを返す(main.py:5485) - 指定 mode が
platform.jsonのbreakout_modesに存在しない場合、CLI はエラーを返す(main.py:5208-5209) .json形式の port config(platform.json+hwsku.json)が必要。port_config.ini形式の場合、DPB は無効(portconfig.py:464:return None)
フィールド暗黙デフォルト (Phase A — コード由来)¶
YANG (sonic-breakout_cfg.yang) は brkout_mode に default 文を持たない。
brkout_mode — 起動時初期値は hwsku.json の default_brkout_mode¶
brkout_mode のデフォルト値はコード定数ではなく プラットフォーム定義 に完全依存する。
ソース: portconfig.py:37-38, 475-478
BRKOUT_MODE = "default_brkout_mode" # hwsku.json のキー名
CUR_BRKOUT_MODE = "brkout_mode" # CONFIG_DB への書き込みキー名
# parse_breakout_mode() の本体:
for intf in hwsku_dict[INTF_KEY]:
brkout_table[intf] = {}
brkout_table[intf][CUR_BRKOUT_MODE] = hwsku_dict[INTF_KEY][intf][BRKOUT_MODE]
ソース: sonic-cfggen:402-404
brkout_table = get_breakout_mode(hwsku, platform, args.port_config)
if brkout_table:
deep_update(data, {'BREAKOUT_CFG': brkout_table})
| フィールド | YANG default | コード由来デフォルト | fallback 源 |
|---|---|---|---|
brkout_mode |
なし | hwsku.json の default_brkout_mode(プラットフォーム定義) |
portconfig.py:parse_breakout_mode() — 起動時に sonic-cfggen が書き込み |
YANG レイヤーは補完しない。CONFIG_DB に一度も書かれていない(platform.json / hwsku.json なし環境)場合、CLI は BREAKOUT_CFG table is NOT present in CONFIG DB エラーを返す。
引用元¶
-
YANG 定義:
sonic-breakout_cfg.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-breakout_cfg.yang ↩ -
HLD 記載:
portをPORTテーブルへの leafref でなく string とした理由 — DPB 操作中は親ポートがPORTテーブルに存在しない場合があるため。 https://github.com/sonic-net/SONiC/blob/49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06/doc/dynamic-port-breakout/sonic-dynamic-port-breakout-HLD.md ↩