Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 06 章: L2 / VLAN / LAG を参照。
裏取りステータス: code-verified
sonic-mgmt-common/translib/transformer/sw_vlan.go / xfmr_intf.go / vlan_openconfig_test.go で OpenConfig VLAN transformer を確認。Subscribe_routed_vlan_ip_addr_xfmr, YangToDb_intf_routed_vlan_name_xfmr, routed_vlan_ip_addr_del, VLAN_INTERFACE_TN が switched-vlan / routed-vlan を CONFIG_DB の VLAN / VLAN_INTERFACE / VLAN_MEMBER にマップする実装あり(verified at: 2026-05-09)。
VLAN インタフェースの OpenConfig YANG 対応¶
なぜ必要か¶
SONiC は従来 VLAN を SONiC 独自 YANG 経由でしか REST / gNMI 公開していなかった。本機能はこれに OpenConfig YANG (openconfig-interfaces + openconfig-vlan + openconfig-if-ip) を追加し、相互運用性を上げる1。
実装は sonic-mgmt-common の transformer 経路(translib ベースではない)。Management Framework / gNMI コンテナにコードを追加するだけで、CONFIG_DB / APP_DB / STATE_DB / ASIC_DB / COUNTER_DB のスキーマ変更は無し1。
スコープ1: ✅ VLAN interface / member の設定取得、Ethernet / PortChannel メンバ管理、VLAN intf の IPv4/IPv6。❌ KLISH CLI 変更なし、❌ Subinterface 非対応。
全体像¶
flowchart LR
CTL[Client<br>REST / gNMI] --> MF[Management Framework]
MF --> XF[transformer<br>sonic-mgmt-common]
XF --> CDB[(CONFIG_DB<br>VLAN / VLAN_INTERFACE / VLAN_MEMBER)]
サポートする OpenConfig ツリー¶
openconfig-interfaces:interfaces/interface[<name>] 配下:
oc-eth:ethernet/oc-vlan:switched-vlan/config
interface-mode = ACCESS | TRUNK
access-vlan = vlan-id
trunk-vlans* = vlan-id (list)
oc-lag:aggregation/oc-vlan:switched-vlan/config
(Ethernet と同じ 3 フィールド、PortChannel 用)
oc-vlan:routed-vlan/config
vlan = "Vlan<id>"
oc-ip:ipv4/addresses/address[<ip>]/config { ip, prefix-length }
oc-ip:ipv6/addresses/address[<ip>]/config { ip, prefix-length }
oc-ip:ipv6/config/enabled
switched-vlan は L2 メンバ(access / trunk)、routed-vlan は VLAN intf の L3 IP。
CONFIG_DB マッピング¶
| OpenConfig | CONFIG_DB |
|---|---|
interface-mode = ACCESS |
VLAN_MEMBER.tagging_mode = untagged |
interface-mode = TRUNK |
VLAN_MEMBER.tagging_mode = tagged |
trunk-vlans |
VLAN_MEMBER キー(VLAN ごと) |
routed-vlan.ipv4/ipv6 address |
VLAN_INTERFACE\|Vlan<id>\|<ip>/<plen> |
oc-ip:ipv6/config/enabled |
VLAN_INTERFACE.ipv6_use_link_local_only 等 |
REST / gNMI 設定例¶
PATCH で trunk メンバ追加:
curl -k -X PATCH \
"https://<dut>/restconf/data/openconfig-interfaces:interfaces/interface=Ethernet0/openconfig-if-ethernet:ethernet/openconfig-vlan:switched-vlan" \
-H "Content-Type: application/yang-data+json" \
-d '{"openconfig-vlan:switched-vlan":{"config":{"interface-mode":"TRUNK","trunk-vlans":[10,20]}}}'
GET(IPv4 設定済の VLAN):
curl -k "https://<dut>/restconf/data/openconfig-interfaces:interfaces/interface=Vlan10" \
-H "accept: application/yang-data+json"
gNMI は Set (REPLACE / UPDATE / DELETE) / Get / Subscribe (ON_CHANGE / SAMPLE) をサポート1。詳細ペイロード例とエラーカタログは原文 HLD §3〜§6 参照。
制限事項¶
- subinterface 非対応(本 HLD スコープ外)
- KLISH CLI は SONiC 独自 YANG 経路のまま。OpenConfig は REST / gNMI 専用
- 同一 CONFIG_DB を共有 するため、SONiC YANG 経路と OpenConfig 経路の同時更新で一時的不整合の可能性
干渉する機能¶
- 既存 SONiC YANG 経路:
sonic-vlan/sonic-vlan-interfaceと CONFIG_DB を共有 - VlanMgr / orchagent: スキーマ変更なしなので透過的に動く
- trunk/access 切替:
VLAN_MEMBERキーの追加・削除とtagging_mode書き換えで表現
トラブルシューティング¶
redis-cli -n 4 HGETALL 'VLAN_INTERFACE|Vlan10|133.3.3.4/24'
redis-cli -n 4 KEYS 'VLAN_MEMBER|Vlan10|*'
docker logs mgmt-framework 2>&1 | tail # transformer エラー
PATCH が 4xx → パス表記 (Vlan<id>)、モード組合せ、leaf 名を確認。
関連 Topics¶
- 06-l2-vlan-lag/setup: VLAN / メンバ設定
- 10-gnmi-openconfig/operations: gNMI / REST 経路の使い方
- 10-gnmi-openconfig/internals: transformer の仕組み