TUNNEL テーブル¶
概要¶
SONiC Dual-ToR (Active-Standby) 構成で、ToR スイッチ間に張る IPinIP トンネルを定義するテーブル1。tunnelmgrd が CONFIG_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 構造¶
<mux_tunnel>:MuxTunnel<n>の文字列パターン(YANGpattern "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_ipはPEER_SWITCH_LIST.address_ipv4への leafref で、PEER_SWITCH に登録された IPv4 のみ使えるtunnel_typeは IPINIP のみ。tunneldecaporch.cppもtunnel_type != "IPINIP"をエラーとする
購読者¶
tunnelmgrd(cfgmgr): CONFIG_DB→APPL_DB へ橋渡しtunneldecaporch(orchagent): APPL_DBTUNNEL_DECAP_TABLE経由で SAI へ反映
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
PEER_SWITCH、MUX_CABLE、TUNNEL_DECAP_TABLE(派生はdocs/reference/config-db/tunnel-decap-table.md) - 関連 CLI: 直接の CLI は無く
config_db.jsonで投入 - 関連 YANG:
sonic-tunnel、sonic-peer-switch
関連リファレンス¶
- YANG:
sonic-tunnel/sonic-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_typeがIPINIP以外の場合、キャッシュには追加されるが 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_ip、encap_ecn_mode、ttl_mode。
よくある誤設定¶
- dual-ToR で
tunnel_typeを両 ToR で揃えないと MUX_CABLE 経由のトラフィックが片方向 drop。
確認コマンド¶
-
YANG 定義:
sonic-tunnel.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-tunnel.yang; orchagent 側パース:tunneldecaporch.cpp. https://github.com/sonic-net/sonic-swss/blob/4305596156d70e9797e8a881b3d19b46de0bce0d/orchagent/tunneldecaporch.cpp ↩