TUNNEL_DECAP_TABLE¶
YANG 未定義
TUNNEL_DECAP_TABLE は CONFIG_DB ではなく APPL_DB / STATE_DB のテーブルであり、sonic-yang-models には対応モジュールが存在しない。本ページは schema.h のテーブル名定数と tunneldecaporch.cpp の実装からフィールドを起こしたもの。CONFIG_DB に同名テーブルを直接書くことは想定されていない。
概要¶
tunneldecaporch が消費する アプリケーション層テーブル。CONFIG_DB の TUNNEL を tunnelmgrd が APPL_DB に投影する形で生成され、SAI tunnel/tunnel-term オブジェクトに反映される1。STATE_DB にも同名のミラーがある。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>TUNNEL_DECAP_TABLE")]
DM["tunneldecaporch"]
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 から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
DB / key¶
APPL_DB: TUNNEL_DECAP_TABLE:<tunnel_name>
STATE_DB: TUNNEL_DECAP_TABLE|<tunnel_name>
APPL_DB: TUNNEL_DECAP_TERM_TABLE:<tunnel_name>:<dst_ip> # 終端 IP の管理用 sub テーブル
テーブル名定数は schema.h の APP_TUNNEL_DECAP_TABLE_NAME / APP_TUNNEL_DECAP_TERM_TABLE_NAME / STATE_TUNNEL_DECAP_TABLE_NAME / STATE_TUNNEL_DECAP_TERM_TABLE_NAME2。
フィールド¶
| フィールド | 型 | 説明 |
|---|---|---|
tunnel_type |
string IPINIP |
カプセル化種別。それ以外はエラー |
src_ip |
IPv4 アドレス | トンネル送信元 IP |
dst_ip |
IPv4 アドレスのカンマ区切りリスト | 終端 IP 群(TUNNEL_DECAP_TERM_TABLE で個別管理) |
dscp_mode |
string uniform/pipe |
DSCP 継承 |
ecn_mode |
string copy_from_outer/standard |
ECN モード(create-only) |
encap_ecn_mode |
string standard |
カプセル時 ECN |
ttl_mode |
string uniform/pipe |
TTL モード |
decap_dscp_to_tc_map |
string | DSCP→TC マップ名(OID 解決) |
decap_tc_to_pg_map |
string | TC→PG マップ名 |
encap_tc_to_dscp_map |
string | TC→DSCP マップ名 |
encap_tc_to_queue_map |
string | TC→Queue マップ名 |
制約¶
tunnel_typeはIPINIPのみ受け入れる(tunneldecaporch.cppでハードコード)ecn_modeは SAISAI_TUNNEL_ATTR_DECAP_ECN_MODEが create-only のため、生成後の更新はスキップされる旨が WARN ログで残る
購読者¶
関連 CONFIG_DB / YANG / CLI¶
関連リファレンス¶
- (関連リンクなし)
引用元¶
値依存挙動マトリクス¶
tunnel_type / dscp_mode / ecn_mode / ttl_mode は YANG 未定義 (APPL_DB テーブル) のため string 型。制約は tunneldecaporch.cpp のコード判定。
| フィールド | 値 | 挙動 |
|---|---|---|
tunnel_type |
IPINIP |
SAI tunnel + tunnel-term オブジェクトを作成 |
tunnel_type |
IPINIP 以外 |
LOG_ERROR してエントリをスキップ |
dscp_mode |
uniform |
外側 DSCP を内側にコピー |
dscp_mode |
pipe |
内側 DSCP を保持 |
dscp_mode |
上記以外 | LOG_ERROR してエントリをスキップ |
ecn_mode |
copy_from_outer |
外側 ECN を内側にコピー |
ecn_mode |
standard |
RFC 6040 ECN 処理 |
encap_ecn_mode |
standard 以外 |
LOG_ERROR して拒否 |
ecn_mode |
作成後に変更 | SAI create-only 属性のため変更スキップ (WARN ログ) |
ttl_mode |
uniform |
外側 TTL を内側にコピー |
ttl_mode |
pipe |
内側 TTL を保持 |
src_ip |
作成後に変更 | LOG_ERROR して拒否。削除→再作成が必要 |
例外条件・特殊挙動¶
src_ipの変更不可: 既存トンネルのsrc_ipを変更しようとすると"cannot modify src ip for existing tunnel"を LOG_ERROR して拒否する。変更するにはトンネルを削除して再作成する必要がある。- 無効な tunnel_type / dscp_mode / ecn_mode / ttl_mode: 有効値以外の文字列が来ると
"Invalid tunnel type/dscp mode/ecn mode/ttl mode <value>"を LOG_ERROR してエントリをスキップする。 - encap_ecn_mode は
standardのみ対応:ecn_modeがstandard以外の場合"Only standard encap ecn mode is supported currently"を LOG_ERROR して拒否。 - 存在しないトンネルの DEL: 未作成のトンネルへの DEL は
"Tunnel <key> cannot be removed since it doesn't exist."を LOG_ERROR する。 - subnet decap 制約: subnet decap の decap term は
MP2MPタイプのトンネルにのみ許可される。src_ip/src_ip_v6なしで subnet decap term を追加しようとするとそれぞれ"no source IP is provided."を LOG_ERROR。 - subnet decap 無効時の decap term:
subnet_decapが無効な状態で decap term を追加しようとすると"subnet decap is disabled, ignored."を LOG_ERROR してスキップ。 - ASIC_DB 操作失敗: トンネルや decap term の ASIC_DB 追加/削除が失敗するとそれぞれエラーを LOG_ERROR する。
運用ヒント¶
典型値¶
- key 形式:
TUNNEL_DECAP_TABLE|<tunnel-name>。 tunnel_type:IPINIP/VXLAN、dst_ip: 自 Loopback、ttl_mode/dscp_mode:uniform。
よくある誤設定¶
- dst_ip を物理 IF アドレスに向けてしまい、IF down で decap も停止する。Loopback を使う。
確認コマンド¶
-
tunneldecaporch 実装:
tunneldecaporch.cpp. https://github.com/sonic-net/sonic-swss/blob/4305596156d70e9797e8a881b3d19b46de0bce0d/orchagent/tunneldecaporch.cpp ↩ -
テーブル名定数:
schema.h. https://github.com/sonic-net/sonic-swss-common/blob/158de8d3463ff4b841653f6d57190bb142b80d9c/common/schema.h#L49-L50 ↩