Skip to content

Commit ac07276

Browse files
committed
SAI EVPN VXLAN multihoming split-horizon for P2MP tunnels
Signed-off-by: James Andrew <jaandrew@nvidia.com>
1 parent 82a8d7e commit ac07276

2 files changed

Lines changed: 95 additions & 8 deletions

File tree

doc/tunnel/SAI-Proposal-EVPN-Multihoming.md

Lines changed: 73 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
| ---- | --------- | ------------------------------------------------ | ------------------ |
3333
| 0.1 | Sep 23' 2024 | Jai Kumar, Rajesh Sankaran | Initial draft |
3434
| 0.2 | Oct 23' 2024 | Rajesh Sankaran | Changed DF, single active attributes |
35+
| 0.3 | May 18' 2026 | James Andrew | Added split-horizon support for P2MP tunnels |
3536

3637

3738
# 1.0 Introduction
@@ -199,12 +200,60 @@ typedef enum _sai_vlan_member_attr_t
199200

200201
### 3.2.3 Split Horizon support
201202

202-
- Tunnels of peer mode SAI_TUNNEL_PEER_MODE_P2P are only considered here.
203203
- The isolation group object of type SAI_ISOLATION_GROUP_TYPE_BRIDGE_PORT is used to achieve the split horizon functionality.
204204
- There is no change to the Isolation group and group member definition.
205-
- Bridgeport of type SAI_BRIDGE_PORT_TYPE_TUNNEL will have the isolation group attribute set.
205+
- For SAI_TUNNEL_PEER_MODE_P2P tunnels:
206+
- each tunnel is associated with a particular remote VTEP and has an
207+
associated bridge port of type SAI_BRIDGE_PORT_TYPE_TUNNEL.
208+
- This per-remote-VTEP bridge port of type SAI_BRIDGE_PORT_TYPE_TUNNEL will
209+
have the isolation group attribute set.
210+
- For SAI_TUNNEL_PEER_MODE_P2MP tunnels:
211+
- We introduce a new bridge port type SAI_BRIDGE_PORT_TYPE_TUNNEL_TERM_PEER
212+
with an associated attribute SAI_BRIDGE_PORT_ATTR_TUNNEL_TERM_PEER_IP. This
213+
bridge port represents decapsulated tunnel-terminated traffic from a
214+
specific remote VTEP. It is explicitly rx-only and cannot be used for
215+
encap/tx.
216+
- THis per-remote_VTEP bridge port of type
217+
SAI_BRIDGE_PORT_TYPE_TUNNEL_TERM_PEER will have the isolation group
218+
attribute set.
206219
- The isolation group members will be the client side bridge ports of type SAI_BRIDGE_PORT_TYPE_PORT which share the ESI with the peering VTEPs.
207220

221+
222+
```
223+
typedef enum _sai_bridge_port_type_t
224+
...
225+
226+
/**
227+
* @brief Bridge tunnel peer termination port
228+
*
229+
* Bridge port for traffic terminated from a specific tunnel peer.
230+
* Tunnel should use peer mode P2MP.
231+
*/
232+
SAI_BRIDGE_PORT_TYPE_TUNNEL_TERM_PEER,
233+
} sai_bridge_port_type_t;
234+
```
235+
236+
The Bridge-port of type SAI_BRIDGE_PORT_TYPE_TUNNEL_TERM_PEER should have SAI_BRIDGE_PORT_ATTR_TUNNEL_ID and SAI_BRIDGE_PORT_ATTR_TUNNEL_TERM_PEER_IP attributes set.
237+
238+
```
239+
typedef enum _sai_bridge_port_attr_t
240+
{
241+
...
242+
/**
243+
* @brief Tunnel peer IP address
244+
*
245+
* Identifies the peer (remote tunnel endpoint) from which tunnel-terminated
246+
* traffic is received on this bridge port.
247+
*
248+
* @type sai_ip_address_t
249+
* @flags MANDATORY_ON_CREATE | CREATE_ONLY
250+
* @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL_TERM_PEER
251+
*/
252+
SAI_BRIDGE_PORT_ATTR_TUNNEL_TERM_PEER_IP,
253+
...
254+
}
255+
```
256+
208257
### 3.2.4 Fast Failover support
209258

210259
A new Bridge port attribute (for type SAI_BRIDGE_PORT_TYPE_PORT) is introduced to specify the protection nexthop group ID.
@@ -486,13 +535,15 @@ At VTEP5 the following objects are created.
486535

487536
## 4.2 Split Horizon workflow
488537

538+
![EVPN Multihoming](figures/sai_evpnmh_splithorizon.png "Figure 1: Split Horizon")
539+
__Figure 2: Split Horizon Flow__
540+
541+
## 4.2.1 Tunnel peer mode type P2P
542+
489543
When Tunnel objects of peer mode type P2P are created, the isolation group objects can be re-used
490544
to achieve the split horizon functionality and do not need the attributes being introduced as part of this
491545
PR. It is being elaborated here for completeness.
492546

493-
![EVPN Multihoming](figures/sai_evpnmh_splithorizon.png "Figure 1: Split Horizon")
494-
__Figure 2: Split Horizon Flow__
495-
496547
At VTEP1 the following SAI objects with sub types are created.
497548

