コンテンツにスキップ

config vxlan サブコマンド

概要

config vxlanVXLAN VTEP (VXLAN_TUNNEL)、EVPN NVO (VXLAN_EVPN_NVO)、および VLAN-VNI マッピング (VXLAN_TUNNEL_MAP) を管理する。config/vxlan.py に分離されており、config/main.py 末尾の config.add_command(vxlan.vxlan) で登録される構造1

VTEP 1 デバイスにつき 1 つだけしか作れない(vxlan add 時に既存件数 > 0 でエラー)。EVPN NVO も 1 つだけ。

コマンド一覧

コマンド 用途
config vxlan add <vxlan_name> <src_ip> VTEP を作成
config vxlan del <vxlan_name> VTEP を削除
config vxlan evpn_nvo add <nvo_name> <vxlan_name> EVPN NVO を作成
config vxlan evpn_nvo del <nvo_name> EVPN NVO を削除
config vxlan map add <vxlan_name> <vlan_id> <vni> VLAN-VNI マップを 1 つ作成
config vxlan map del <vxlan_name> <vlan_id> <vni> VLAN-VNI マップを 1 つ削除
config vxlan map_range add <vxlan_name> <vlan_start> <vlan_end> <vni_start> VLAN 範囲をまとめてマップ
config vxlan map_range del <vxlan_name> <vlan_start> <vlan_end> <vni_start> VLAN 範囲のマップを削除

-n|--namespace オプションは vxlan グループ全体に必須(@multi_asic_util.multi_asic_click_option_namespace(required=True))。

各コマンドの詳細

config vxlan add <vxlan_name> <src_ip>

動作:

  • src_ipis_ipaddress で検証
  • vxlan_name の長さを IFACE_NAME_MAX_LEN でバリデート
  • 既存 VXLAN_TUNNEL エントリが 1 件でもあればエラー(VTEP は 1 つ限定)
  • VXLAN_TUNNEL|<vxlan_name>{src_ip: <src_ip>} で作成
📋 検証エビデンス: sonic-net/sonic-utilities/config/vxlan.py#L19-L51 (sha: 39732bceb8bdefe706518ab40623bbbba6ff33b9)

出典:

sonic-net/sonic-utilities/config/vxlan.py#L19-L51 (sha: 39732bceb8bdefe706518ab40623bbbba6ff33b9)

抜粋:

if(vxlan_count > 0):
    ctx.fail("VTEP already configured.")
fvs = {'src_ip': src_ip}
config_db.set_entry('VXLAN_TUNNEL', vxlan_name, fvs)

config vxlan del <vxlan_name>

動作: 削除前依存チェック:

  • 当該 VTEP が存在する
  • VXLAN_EVPN_NVO が空(1 件でも残っているとエラー)
  • VXLAN_TUNNEL_MAP が空
  • VNET テーブルでこの VTEP を参照しているエントリが無い

依存が全部解消されていれば set_entry('VXLAN_TUNNEL', name, None)

config vxlan evpn_nvo add <nvo_name> <vxlan_name>

動作:

  • 既存 VXLAN_EVPN_NVO が空であること(NVO も 1 つ限定)
  • <vxlan_name> で指定された VTEP が存在すること
  • VXLAN_EVPN_NVO|<nvo_name>{source_vtep: <vxlan_name>} で作成

config vxlan evpn_nvo del <nvo_name>

VXLAN_TUNNEL_MAP が空であることを確認した上で VXLAN_EVPN_NVO|<nvo_name> を削除。

config vxlan map add <vxlan_name> <vlan_id> <vni>

動作:

  • vlan_id 1-4094, vni 1-16777215 をバリデート
  • VXLAN_TUNNEL|<vxlan_name> の存在確認
  • VLAN|Vlan<vlan_id> の存在確認
  • VXLAN_TUNNEL_MAP に同じ vlan / vni が他で使われていないか走査
  • key を <vxlan_name>|map_<vni>_Vlan<vlan_id> の形で作成、value は {vni: <vni>, vlan: Vlan<vlan_id>}

