コンテンツにスキップ

BREAKOUT_CFG テーブル (DPB)

概要

BREAKOUT_CFG テーブルは Dynamic Port Breakout (DPB) 機能で導入された CONFIG_DB テーブル1。 各親ポート(parent port)の 現在の breakout モードbrkout_mode)を 1 エントリで保持する。

起動時は sonic-cfggenhwsku.jsondefault_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 構造

BREAKOUT_CFG|<port-name>

<port-name> は親ポート名(例: Ethernet0)。YANG では PORT テーブルへの leafref でなく自由文字列として定義されており、DPB 操作中に PORT テーブルに存在しない場合でも有効なエントリとなる2

フィールド

フィールド デフォルト 説明
brkout_mode string (1..64) hwsku.jsondefault_brkout_mode 現在の breakout モード文字列(例: 4x25G[10G], 2x50G, 1x100G[40G]

mode 文字列フォーマット

brkout_mode の値は portconfig.py:42 で定義されたパターンに従う:

<num>x<speed>[<alt_speed,...>](<lanes>)  [+ ...]

代表例:

モード文字列 意味
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.jsondefault_brkout_mode がそのうちの 1 つでなければならない。

設定フロー

  1. 起動時: sonic-cfggenget_breakout_mode()parse_breakout_mode()hwsku.json から読み取った default_brkout_modeBREAKOUT_CFG|<port>.brkout_mode に書き込む
  2. 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.jsonbreakout_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_modedefault 文を持たない。

brkout_mode — 起動時初期値は hwsku.jsondefault_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.jsondefault_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 エラーを返す。

引用元


  1. YANG 定義: sonic-breakout_cfg.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-breakout_cfg.yang 

  2. HLD 記載: portPORT テーブルへの leafref でなく string とした理由 — DPB 操作中は親ポートが PORT テーブルに存在しない場合があるため。 https://github.com/sonic-net/SONiC/blob/49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06/doc/dynamic-port-breakout/sonic-dynamic-port-breakout-HLD.md