裏取りステータス: code-verified
sonic-buildimage issue tracker の実環境報告から抽出。master ブランチ対象。
動的ポートブレイクアウト(DPB)既知問題と YANG モデル¶
概要¶
動的ポートブレイクアウト(DPB)は reload 不要でポート分割モードを変更する機能だが、 YANG モデルの不整合・orchagent との競合・LLDP や ACL との非整合など 実装上のエッジケースが多い。本ページは issue tracker の報告を整理する。
1. YANG モデル不整合による DPB 失敗¶
1-1. PORTCHANNEL_MEMBER YANG モデル欠落 (#6722)¶
DPB の依存チェック時に以下のメッセージが出る。
Note: Below table(s) have no YANG models:
FEATURE, SNMP_COMMUNITY, SNMP, PORTCHANNEL_MEMBER, TELEMETRY,
Below Config can not be verified, It may cause harm to the system
原因: PORTCHANNEL_MEMBER テーブルに YANG モデルが存在しない。
DPB の依存解決ロジックが YANG 検証を経由するため、
モデルがないテーブルは「未検証」として警告扱いになる。
対処: PR #7xxx で sonic-portchannel.yang に PORTCHANNEL_MEMBER が追加された。
master の最新版を使用すること。
1-2. BGP_NEIGHBOR YANG モデルが DPB エラーを引き起こす (#7959)¶
原因: YANG の uses / grouping キーワードが
libyang の特定バージョンで期待通りに動作しない。
BGP_NEIGHBOR テーブルの ASN フィールドが検証エラーになる。
影響: BGP neighbor が設定されている port を breakout しようとすると失敗する。
回避策: Breakout 前に BGP neighbor 設定を一時削除する。
1-3. BUFFER_PORT_EGRESS_PROFILE 設定時の DPB 失敗 (#9801)¶
原因: BUFFER_PORT_EGRESS_PROFILE テーブルに YANG モデルが存在しないか、
DPB の依存解決ロジックがこのテーブルを認識しない。
対処: Breakout 前に BUFFER_PORT_EGRESS_PROFILE エントリを削除する。
1-4. libyang バックリンク問題 (#9312)¶
背景: libyang のバックリンクコードのバグにより、
YANG モジュール間の import が特定の組み合わせでビルドを壊す。
過去のワークアラウンドとしていくつかの YANG フィールドがコメントアウトされた経緯がある。
現状: libyang のバージョンアップとパッチで概ね解消。
2. platform.json 関連¶
2-1. has_global_scope 要素の invalid value (#9326)¶
原因: sonic-feature.yang の has_global_scope リーフの型定義が
boolean ではなく string になっているなど不整合。
確認:
python3 -c "
import json
with open('/etc/sonic/platform.json') as f:
data = json.load(f)
print(json.dumps(data.get('interfaces', {}).get('Ethernet0', {}), indent=2))
"
2-2. None フィールドの非対応 (#9663)¶
platform.json で None 値が記載されている場合に CLI が動作しない。
対処: platform.json の breakout モードリストに null ではなく
有効なモード文字列のみを記載する。
3. Orchagent / syncd 相互作用¶
3-1. PORT HOST IF 削除失敗 (#7403)¶
VS(Virtual Switch)環境での DPB 中に sai_remove_hostif が失敗する。
原因: VS SAI が HIF 削除シーケンスの順序を正しく処理しない。
3-2. Orchagent クラッシュ(400G → 4x100G)(#9653)¶
影響プラットフォーム: 一部の Broadcom ベース 400G NIC。
確認:
3-3. DPB 中の CONFIG_DB DELETE 欠落 (#10005)¶
現象: DPB 時に一部の CONFIG_DB エントリが orchagent に伝達されず、 ポートが部分的な状態のまま残る。
対処: swss サービスを再起動して状態を再同期する。
4. LLDP との相互作用 (#9802)¶
現象: DPB でポートを削除する際に lldpd がエラーを記録し、
LLDP neighbor テーブルに古いエントリが残る。
確認:
対処: DPB 完了後に lldpd を再起動する。
5. カウンター関連 (#11190, #11418)¶
5-1. DPB 時のカウンターエラーログ (#11190)¶
Breakout 操作中に counters docker が古いポート OID を参照してエラーになる。 プラットフォーム依存ではなく、master 全体で発生しうる。
5-2. Breakout ポートのカウンターレート不表示 (#11418)¶
10G モードにブレイクアウトした後、show interfaces counters rates が
正しく表示されない場合がある。
条件: プラットフォームが該当速度をサポートしていない場合は表示異常が出ることがある。
6. CONFIG_DB の BREAKOUT_CFG 更新 (#7402)¶
イメージアップグレード時に config_db.json の BREAKOUT_CFG が
新しいフォーマットに自動移行されない場合がある。
確認:
対処: 必要に応じて手動で BREAKOUT_CFG を更新するか、
config migrate コマンドを実行する。
7. Redis I/O エラー (#6935)¶
現象: DPB 操作中に Redis の I/O エラーが発生する。
原因: 大規模な CONFIG_DB 変更(多数のポート削除・追加)が Redis のパイプライン処理を圧迫する場合がある。
対処: database サービスのログを確認し、Redis の状態を診断する。
DPB トラブルシューティングフロー¶
flowchart TD
START[DPB 失敗] --> CHECK_YANG{YANG エラー?}
CHECK_YANG -- Yes --> FIX_YANG[YANG モデル確認\nPORTCHANNEL_MEMBER\nBUFFER_PORT_EGRESS_PROFILE]
CHECK_YANG -- No --> CHECK_PLATFORM{platform.json エラー?}
CHECK_PLATFORM -- Yes --> FIX_PLATFORM[None 値除去\nhas_global_scope 確認]
CHECK_PLATFORM -- No --> CHECK_DEPS{依存設定あり?}
CHECK_DEPS -- Yes --> REMOVE_DEPS[BGP neighbor / ACL / VLAN 削除後に再試行]
CHECK_DEPS -- No --> CHECK_ORCH{orchagent crash?}
CHECK_ORCH -- Yes --> RESTART[swss restart\nshow techsupport]
CHECK_ORCH -- No --> LOGS[docker logs swss\ndocker logs database]