コンテンツにスキップ

TUNNEL テーブル

概要

SONiC Dual-ToR (Active-Standby) 構成で、ToR スイッチ間に張る IPinIP トンネルを定義するテーブル1tunnelmgrdCONFIG_DB の本テーブルを購読し、APPL_DB TUNNEL_DECAP_TABLE を生成。tunneldecaporch (orchagent) が SAI tunnel オブジェクトを作成する。

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>TUNNEL")]
  DM["tunnelmgrd"]
  CDB --> DM
  APPDB[("APP_DB<br/>APP_TUNNEL_DECAP_TABLE")]
  DM --> APPDB
  SYNCD["syncd"]
  APPDB --> SYNCD
  SAI["SAI<br/>sai_tunnel_api"]
  SYNCD --> SAI

凡例

CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。

key 構造

TUNNEL|<mux_tunnel>
  • <mux_tunnel>: MuxTunnel<n> の文字列パターン(YANG pattern "MuxTunnel[0-9]+"

フィールド

フィールド 説明
tunnel_type enum IPINIP カプセル化方式。Dual-ToR では IPinIP 固定
src_ip leafref → PEER_SWITCH.address_ipv4 トンネル送信元 (= peer ToR の IPv4)
dst_ip inet:ipv4-address トンネル宛先 (自スイッチの IPv4)
dscp_mode string uniform/pipe DSCP 継承モード
ecn_mode string copy_from_outer/standard デカプセル時 ECN 処理
encap_ecn_mode string standard カプセル時 ECN マーキング
ttl_mode string uniform/pipe TTL 継承モード
decap_dscp_to_tc_map string デカプセル時 DSCP→TC マップ名
decap_tc_to_pg_map string デカプセル時 TC→PG マップ名
encap_tc_to_dscp_map string カプセル時 TC→DSCP マップ名
encap_tc_to_queue_map string カプセル時 TC→Queue マップ名

制約

  • src_ipPEER_SWITCH_LIST.address_ipv4 への leafref で、PEER_SWITCH に登録された IPv4 のみ使える
  • tunnel_type は IPINIP のみ。tunneldecaporch.cpptunnel_type != "IPINIP" をエラーとする

購読者

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: PEER_SWITCHMUX_CABLETUNNEL_DECAP_TABLE (派生は docs/reference/config-db/tunnel-decap-table.md)
  • 関連 CLI: 直接の CLI は無く config_db.json で投入
  • 関連 YANG: sonic-tunnelsonic-peer-switch

関連リファレンス

引用元

値依存挙動マトリクス

tunnel_type: IPINIP のみ (YANG pattern 制約)

dscp_mode: uniform / pipe

ecn_mode: copy_from_outer / standard

encap_ecn_mode: standard のみ (YANG pattern 制約)

ttl_mode: uniform / pipe

フィールド 挙動
tunnel_type IPINIP tunnelmgrd が APPL_DB へ通知。SAI tunnel オブジェクト作成
tunnel_type IPINIP 以外 キャッシュには追加されるが APPL_DB に通知されない
dscp_mode uniform 外側ヘッダの DSCP を内側パケットにコピー
dscp_mode pipe 内側ヘッダの DSCP を保持
ecn_mode copy_from_outer 外側 ECN フィールドを内側にコピー
ecn_mode standard RFC 6040 準拠 ECN 処理
ttl_mode uniform 外側 TTL を内側にコピー
ttl_mode pipe 内側 TTL を保持
src_ip 未設定 (空) P2MP (ワイルドカード) decap term 作成 — 全 IPinIP を受け入れる
src_ip PEER_SWITCH に未登録の IP YANG leafref 違反で CONFIG_DB 書き込み拒否
ecn_mode 設定後に変更 SAI create-only 属性のため変更不可。削除→再作成が必要

例外条件・特殊挙動

  • Peer IP 未設定時はトンネル未作成: PEER_SWITCH テーブルから m_peerIp が取得できない場合、"Peer/Remote IP not configured" を LOG_NOTICE して APPL_DB への書き込みをスキップする。Peer IP 設定後に再処理される。
  • 存在しないトンネルの DEL: キャッシュに存在しないトンネルへの DEL は "Tunnel <name> not found" を LOG_ERROR し return true(タスクは消費され再試行なし)。
  • IPINIP 以外は APPL_DB 不通知: tunnel_typeIPINIP 以外の場合、キャッシュには追加されるが orchagent への APPL_DB 通知は行われない。
  • Warm reboot 時の重複防止: m_tunnelReplay にエントリが存在する場合(ウォームリブート時)は APPL_DB への書き込みをスキップして orchagent クラッシュを防ぐ。
  • src_ip 未設定で P2MP decap: src_ip が空のまま SET すると P2MP(ワイルドカード)タイプの decap term が作成される。意図せず全 IPinIP トンネルパケットを受け入れる設定になる点に注意。
  • カーネル ip tunnel add 失敗: コマンド実行失敗で configIpTunnel()false を返すとタスクがキューに戻されリトライされる。

運用ヒント

典型値

  • key 形式: TUNNEL|<tunnel-name>
  • tunnel_type: IPINIP 等。
  • src_ip / dst_ipencap_ecn_modettl_mode

よくある誤設定

  • dual-ToR で tunnel_type を両 ToR で揃えないと MUX_CABLE 経由のトラフィックが片方向 drop。

確認コマンド

sonic-db-cli CONFIG_DB keys 'TUNNEL|*'
show tunnel