コンテンツにスキップ

VLAN テーブル

概要

IEEE 802.1Q VLANCONFIG_DB で定義するテーブル。VLAN 名 (Vlan100 形式) をキーに、VLAN ID、DHCP リレーサーバ、MTU、admin status、MAC、エイリアスを保持する3VLAN_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 構造

VLAN|<name>

<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

制約

  • vlanidname の数値部分と一致しなければならない (substring-after(../name, 'Vlan') = current())

購読者

  • vlanmgrd: VLAN 作成・MTU・admin_status をモニタし Linux bridge に反映
  • orchagentVlanMgr / VRouterOrch: SAI bridge / VLAN を構成
  • dhcprelayd (sonic-dhcp-relay): dhcp_servers / dhcpv6_servers を読み出して relay agent を構成

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: VLAN_MEMBERVLAN_INTERFACEDHCP_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

関連リファレンス

引用元

関連ページ

関連 Topics

運用ヒント

典型値

  • Vlan100 等の Vlan<2..4094> 形式キー。vlanid は名前末尾と一致。
  • mtu: 9100(ホスト側 jumbo 用途)。
  • admin_status: up
  • dhcp_servers: ["10.0.0.1", "10.0.0.2"] 等の relay 先。

よくある誤設定

  • vlanidname 末尾と異なる値で投入すると YANG must 違反で 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