config vxlan map del <vxlan_name> <vlan_id> <vni>

動作:

  • <vni>VRF テーブルから参照されていればエラー(先に VRF VNI 関連付けを外す必要あり)
  • key を 2 つのフォーマットで削除を試みる: map_<vni>_<vlan_id> および map_<vni>_Vlan<vlan_id>(実装上は両方とも set_entry(..., None) で安全側)

config vxlan map_range add <vxlan_name> <vlan_start> <vlan_end> <vni_start>

動作: vlan_start..vlan_end まで連続的にループし、各 vid に対して vni_start + (vid - vlan_start) の VNI を割り当てる。VLAN が存在しなかったり VNI / VLAN がすでにマップ済みの行はスキップ(エラーではない)。各成功エントリは <vxlan_name>|map_<vni>_Vlan<vid> で作成。

config vxlan map_range del <vxlan_name> <vlan_start> <vlan_end> <vni_start>

範囲内の各 (vlan, vni) について、is_vni_vrf_mapped が真VRF に VNI 紐付け済み)の行のみ削除する仕様2。それ以外の行はスキップしてメッセージを出すだけ。

関連する CONFIG_DB

テーブル 操作 操作するコマンド
VXLAN_TUNNEL エントリ作成・削除 add / del
VXLAN_EVPN_NVO エントリ作成・削除 evpn_nvo add / evpn_nvo del
VXLAN_TUNNEL_MAP エントリ作成・削除 (key 形式 <tunnel>|map_<vni>_Vlan<id>) map add/del / map_range add/del

VLAN / VNET / VRF は読み取りのみ(依存チェック)。

注意点

  • VTEP / NVO は デバイス 1 つあたり 1 つ限定
  • map_range delVRF 紐付けがある VNI のみ削除する仕様で、削除されない行があっても警告は print のみ。完全削除には map del を使う

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

flowchart LR
  CLI["config vxlan"]
  SC["sonic-cfggen<br/>(config CLI のみ)"]
  CLI --> SC
  CDB0[("CONFIG_DB<br/>VXLAN_TUNNEL")]
  SC --> CDB0
  DM0["vxlanmgrd"]
  CDB0 --> DM0
  CDB1[("CONFIG_DB<br/>VXLAN_EVPN_NVO")]
  SC --> CDB1
  DM1["vxlanmgrd"]
  CDB1 --> DM1
  CDB2[("CONFIG_DB<br/>VXLAN_TUNNEL_MAP")]
  SC --> CDB2
  DM2["vxlanmgrd"]
  CDB2 --> DM2
  CDB3[("CONFIG_DB<br/>VLAN")]
  SC --> CDB3
  DM3["vlanmgrd"]
  CDB3 --> DM3

凡例

config 系 (CLI → CONFIG_DB → daemon) のミニ図。テーブル → daemon 対応は docs/reference/config-db-orch-map.md から機械生成。

関連リファレンス

引用元

実行例

典型的な使い方

# 例 1: VxLAN tunnel と EVPN map を構成
sudo config vxlan add vtep1 10.0.0.1
sudo config vxlan map add vtep1 100 10100

よくある引数の組み合わせ

sudo config vxlan evpn_nvo add nvo1 vtep1
sudo config vxlan map_range add vtep1 100 200 10100 10200
sudo config vxlan remove vtep1

期待される出力 (抜粋)

VxLAN tunnel vtep1 added.

運用ヒント

典型的な利用シーン

  • VxLAN tunnel 作成、VLAN-VNI map、EVPN VNI 紐付け。
  • VNET (asymmetric IRB) のセットアップ起点。

よくある落とし穴

  • source IP に Loopback を指定しないと FRR/EVPN 経路が広告されない。
  • config vxlan map add の VNI は uint24 上限。vlan を消す前に map を外さないと残骸が STATE_DB に残る。

関連する show / debug

show vxlan tunnel
show vxlan vlanvnimap
show vxlan name <tunnel>

関連 CLI コマンド

関連ページ