コンテンツにスキップ

TUNNEL STATE_DB テーブル群

概要

STATE_DB には TUNNEL の処理結果を反映する複数のテーブルが存在する。書き込み元はオーケストレーター(orchagent)と cfgmgr(vxlanmgrd)の両方。

STATE_DB テーブル名 書き込み元 役割
TUNNEL_DECAP_TABLE tunneldecaporch APPL_DB TUNNEL_DECAP_TABLE の SAI 反映状態ミラー
TUNNEL_DECAP_TERM_TABLE tunneldecaporch Decap term エントリの SAI 反映状態ミラー
VXLAN_TUNNEL_TABLE VxlanTunnelOrch VxLAN トンネルの作成状態 + operstatus
VXLAN_TABLE VxlanMgr VxLAN netdevice 作成成功フラグ

TUNNEL_DECAP_TABLE

key 構造

TUNNEL_DECAP_TABLE|<tunnel_name>

フィールド

フィールド 説明
tunnel_type string IPINIP 固定。省略された場合はこのフィールドなし
dscp_mode string uniform または pipe
ecn_mode string copy_from_outer または standard
encap_ecn_mode string standard のみ有効
ttl_mode string uniform または pipe

書き込みは setDecapTunnelStatus()APPEND_IF_NOT_EMPTY マクロを使用するため、内部キャッシュで空のフィールドは STATE_DB に書かれない

書き込みタイミング

  1. 新規トンネル作成: addDecapTunnel() 完了後
  2. 既存トンネル更新(dscp_mode / ttl_mode / QoS マップ変更): SET_COMMAND 処理後
  3. 削除: removeDecapTunnel()del() — ただし ref count > 0 の間は消去されない

TUNNEL_DECAP_TERM_TABLE

key 構造

TUNNEL_DECAP_TERM_TABLE|<tunnel_name>|<dst_ip_prefix>

フィールド

フィールド 省略時 説明
term_type string 常に存在 (P2MP がデフォルト) P2P / P2MP / MP2MP
src_ip string フィールドなし P2P/MP2MP 時は必須。省略で P2MP
subnet_type string フィールドなし vlan または vip。MP2MP subnet decap 専用

term_type のデフォルト P2MPdoDecapTunnelTermTask() 内の変数初期値 (TUNNEL_TERM_TYPE_P2MP) に由来する。

書き込みタイミング

  • addDecapTunnelTermEntry() 成功後に setDecapTunnelTermStatus() が呼ばれる
  • 削除: removeDecapTunnelTermStatus()del()

VXLAN_TUNNEL_TABLE

key 構造

VXLAN_TUNNEL_TABLE|<tunnel_name>

フィールド

フィールド 初期値 説明
src_ip string VxLAN トンネル送信元 IP
dst_ip string VxLAN トンネル宛先 IP (P2P の場合)
tnl_src string CLI (config経由) または EVPN (BGP EVPN経由)
operstatus string down 作成直後は常に down。ポート UP で up に遷移

operstatus の初期値 "down"addRemoveStateTableEntry() でハードコードされている(vxlanorch.cpp L1942)。

書き込みタイミング

  • トンネル作成: addRemoveStateTableEntry(add=true)operstatus=down で書き込み
  • ポート状態変化: operstatusup/down に更新
  • 削除: addRemoveStateTableEntry(add=false)del()
  • Warm reboot: 既存エントリが存在する場合は上書きしない(重複防止)

VXLAN_TABLE

key 構造

VXLAN_TABLE|<vxlan_name>

フィールド

フィールド 説明
state string ok (固定) VxLAN netdevice 作成成功を示す。失敗時は書かれない

createVxlan() (vxlanmgr.cpp) 成功時のみ "state"="ok" を書き込む。値はハードコード固定。

関連 CONFIG_DB / CLI

暗黙デフォルト・コード由来挙動 (Phase A)

以下は設定省略時にコード実装から導出される暗黙の挙動。

TUNNEL_DECAP_TABLE — フィールド省略時の挙動

フィールド 省略/未設定時の STATE_DB 挙動 ソース証跡
tunnel_type APPEND_IF_NOT_EMPTY マクロにより STATE_DB に書かれない tunneldecaporch.cpp L1526
dscp_mode 空の場合は STATE_DB に書かれない tunneldecaporch.cpp L1527
ecn_mode 空の場合は STATE_DB に書かれない tunneldecaporch.cpp L1528
encap_ecn_mode 空の場合は STATE_DB に書かれない tunneldecaporch.cpp L1529
ttl_mode 空の場合は STATE_DB に書かれない tunneldecaporch.cpp L1530

TUNNEL_DECAP_TERM_TABLE — フィールド省略時の挙動

フィールド 省略/未設定時の STATE_DB 挙動 ソース証跡
term_type 常に書かれる。省略時デフォルト P2MP tunneldecaporch.cpp L361, L1550
src_ip src_ip_str.empty() なら STATE_DB に書かれない tunneldecaporch.cpp L1551-1554
subnet_type subnet_type.empty() なら STATE_DB に書かれない tunneldecaporch.cpp L1555-1558

VXLAN_TUNNEL_TABLE — ハードコードデフォルト

フィールド ハードコード値 説明
operstatus "down" トンネル作成直後の初期値。ポート link-up イベントまで down のまま
tnl_src "EVPN" BGP EVPN 経由で作成された場合の固定ラベル

VXLAN_TABLE — ハードコードデフォルト

フィールド ハードコード値 説明
state "ok" createVxlan() 成功時のみ書き込まれる。値は常に "ok" でユーザー変更不可

削除・ref count 依存の残存

  • TUNNEL_DECAP_TABLEtunneldecaporch が参照カウント (ref_count) を管理しており、MUX や他エンティティからの参照が残る間は del() されない。削除要求後も STATE_DB エントリが残存する場合がある。

Warm Reboot 時のスキップ

  • VXLAN_TUNNEL_TABLE: warm reboot 中 (WarmStartState == INITIALIZED) かつ既存エントリが STATE_DB に存在する場合、addRemoveStateTableEntry() は書き込みをスキップする(vxlanorch.cpp L1927-1945)。

YANG-実装 discrepancy

  • TUNNEL_DECAP_TABLE / TUNNEL_DECAP_TERM_TABLE / VXLAN_TUNNEL_TABLE は STATE_DB テーブルであり、sonic-yang-models に対応する YANG モジュールは存在しない。フィールド定義はすべてコード (tunneldecaporch.cpp / vxlanorch.cpp) から導出。
  • TUNNEL_DECAP_TERM_TABLEterm_type デフォルト P2MP は YANG にも明示されておらず、コードの変数初期値のみが規定している。

引用元