VXLAN / VNet 内部実装¶
このページは VXLAN / VNet 全体設計(概要ハブ) の派生ページで、Orch 群と SAI 連携の内部実装 に絞って整理する。概念は vxlan-sonic-concepts.md、運用は vxlan-sonic-operations.md、制限事項は vxlan-sonic-limitations.md を参照。
1. orchagent 役割分担¶
| Orch | 役割 |
|---|---|
VxlanOrch(実コードは VxlanTunnelOrch 等に分割) |
VXLAN tunnel object、encap/decap mapper、tunnel termination |
VnetOrch / VnetRouteOrch |
VNet 単位の VRF / BRIDGE、ピアリング、VNet 経路 |
VrfMgrD / VrfOrch |
kernel L3mdev と SAI VRF の同期 |
IntfMgrD / IntfsOrch |
VNet 配下の RIF |
FdbOrch |
remote VTEP の MAC 学習 |
flowchart TB
subgraph CONFIG_DB
VXT[VXLAN_TUNNEL]
VXM[VXLAN_TUNNEL_MAP]
VNET[VNET]
INTF[INTERFACE / VLAN_INTERFACE]
NEIGH[NEIGH_TABLE]
end
VNET --> VRFM[VrfMgrD]
VRFM -->|kernel L3mdev| KERN[Linux kernel]
VRFM --> VNETT[(APP_DB VNET_TABLE)]
VNETT --> VNO[VnetOrch]
INTF --> IM[IntfMgrD]
IM -->|VRF 確認後| ITT[(APP_DB INTF_TABLE)]
ITT --> IO[IntfsOrch]
IO --> VNO
VXT --> VXO[VxlanOrch]
VXM --> VXO
NEIGH --> NB[NeighOrch]
VNO --> VXO
VNO --> VRO[VnetRouteOrch]
VRO --> APPR[(APP_DB VNET_ROUTE_*)]
APPR --> VRO
VRO --> SAI[SAI/SDK]
VXO --> SAI
FDB[FdbOrch] --> VXO
2. VxlanOrch(実装は VxlanTunnelOrch 等に分割)¶
VXLAN の中核。tunnel オブジェクト + mapper + termination を作る。EVPN remote VTEP の動的生成も vxlanorch.cpp 内(TNL_CREATION_SRC_EVPN)。実コードでは下記のクラスに分割されている:
VxlanTunnelOrch(sonic-swss/orchagent/vxlanorch.h:268)VxlanTunnelMapOrch(vxlanorch.h:414)VxlanVrfMapOrch(vxlanorch.h:462)EvpnRemoteVnip2pOrch(vxlanorch.h:499)EvpnRemoteVnip2mpOrch(vxlanorch.h:512)EvpnNvoOrch(vxlanorch.h:541)
3. VrfMgrD / VrfOrch¶
sequenceDiagram
participant CDB as CONFIG_DB.VNET
participant VM as VrfMgrD
participant KERN as Linux kernel (L3mdev)
participant ST as STATE_DB
participant ADB as APP_DB.VNET_TABLE
participant VO as VrfOrch / VnetOrch
CDB-->>VM: SET
VM->>KERN: L3mdev 作成
VM->>ST: VRF status 更新
VM->>ADB: VNET_TABLE に複製
ADB-->>VO: SET
VO->>VO: SAI VRF / Bridge 作成
VrfMgrD: VNet 設定から kernel L3mdev を作成 + STATE_DB に状態出力VrfOrch: 通常 VRF を APP_DB から SAI に投入(RouteOrch が利用)1
4. VnetOrch / VnetRouteOrch¶
VnetOrch(sonic-swss/orchagent/vnetorch.h:250): VNet 単位の ingress/egress VRF または BRIDGE を SAI に作成。peer_listを保持VnetRouteOrch(vnetorch.h:504):VNET_ROUTE_TABLE→ subnet/local route、VNET_ROUTE_TUNNEL_TABLE→ tunnel nexthop 経路 を SAI に投入。peer_listがある場合はピア VNet にも経路を複製1- 補助 Orch:
MonitorOrch(vnetorch.h:362)、BfdMonitorOrch(vnetorch.h:381)、VNetCfgRouteOrch(vnetorch.h:618)
5. IntfMgrD / IntfsOrch / FdbOrch¶
IntfMgrD: kernel 側 routing IF を L3mdev に enslave。STATE_DB の VRF 確立を待ってから APP_DB のINTF_TABLEに書くIntfsOrch:INTF_TABLE+ VRF 情報で SAI RIF を作成。VNet 用はVnetOrchAPI 経由FdbOrch: VxlanOrch をメンバに持ち、remote VTEP で学習した MAC をapp-fdb-table経由で SAI に書く1
6. SAI 属性対応表¶
| VXLAN コンポーネント | SAI 属性 |
|---|---|
| VXLAN tunnel 種別 | SAI_TUNNEL_TYPE_VXLAN |
| Encap mapper | SAI_TUNNEL_MAP_TYPE_VIRTUAL_ROUTER_ID_TO_VNI |
| Decap mapper | SAI_TUNNEL_MAP_TYPE_VNI_TO_VIRTUAL_ROUTER_ID |
| Nexthop tunnel | SAI_NEXT_HOP_TYPE_TUNNEL_ENCAP |
| Tunnel termination | SAI_TUNNEL_TERM_TABLE_ENTRY_TYPE_P2MP |
| VXLAN MAC | SAI_SWITCH_ATTR_VXLAN_DEFAULT_ROUTER_MAC |
| VXLAN UDP port | SAI_SWITCH_ATTR_VXLAN_DEFAULT_PORT |
関連ページ¶
- VXLAN / VNet 全体設計(概要ハブ) — 元 HLD ページ
- vxlan-sonic-concepts.md — 概念・用語
- vxlan-sonic-operations.md — 設定・運用
- vxlan-sonic-limitations.md — 制限事項