コンテンツにスキップ

SUBNET_DECAP テーブル

概要

IPinIP トンネルの サブネット単位の decapsulation ルール を定義する CONFIG_DB テーブル1TUNNEL_DECAP_TABLE が個別の outer IP を起点とした decap を扱うのに対し、SUBNET_DECAPouter source IP がプレフィックス内に該当する場合に decap を行う という、より広範な一致条件を表す。SmartSwitch / DASH や DualToR 系のシナリオで、ToR 配下のサーバ群から発した IPinIP encapsulated トラフィックを decap するために導入された。

YANG リビジョン 2024-12-19 で追加された比較的新しいテーブル。

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

flowchart LR
  CDB[("CONFIG_DB<br/>SUBNET_DECAP")]
  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 構造

SUBNET_DECAP|<name>

<name> はルール名 (任意文字列)。

フィールド

フィールド 必須 デフォルト 説明
name (key) string yes - サブネット decap ルール名
status enum (enable/disable) - disable ルールの有効/無効
src_ip inet:ipv4-prefix mandatory - decap 対象とする outer source IPv4 プレフィックス
src_ip_v6 inet:ipv6-prefix mandatory - decap 対象とする outer source IPv6 プレフィックス

両プレフィックスとも mandatory true で、IPv4 と IPv6 の両方を必ず設定する必要がある(DualStack を前提とした設計)。

statussonic-types:mode-status (enable/disable) で、最小権限の原則からデフォルトは disable

制約

  • src_ip / src_ip_v6YANGmandatory true。片方だけの設定は validation で拒否される。
  • status = enable でない限りデータプレーンには反映されない。

購読者

  • swss の tunnel-decap オーチェストレータが SUBNET_DECAP を読み、SAI の tunnel term entry を生成する(subnet ベースの match)。
  • DualToR / DASH のサブシステムが補助的に参照する。

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: TUNNEL_DECAP_TABLE (個別 IP の decap)、MUX_CABLE (DualToR)
  • 関連 CLI: 現状 dedicated CLI コマンドは無く sonic-cfggen / config load 経由で投入することが多い
  • 関連 YANG: sonic-subnet-decap

関連リファレンス

  • YANG: sonic-subnet-decap

引用元

運用ヒント

典型値

  • key 形式: SUBNET_DECAP|<vrf>
  • status: enablesrc_ip/dst_ip: T1 ToR ペアの管理サブネット。

よくある誤設定

  • VxLAN decap ルールと subnet decap の優先順位を誤解して期待した decap が起きない。

確認コマンド

sonic-db-cli CONFIG_DB keys 'SUBNET_DECAP|*'

値依存挙動マトリクス

status 値別挙動

挙動
enable subnetDecapConfig.enable = true。MP2MP tunnel term が有効化され SAI tunnel term entry が生成される。
disable subnetDecapConfig.enable = false(デフォルト)。MP2MP term から "subnet decap is disabled, ignored." ログでスキップ。データプレーンに反映されない。

src_ip フィールド挙動

状態 挙動
有効な IPv4 prefix isV4() チェック通過。subnetDecapConfig に格納され tunnel term の送信元 IP として使用。
IPv6 アドレスを誤指定 isV4() 失敗。SWSS_LOG_ERROR("Invalid source IP prefix") → 処理中断。
形式不正 swss::IpPrefix()std::invalid_argumentSWSS_LOG_ERROR → 処理中断。

src_ip_v6 フィールド挙動

状態 挙動
有効な IPv6 prefix !isV4() チェック通過。subnetDecapConfig に格納。
IPv4 アドレスを誤指定 isV4() チェックが成功してしまう → SWSS_LOG_ERROR("Invalid source IPv6 prefix") → 処理中断。

例外条件・特殊挙動

  • src_ip と src_ip_v6 の両方が未設定: どちらも設定されていない場合 SWSS_LOG_ERROR("Both src_ip and src_ip_v6 of subnet decap are not set.") → エントリ破棄。2
  • src_ip に IPv4 以外を指定: src_ip フィールドに IPv6 アドレスを指定すると isV4() チェック失敗で SWSS_LOG_ERROR("Invalid source IP prefix") → 処理中断。2
  • src_ip_v6 に IPv4 アドレスを指定: src_ip_v6 に IPv4 を指定すると SWSS_LOG_ERROR("Invalid source IPv6 prefix") → 処理中断。2
  • IP プレフィクス形式不正: swss::IpPrefix()std::invalid_argument を投げた場合も SWSS_LOG_ERROR("Invalid source IP prefix") → 処理中断。2
  • 未知フィールド: src_ip / src_ip_v6 / status 以外のフィールドは SWSS_LOG_ERROR("unknown subnet decap table attribute") → エントリ破棄。2
  • シングルトン制約: subnetDecapConfig はシングルトン構造体として保持されるため、テーブルに複数エントリを書いても最後の SET_COMMAND で上書きされる。2
  • MP2MP 以外のトンネル term は紐付け不可: subnet decap トンネルに MP2MP 以外の term を紐付けようとすると SWSS_LOG_ERROR("only MP2MP tunnel decap term is allowed for subnet decap tunnel.") → 拒否。2