裏取りステータス: code-verified
sonic-buildimage issue tracker の実環境報告から抽出。master ブランチ対象。
YANG モデル既知問題と検証¶
概要¶
SONiC の YANG モデルは sonic-buildimage/src/sonic-yang-models/yang-models/ 以下に格納され、
CONFIG_DB の検証・管理フレームワーク(mgmt-framework)・DPB の依存解決に使用される。
本ページは issue tracker で報告された YANG モデルの既知問題を整理する。
1. ビルド時エラー¶
1-1. yang-models/sonic_yang_tree が存在しない (#7076)¶
原因: YANG ツリーファイルの生成ステップが並列ビルドで skip されることがある。
または初回 make configure 後のクリーンビルドで発生。
対処:
# YANG ツリーを手動生成
cd src/sonic-yang-models
python3 -m pytest tests/ -v
# または
make clean && make configure PLATFORM=<target> && make
1-2. libyang バックリンク問題でビルド失敗 (#9312)¶
複数の YANG モジュールを import すると libyang のバックリンクコードが
メモリアクセス違反を起こす場合がある。
歴史的背景: この問題の回避策として一部の YANG フィールドが 過去にコメントアウトされた。libyang バージョンアップで概ね修正済み。
確認:
2. パターン / 型定義の問題¶
2-1. sonic-scheduler.yang パターン問題 (#9611)¶
スケジューラー名のパターン正規表現が実際の CLI で許容される値と 一致しないケースがある。
2-2. sonic-types.yang の ACL ACCEPT 欠落 (#9638)¶
sonic-types.yang の ACL アクション定義に ACCEPT が含まれておらず、
ACCEPT を指定した ACL ルールが YANG 検証で拒否される。
対処: sonic-acl.yang と sonic-types.yang の最新版を確認。
master では修正済みの可能性が高い。
2-3. ACL の MIRROR_INGRESS_ACTION / MIRROR_EGRESS_ACTION 欠落 (#9929)¶
ACL ルールの MIRROR_INGRESS_ACTION / MIRROR_EGRESS_ACTION が
YANG モデルに定義されていないため、mgmt-framework 経由での設定時に
検証エラーが発生する。
3. テーブル YANG モデル欠落¶
3-1. BGP_PEER_RANGE テーブル (#9794)¶
BGP 動的ピア(peer-range)のテーブルに YANG モデルがない。 DPB の依存チェックや CONFIG_DB 検証で「未検証テーブル」として警告になる。
3-2. MIRROR_SESSION と CONFIG_DB の不整合 (#12397)¶
MIRROR_SESSION テーブルのフィールド定義が
実際の CONFIG_DB スキーマと乖離している。
影響: mgmt-framework 経由でミラーセッションを設定すると 検証エラーになる場合がある。
ワークアラウンド: redis-cli で直接 CONFIG_DB に書き込む。
redis-cli -n 4 HMSET "MIRROR_SESSION|mirror1" \
src_ip 192.0.2.1 \
dst_ip 192.0.2.2 \
ttl 255 \
queue 0
3-3. SNMP 関連テーブルの YANG 欠落 (#12573)¶
これらのテーブルに YANG モデルが存在しないため、 mgmt-framework 経由での SNMP 設定に制限がある。
4. 制約・バリデーション問題¶
4-1. TACPLUS 空の global セクション (#9746)¶
TACPLUS の global セクションが空({})の場合に YANG 検証が失敗する。
非空の場合は検証が通る非対称な挙動。
ワークアラウンド: global セクションに最低 1 つのフィールドを設定する。
4-2. BGP peer-range 重複 IP チェック (#10376)¶
sonic-yang extension で BGP ピア範囲の重複チェックが実装されているが、 エラーメッセージが不明瞭な場合がある。
4-3. VLAN / VLAN_INTERFACE の制約欠落 (#12256)¶
VLAN ID の範囲制約(1-4094)や VLAN インターフェースの必須フィールドチェックが YANG モデルに反映されていないケースがある。
4-4. dot1p-tc-map YANG と mgmt-framework (#10386)¶
sonic-dot1p-tc-map.yang の定義が mgmt-framework の
OpenAPI スキーマ生成と競合する場合がある。
5. PORT の lanes 一意性検証 (#9623)¶
PORT テーブルで同一の lane 番号を複数ポートに割り当てることを YANG バリデーションで拒否する拡張が追加された。
確認:
sonic-cfggen -d --print-data | python3 -c "
import json, sys
data = json.load(sys.stdin)
port_data = data.get('PORT', {})
lanes_set = set()
for port, cfg in port_data.items():
for lane in cfg.get('lanes', '').split(','):
lane = lane.strip()
if lane in lanes_set:
print(f'Duplicate lane {lane} in {port}')
lanes_set.add(lane)
print('Lane check complete')
"
6. Annotation YANG の xpath 解決エラー (#10668)¶
mgmt-framework の YANG annotation ファイルで、 フィールド名とテーブル名の xpath が解決できない場合がある。
確認:
docker exec mgmt-framework supervisorctl status
docker logs mgmt-framework | grep -E 'xDbSpecMap|xpath' | tail -20
YANG モデル管理のベストプラクティス¶
| 操作 | コマンド |
|---|---|
| YANG バリデーション実行 | python3 -m pytest src/sonic-yang-models/tests/ |
| 特定テーブルのモデル確認 | find src/sonic-yang-models -name "*.yang" | xargs grep -l "TABLE_NAME" |
| CONFIG_DB との整合確認 | sonic-cfggen -d --print-data \| python3 -c "import json,sys; d=json.load(sys.stdin); print(list(d.keys()))" |
| YANG ツリー生成 | cd src/sonic-yang-models && python3 setup.py build |