diff --git a/doc/vxlan/EVPN/EVPN_VxLAN_Multihoming.md b/doc/vxlan/EVPN/EVPN_VxLAN_Multihoming.md index c7c8d3b5f6..0366d826fe 100644 --- a/doc/vxlan/EVPN/EVPN_VxLAN_Multihoming.md +++ b/doc/vxlan/EVPN/EVPN_VxLAN_Multihoming.md @@ -2,7 +2,7 @@ # High Level Design Document -Rev 1.1 +Rev 1.4 # Table of Contents @@ -85,7 +85,7 @@ Rev 1.1 | 1.1 | Jul-2024 | Syed Hasan Naqvi (Broadcom) | Updated kernel, SAI, config, and design sections | | 1.2 | Jul-2024 | Patrice Brissette (Cisco) | Adding ShlOrchagent definition, addressing PR comments | | 1.3 | Aug-2024 | Patrice Brissette (Cisco) | Updated SAI examples | - +| 1.4 | Nov-2024 | Syed Hasan Naqvi (Broadcom) | Addressed review comments. Updated/removed duplicate text in SAI sec. | # About this Manual @@ -807,7 +807,7 @@ A new EvpnMhOrch class will be introduced to perform following activities, 2. Subscribe to EVPN_ETHERNET_SEGMENT config table updates and maintain internal cache. 3. Provide set of API to check if the given acces interface is ES associated or not. 4. Subscribe to LAG_TABLE oper status changes and trigger MAC update requests to FdbOrch. -5. Subscribe to EVPN_DF_TABLE from APP-DB and set the SAI bridge port attribute SAI_BRIDGE_PORT_ATTR_BUM_TX_DROP to relevant Bridgeport. +5. Subscribe to EVPN_DF_TABLE from APP-DB and set the SAI bridge port attribute SAI_BRIDGE_PORT_ATTR_TUNNEL_TERM_BUM_TX_DROP to relevant Bridgeport. ### 3.3.10 ShlOrch @@ -831,6 +831,8 @@ Following split-horizon handling and activities will also be performed by the Ev ### 3.4.1 New SAI Objects No new SAI objects are introduced as part of this design. +For unicast traffic, existing L2NHG_GROUP and FDB are leverage whereas for BUM traffic, existing ISOLATION_GROUP and BRIDGE_PORT are used. +The L2NH group type is defined to support programming backup reachability. ### 3.4.2 Changes to Existing SAI Objects @@ -913,49 +915,39 @@ Note: Traffic dropped due to this should not be counted against SAI_PORT_STAT_IF typedef enum _sai_bridge_port_attr_t { ... - /** - * @brief Indicates if the bridge port is set to drop the broadcast, unknown unicast and multicast traffic - * When set to true, ingress BUM traffic will be dropped - * - * @type bool - * @flags CREATE_AND_SET - * @default false - * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT - */ - SAI_BRIDGE_PORT_ATTR_BUM_RX_DROP, /** - * @brief Indicates if the bridge port is set to drop the broadcast, unknown unicast and multicast traffic + * @brief Indicates if the bridge port is set to drop the Tunnel Terminated broadcast, unknown unicast and multicast traffic * When set to true, egress BUM traffic will be dropped * * @type bool * @flags CREATE_AND_SET * @default false - * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT + * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_SUB_PORT or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL */ - SAI_BRIDGE_PORT_ATTR_BUM_TX_DROP, + SAI_BRIDGE_PORT_ATTR_TUNNEL_TERM_BUM_TX_DROP, /** - * @brief Indicates if the bridge port is set to drop the unicast traffic - * When set to true, ingress unicast traffic will be dropped + * @brief Indicates if the bridge port is set to drop the ingress traffic + * When set to true, all ingress traffic will be dropped * * @type bool * @flags CREATE_AND_SET * @default false - * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT + * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_SUB_PORT or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL */ - SAI_BRIDGE_PORT_ATTR_UCAST_RX_DROP, + SAI_BRIDGE_PORT_ATTR_RX_DROP, /** - * @brief Indicates if the bridge port is set to drop the unicast traffic - * When set to true, egress unicast traffic will be dropped + * @brief Indicates if the bridge port is set to drop the egress traffic + * When set to true, all egress traffic will be dropped * * @type bool * @flags CREATE_AND_SET * @default false - * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT + * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_SUB_PORT or SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_TUNNEL */ - SAI_BRIDGE_PORT_ATTR_UCAST_TX_DROP, + SAI_BRIDGE_PORT_ATTR_TX_DROP, ... } ``` @@ -1082,233 +1074,6 @@ On remote Leaf5 where ECMP chains are built: - isogrp_mbr_oid_41 corresponding to isogrp_oid_4+bridgeport_oid_po2 -## 3.4 SAI - -### 3.4.1 SAI Objects -No new SAI object is required to support this feature. -For unicast traffic, existing L2NHG_GROUP and FDB are leverage whereas for BUM traffic, existing ISOLATION_GROUP and BRIDGE_PORT are used. -The L2NH group type is defined to support programming backup reachability. - - -### 3.4.2 Changes to Existing SAI Objects - -- **BRIDGEPORT** - - - New type of bridgeport providing nexthop group - - Applicable when bridge_port points to a group of nexthop. -``` - ... - - /** Bridge port next hop group */ - SAI_BRIDGE_PORT_TYPE_BRIDGE_PORT_NEXT_HOP_GROUP, - - } sai_bridge_port_type_t; -``` - - - New attributes for NON_DF to drop BUM traffic - - Applicable to bridgeport type PORT. - - When set, ingress BUM traffic on this bridge port will be dropped. - - Traffic dropped due to this should not be counted against SAI_PORT_STAT_IF_OUT_DISCARDS i.e Interface Tx drop counters. - - ``` - ... - - /** - * @brief Associated bridge port nexthop group id - * - * @type sai_object_id_t - * @flags MANDATORY_ON_CREATE | CREATE_ONLY - * @objects SAI_OBJECT_TYPE_NEXT_HOP_GROUP - * @condition SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_BRIDGE_PORT_NEXT_HOP_GROUP - */ - SAI_BRIDGE_PORT_ATTR_BRIDGE_PORT_NEXT_HOP_GROUP_ID, - - /** - * @brief Indicates if the bridge port is set to drop the broadcast, unknown unicast and multicast traffic - * When set to true, ingress BUM traffic will be dropped - * - * @type bool - * @flags CREATE_AND_SET - * @default false - * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT - */ - SAI_BRIDGE_PORT_ATTR_BUM_RX_DROP, - - /** - * @brief Indicates if the bridge port is set to drop the broadcast, unknown unicast and multicast traffic - * When set to true, egress BUM traffic will be dropped - * - * @type bool - * @flags CREATE_AND_SET - * @default false - * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT - */ - SAI_BRIDGE_PORT_ATTR_BUM_TX_DROP, - - /** - * @brief Indicates if the bridge port is set to drop the unicast traffic - * When set to true, ingress unicast traffic will be dropped - * - * @type bool - * @flags CREATE_AND_SET - * @default false - * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT - */ - SAI_BRIDGE_PORT_ATTR_UCAST_RX_DROP, - - /** - * @brief Indicates if the bridge port is set to drop the unicast traffic - * When set to true, egress unicast traffic will be dropped - * - * @type bool - * @flags CREATE_AND_SET - * @default false - * @validonly SAI_BRIDGE_PORT_ATTR_TYPE == SAI_BRIDGE_PORT_TYPE_PORT - */ - SAI_BRIDGE_PORT_ATTR_UCAST_TX_DROP, - - /** - * @brief Associated protection bridge port nexthop group id - * - * @type sai_object_id_t - * @flags CREATE_AND_SET - * @objects SAI_OBJECT_TYPE_NEXT_HOP_GROUP - * @allownull true - * @default SAI_NULL_OBJECT_ID - */ - SAI_BRIDGE_PORT_ATTR_BRIDGE_PORT_PROTECTION_NEXT_HOP_GROUP_ID, - - } sai_bridge_port_attr_t - - ``` - - -- **NEXT_HOP** - - Adding a new type of next hop equal to bridge_port. - MAC points to bridge port (either local or remote) - -``` - ... - - /** Next hop group is for bridge port */ - SAI_NEXT_HOP_TYPE_BRIDGE_PORT, - - } sai_next_hop_type_t; -``` - -- **NEXT_HOP_GROUP** - - Adding a new next hop group type equal to bridge port. - Grouping a list of nexthops of bridge port type - - Reusing next hop group type equal to protection group. - Grouping a list of protection group usually primary/backup paths. - -``` - ... - - /** Next hop group is for bridge port */ - SAI_NEXT_HOP_GROUP_TYPE_BRIDGE_PORT, - - /** Next hop protection group. Contains primary and backup next hops. */ - SAI_NEXT_HOP_GROUP_TYPE_PROTECTION, - - } sai_next_hop_group_type_t -``` - - -- **ISOLATION_GROUP** - - There is no change to the Isolation group and group member definition. - - Bridgeport of type TUNNEL will also now have the isolation group attribute set. - - - - -### 3.4.3 SAI Object usage -#### 3.4.3.1 Known MAC Handling -- Refer to Sec 1.2.1 -- At VTEP5 the following objects are created. - - tnl_oid_1-tnl_oid_4 corresponding to tunnels created to VTEP1-VTEP4. - - nh_bridgeport_oid_1 to nh_bridgeport_oid_4 for corresponding bridgeports of type tunnels (tnl_oid_1-tnl_oid_4) - - - nh_grp_bridgeport_oid_1 for ESI-1(H2) - - nh_grp_bridgeport_oid_2 for ESI-2(H3) - - - nh_grp_bridgeport_oid_1 has members nh_bridgeport_oid_1 and nh_bridgeport_oid_4 - - nh_grp_bridgeport_oid_2 has members nh_bridgeport_oid_1 to nh_bridgeport_oid_4 - - - bridgeport_oid_h2 of type nexthop group pointing to nh_grp_bridgeport_oid_1 - - bridgeport_oid_h3 of type nexthop group pointing to nh_grp_bridgeport_oid_2 - - - mac_h2 pointing to bridgeport_oid_h2 - - mac_h3 pointing to bridgeport_oid_h3 - -- At VTEP1, the following objects are created. - - tnl_oid_2-tnl_oid_5 corresponding to tunnels created to VTEP2-VTEP5. - - nh_bridgeport_oid_2 to nh_bridgeport_oid_5 for corresponding bridgeports of type tunnels (tnl_oid_2-tnl_oid_5) - - - nh_bridgeport_oid6 to bridgeport Type Local (PortChannel1) - - nh_bridgeport_oid7 to bridgeport Type Local (PortChannel2) - - - nh_grp_bridgeport_oid_1 for backup ESI-1(H2) - - nh_grp_bridgeport_oid_2 for backup ESI-2(H3) - - - nh_grp_bridgeport_oid_1 has members nh_bridgeport_oid_4 - - nh_grp_bridgeport_oid_2 has members nh_bridgeport_oid_2 to nh_bridgeport_oid_4 - - - nh_grp_protection_oid_1 for ESI-1(H2) - - nh_grp_protection_oid_2 for ESI-2(H3) - - - nh_grp_protection_oid_1 has members nh_bridgeport_oid6 and nh_grp_bridgeport_oid_1 (primary preferred) - - nh_grp_protection_oid_2 has members nh_bridgeport_oid7 and nh_grp_bridgeport_oid_2 (primary preferred) - - - bridgeport_oid_h6 of type Local pointing to nh_grp_protection_oid_1 - - bridgeport_oid_h7 of type local pointing to nh_grp_protection_oid_2 - - - mac_h2 pointing to bridgeport_oid_h6 - - mac_h3 pointing to bridgeport_oid_h7 - -#### 3.4.3.2 BUM handling -- Refer to Sec 1.2.1.1 -- DF settings - - At VTEP1 bridgeport_oid for Po2 is marked as BUM_RX_DROP. - - At VTEP4 bridgeport_oid for Po1 is marked as BUM_RX_DROP. - - At VTEP2, VTEP3 bridgeport_oid for Po2 is marked as BUM_RX_DROP. -- Isolation Group settings for Split Horizon and Local Bias - - At VTEP1 - - tnl_oid_2-4 for tunnels towards the peer multihoming VTEP2-4 - - bridgeport_oid_2-4 corresponding to tunnels as above. - - isogrp_oid_2-4 corresponding to tunnels as above. - - bridgeport_oid_2-4 have isolation group attribute set as isogrp_oid_2-4. - - isogrp_mbr_oid_21 corresponding to isogrp_oid_2+bridgeport_oid_po2 - - isogrp_mbr_oid_31 corresponding to isogrp_oid_3+bridgeport_oid_po2 - - isogrp_mbr_oid_41 corresponding to isogrp_oid_4+bridgeport_oid_po1 - - isogrp_mbr_oid_42 corresponding to isogrp_oid_4+bridgeport_oid_po2 - - At VTEP4 - - tnl_oid_1-3 for tunnels towards the peer multihoming VTEP1-3 - - bridgeport_oid_1-3 corresponding to tunnels as above. - - isogrp_oid_1-3 corresponding to tunnels as above. - - bridgeport_oid_1-3 have isolation group attribute set as isogrp_oid_1-3. - - isogrp_mbr_oid_21 corresponding to isogrp_oid_2+bridgeport_oid_po2 - - isogrp_mbr_oid_31 corresponding to isogrp_oid_3+bridgeport_oid_po2 - - isogrp_mbr_oid_11 corresponding to isogrp_oid_1+bridgeport_oid_po1 - - isogrp_mbr_oid_12 corresponding to isogrp_oid_1+bridgeport_oid_po2 - - At VTEP2 - - tnl_oid_1,3,4 for tunnels towards the peer multihoming VTEP1,3,4 - - bridgeport_oid_1,3,4 corresponding to tunnels as above. - - isogrp_oid_1,3,4 corresponding to tunnels as above. - - bridgeport_oid_1,3,4 have isolation group attribute set as isogrp_oid_1,3,4. - - isogrp_mbr_oid_11 corresponding to isogrp_oid_1+bridgeport_oid_po2 - - isogrp_mbr_oid_31 corresponding to isogrp_oid_3+bridgeport_oid_po2 - - isogrp_mbr_oid_41 corresponding to isogrp_oid_4+bridgeport_oid_po2 - - At VTEP3 - - tnl_oid_1,2,4 for tunnels towards the peer multihoming VTEP1,2,4 - - bridgeport_oid_1,2,4 corresponding to tunnels as above. - - isogrp_oid_1,2,4 corresponding to tunnels as above. - - bridgeport_oid_1,2,4 have isolation group attribute set as isogrp_oid_1,2,4 - - isogrp_mbr_oid_11 corresponding to isogrp_oid_1+bridgeport_oid_po2 - - isogrp_mbr_oid_21 corresponding to isogrp_oid_2+bridgeport_oid_po2 - - isogrp_mbr_oid_41 corresponding to isogrp_oid_4+bridgeport_oid_po2 - -