VLAN テーブル¶
概要¶
IEEE 802.1Q VLAN を CONFIG_DB で定義するテーブル。VLAN 名 (Vlan100 形式) をキーに、VLAN ID、DHCP リレーサーバ、MTU、admin status、MAC、エイリアスを保持する3。VLAN_MEMBER と組合わせてポート割当てを、VLAN_INTERFACE と組合わせて L3 IF を構成する。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>VLAN")]
DM["vlanmgrd"]
CDB --> DM
APPDB[("APP_DB<br/>APP_VLAN_TABLE")]
DM --> APPDB
SYNCD["syncd"]
APPDB --> SYNCD
SAI["SAI<br/>sai_vlan_api"]
SYNCD --> SAI
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造¶
<name> は Vlan<id> (id 範囲 2..4094)。
フィールド一覧¶
| フィールド | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
name (key) |
string Vlan<2..4094> |
✅ | - | VLAN 名 |
vlanid |
uint16 (2..4094) | - | - | VLAN ID。name 末尾と一致しなければならない (must) |
alias |
string | - | - | ユーザ別名 |
description |
string (1..255) | - | - | 説明 |
dhcp_servers |
leaf-list ip-address | - | - | DHCPv4 リレー先 |
dhcpv6_servers |
leaf-list ipv6-address | - | - | DHCPv6 リレー先 |
mtu |
uint16 (1..9216) | - | - | MTU |
admin_status |
admin_status |
- | - | 管理状態 |
mac |
mac-address | - | - | VLAN 上の MAC |
制約¶
vlanidはnameの数値部分と一致しなければならない (substring-after(../name, 'Vlan') = current())
購読者¶
vlanmgrd: VLAN 作成・MTU・admin_status をモニタし Linux bridge に反映orchagentのVlanMgr/VRouterOrch: SAI bridge / VLAN を構成dhcprelayd(sonic-dhcp-relay):dhcp_servers/dhcpv6_serversを読み出して relay agent を構成
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
VLAN_MEMBER、VLAN_INTERFACE、DHCP_RELAY - 関連 CLI:
config vlan(add / del / member / dhcp_relay) - 関連 YANG:
sonic-vlan
値依存挙動マトリクス¶
| フィールド | 値 | 実挙動 |
|---|---|---|
admin_status |
up |
ip link set Vlan<id> up (vlanmgr.cpp:168-170) |
admin_status |
down |
ip link set Vlan<id> down |
admin_status |
省略 | "up" が自動補完される (vlanmgr.cpp:424) |
mtu |
省略 | DEFAULT_MTU_STR(通常 9100)が使用される (vlanmgr.cpp:96) |
mtu |
明示指定 | 受け取るが netdev MTU は変更しない。SWSS_LOG_DEBUG("Host VLAN mtu setting to be supported.") のみ出力(TODO 状態) |
mac |
省略 | gMacAddress(スイッチ MAC)が自動補完 |
mac |
明示指定 | 指定 MAC が VLAN インタフェース MAC として設定される |
dhcp_servers |
leaf-list | dhcprelayd がリストを読み DHCPv4 relay を構成 |
dhcp_servers |
単一文字列誤入力 | dhcprelayd が relay を起動しない(leaf-list 形式で入力必須) |
vlanid |
name 末尾と不一致 |
YANG must 違反で reject |
例外条件・特殊挙動 ¶
- キー形式検証:
Vlan<2..4094>パターン。Vlanプレフィクスがない、または数値部が不正な場合vlanmgrdはエントリを破棄する (SWSS_LOG_ERROR("Invalid key format"))1。 vlanid整合性 (YANG):must "substring-after(../name, 'Vlan') = current()"—name末尾とvlanidフィールドが不一致の場合 YANG バリデーションが reject する2。- MTU 無視:
mtuフィールドはホスト VLAN netdev への適用が TODO 扱いで、vlanmgrdは受け取ってもSWSS_LOG_DEBUG("Host VLAN mtu setting to be supported.")のみ出力し実際には変更しない1。 - warm-restart 重複スキップ: STATE_DB に既存かつ
m_vlansに登録済みの場合、再作成をスキップして replay エントリを削除する("already created" デバッグログ)1。 - デフォルト補完:
mtu省略時はDEFAULT_MTU_STR(通常9100)、mac省略時はスイッチ MAC が自動補完される1。
関連リファレンス¶
- YANG:
sonic-vlan - CLI:
config vlan
引用元¶
関連ページ¶
関連 Topics¶
運用ヒント¶
典型値¶
Vlan100等のVlan<2..4094>形式キー。vlanidは名前末尾と一致。mtu: 9100(ホスト側 jumbo 用途)。admin_status:up。dhcp_servers:["10.0.0.1", "10.0.0.2"]等の relay 先。
よくある誤設定¶
vlanidをname末尾と異なる値で投入すると YANGmust違反で reject される。VLAN_MEMBERを作る前にVLAN_INTERFACEを作ると L3 IF が isolated VLAN にぶら下がる。dhcp_serversをリストで無く単一文字列で入れると dhcprelayd が relay を起動しない。
確認コマンド¶
sonic-db-cli CONFIG_DB hgetall 'VLAN|Vlan100'
sonic-db-cli CONFIG_DB keys 'VLAN_MEMBER|Vlan100|*'
show vlan brief
-
sonic-swss/cfgmgr/vlanmgr.cpphttps://github.com/sonic-net/sonic-swss/blob/master/cfgmgr/vlanmgr.cpp ↩↩↩↩ -
sonic-buildimage/src/sonic-yang-models/yang-models/sonic-vlan.yanghttps://github.com/sonic-net/sonic-buildimage/blob/master/src/sonic-yang-models/yang-models/sonic-vlan.yang ↩ -
YANG 定義:
sonic-buildimage/src/sonic-yang-models/yang-models/sonic-vlan.yang(sha9ea932ec). https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-vlan.yang ↩