498549
- SAI_OBJECT_TYPE_TUNNEL with peer mode as SAI_TUNNEL_PEER_MODE_P2P, tnl_oid_2-4 created for tunnels towards the peer multihoming VTEP2-4.
@@ -537,9 +588,25 @@ __Figure 2: Split Horizon Flow__
537588
/* Repeat for all combinations */
538589
.............
539590
.............
540-
591+
541592
```
542593

594+
## 4.2.2 Tunnel peer mode type P2MP
595+
596+
When Tunnel objects of peer mode type P2MP are used, we use bridge ports of
597+
type SAI_BRIDGE_PORT_TYPE_TUNNEL_TERM_PEER with the
598+
SAI_BRIDGE_PORT_ATTR_TUNNEL_TERM_PEER_IP attribute to associate the isolation
599+
group object with tunnel-terminated packets from a particular remote VTEP.
600+
601+
At VTEP1 the following SAI objects with sub types are created.
602+
603+
- SAI_OBJECT_TYPE_TUNNEL with peer mode as SAI_TUNNEL_PEER_MODE_P2MP, tnl_oid.
604+
- SAI_OBJECT_TYPE_BRIDGE_PORT of type SAI_BRIDGE_PORT_TYPE_TUNNEL_TERM_PEER, bp_tnl_oid_2-4 corresponding to each remote VTEP, with SAI_BRIDGE_PORT_ATTR_REMOTE_TUNNEL_TERM_PEER_IP set to the IP of VTEPs2-4 respectively. All bridge ports bp_tnl_oid_2-4 set the SAI_BRIDGE_PORT_ATTR_TUNNEL_ID to the same P2MP tunnel tnl_oid.
605+
- SAI_OBJECT_TYPE_BRIDGE_PORT of type SAI_BRIDGE_PORT_TYPE_PORT, bp_lag_oid_1-2 corresponding to client side LAGs 1,2.
606+
- SAI_OBJECT_TYPE_ISOLATION_GROUP of type SAI_ISOLATION_GROUP_TYPE_BRIDGE_PORT, isogrp_oid_2-4 corresponding to bp_tnl_oid_2-4 as above.
607+
- bp_tnl_oid_2-4 have SAI_BRIDGE_PORT_ATTR_ISOLATION_GROUP set as isogrp_oid_2-4 respectively.
608+
609+
The remainder of the flow is identical to [4.2.1 Tunnel peer mode type P2P](421-tunnel-peer-mode-type-p2p).
543610

544611
## 4.3 DF workflow
545612

inc/saibridge.h

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ typedef enum _sai_bridge_port_type_t
8989

9090
/** Nexthop group should be of type bridge port */
9191
SAI_BRIDGE_PORT_TYPE_BRIDGE_PORT_NEXT_HOP_GROUP,
92+
93+
/**
94+
* @brief Bridge tunnel termination peer port
95+
*
96+
* Bridge port for traffic terminated from a specific tunnel peer.
97+
* Tunnel object should use peer mode P2MP.
98+
*/
99+
SAI_BRIDGE_PORT_TYPE_TUNNEL_TERM_PEER,
92100
} sai_bridge_port_type_t;
93101

94102
/**
@@ -175,7 +183,7 @@ typedef enum _sai_bridge_port_attr_t
175183
* @type sai_object_id_t
176184
* @flags MANDATORY_ON_CREATE | CREATE_ONLY
177185
* @objects SAI_OBJECT_TYPE_TUNNEL
178-
* @condition SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL
186+
* @condition SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL_TERM_PEER
179187
*/
180188
SAI_BRIDGE_PORT_ATTR_TUNNEL_ID,
181189

@@ -185,7 +193,7 @@ typedef enum _sai_bridge_port_attr_t
185193
* @type sai_object_id_t
186194
* @flags MANDATORY_ON_CREATE | CREATE_AND_SET
187195
* @objects SAI_OBJECT_TYPE_BRIDGE
188-
* @condition SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_SUB_PORT or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_1D_ROUTER or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_BRIDGE_PORT_NEXT_HOP_GROUP
196+
* @condition SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_SUB_PORT or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_1D_ROUTER or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_BRIDGE_PORT_NEXT_HOP_GROUP or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL_TERM_PEER
189197
*/
190198
SAI_BRIDGE_PORT_ATTR_BRIDGE_ID,
191199

@@ -354,6 +362,18 @@ typedef enum _sai_bridge_port_attr_t
354362
*/
355363
SAI_BRIDGE_PORT_ATTR_BRIDGE_PORT_SET_SWITCHOVER,
356364

365+
/**
366+
* @brief Tunnel peer IP address
367+
*
368+
* Identifies the peer (remote tunnel endpoint) from which tunnel-terminated
369+
* traffic is received on this bridge port.
370+
*
371+
* @type sai_ip_address_t
372+
* @flags MANDATORY_ON_CREATE | CREATE_ONLY
373+
* @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL_TERM_PEER
374+
*/
375+
SAI_BRIDGE_PORT_ATTR_TUNNEL_TERM_PEER_IP,
376+
357377
/**
358378
* @brief End of attributes
359379
*/

0 commit comments

Comments
 (0)