config vxlan サブコマンド¶
概要¶
config vxlan は VXLAN 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_ipをis_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)
抜粋:
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_id1-4094,vni1-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 delは VRF 紐付けがある 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 から機械生成。
関連リファレンス¶
- CONFIG_DB:
VXLAN_TUNNEL/VXLAN_EVPN_NVO/VXLAN_TUNNEL_MAP/VLAN/VNET/VRF
引用元¶
実行例¶
典型的な使い方¶
# 例 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 作成、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¶
関連 CLI コマンド¶
show mclag— show mclag (mclagdctl) コマンドconfig mclag— config mclag サブコマンドconfig vnet— config vnet サブコマンド
関連ページ¶
- HLD: VXLAN / VNet 全体設計
- HLD: EVPN VXLAN
- CONFIG_DB: VXLAN_TUNNEL
- CONFIG_DB: VXLAN_TUNNEL_MAP
- YANG: sonic-vxlan
-
vxlanグループ全体の定義はconfig/vxlan.pyL14-L17。-n必須。https://github.com/sonic-net/sonic-utilities/blob/39732bceb8bdefe706518ab40623bbbba6ff33b9/config/vxlan.py ↩ -
map_range delの VRF 紐付けスキップは L353-L355。https://github.com/sonic-net/sonic-utilities/blob/39732bceb8bdefe706518ab40623bbbba6ff33b9/config/vxlan.py#L353 ↩