staticgueencap_and_bgp_path_selection - openconfig/featureprofiles GitHub Wiki
RT-3.52: Multidimensional test for Static GUE Encap/Decap based on BGP path selection and selective DSCP marking
The goal of this test is to:
-
Test the implementation of Static GUE encap where the Tunnel endpoint is resolved over EBGP, while the Payload's destination is learned over IBGP.
-
Confirm that before GUE encapsulation, the device correctly selects the path for the payload destination from multiple available IBGP routes. Path selection needs to follow the BGP best path algorithm rules, like giving preference to routes with a higher BGP Local Preference. Furthermore, it must successfully switch over to backup/alternative IBGP paths when the preferred path fails.
-
Validate that encapsulated traffic has its TOS bits copied from the inner header to the outer header.
-
The DUT will be configured to encapsulate traffic over multiple tunnels. It is expected to tunnel traffic towards the correct tunnel destination, based on the IBGP learned routes.
-
The DUT will be configured to decapsulate traffic received over various tunnel destinations, and it is expected to accurately decapsulate traffic across all these received destinations.
-
Confirm that the TTL value for the outer IP header created during GUE encapsulation can be explicitly configured.
-
Confirm that when the DUT handles GUEv1 traffic from the reverse path, it successfully performs decapsulation. During this decapsulation process, the system must not transfer the DSCP and TTL bits from the outer header to the inner header. Instead, following decapsulation, the DUT should decrement the inner header's TTL by 1 before forwarding the packet
Please note: In the diagram below, ATE1 and ATE2 can be the same or different ATE
graph LR;
subgraph DUT [DUT]
B1[Port1]
B2[Port2]
B4[Port4]
end
subgraph ATE2 [ATE2]
C1[Port1]
C3[Port3]
end
A1[ATE1:Port1] <-- IBGP(ASN100) --> B1;
B2 <-- IBGP(ASN100) --> C1;
B4 <-- EBGP(ASN100:ASN200) --> C3;
+-------------------------------------------+
| ATE1 (ASN-100) |
|-------------------------------------------|
| IBGP Peer: |
| - $ATE1_IBGP.v4/32 |
| - $ATE1_IBGP.v6/128 |
| |
| Prefixes Advertised: |
| - $ATE1_PORT1_user[1-5].v4/24 |
| - $ATE1_PORT1_user[1-5].v6/64 |
| |
| ATE1_Port1 <-> DUT_Port1: |
| - $ATE1PORT1_DUTPORT1_1.v4/31 |
| - $ATE1PORT1_DUTPORT1_1.v6/127 |
+---------------------+---------------------+
|
| (IS-IS and IBGP)
|
+---------------------+---------------------+
| Port1: (to ATE1) |
| - $ATE1PORT1_DUTPORT1_2.v4/31 |
| - $ATE1PORT1_DUTPORT1_2.v6/127 |
|-------------------------------------------|
| DUT (ASN-100) |
|-------------------------------------------|
| Loopback: |
| - $DUT_lo0.v4 |
| - $DUT_lo0.v6 |
|-------------------------------------------|
| Port2: (to ATE2_Port1) <------------+ (IS-IS and IBGP)
| - $ATE2PORT1_DUTPORT2_2.v4/31 | |
| - $ATE2PORT1_DUTPORT2_2.v6/127 | |
|-------------------------------------------| |
| Port4: (to ATE2_Port3) | |
| - $ATE2PORT3_DUTPORT4_2.v4/31 <----------------------+ (EBGP)
| - $ATE2PORT3_DUTPORT4_2.v6/127 | | |
+-------------------------------------------+ | |
| |
+-----------------------------------------------------+ | |
| ATE2 (ASN 100 & 200) | | |
|-----------------------------------------------------+ | |
| Port1: (to DUT) <--+ |
| - $ATE2PORT1_DUTPORT2_1.v4/31 | |
| - $ATE2PORT1_DUTPORT2_1.v6/127 | |
|-----------------------------------------------------+ |
| Port3: (to DUT) <-------------+
| - `$ATE2PORT3_DUTPORT4_1.v4/31` |
| - `$ATE2PORT3_DUTPORT4_1.v6/127` |
|-----------------------------------------------------+
| IBGP Peer IPs: |
| - $ATE2_C.IBGP.v6/128 |
| - $ATE2_M.IBGP.v4/32, .v6/128 |
| - $ATE2_IBGP.v4/32, .v6/128 |
| Prefixes Advertised over IBGP and EBGP peering: |
| - $ATE2_INTERNAL[6-10].v4/24 |
| - $ATE2_INTERNAL[6-10].v6/64 |
+-----------------------------------------------------+
Different IP addresses | Description |
---|---|
$ATE1PORT1_DUTPORT1_1.v4/31 $ATE1PORT1_DUTPORT1_1.v6/127
|
Configured on the ATE1PORT1 port of ATE1_Port1<>DUT_Port1 point-to-point connection and used for IS-IS adjacency. |
$ATE1PORT1_DUTPORT1_2.v4/31 $ATE1PORT1_DUTPORT1_2.v6/127
|
Configured on the DUTPORT1 port of ATE1_Port1<>DUT_Port1 point-to-point connection and used for IS-IS adjacency. |
$ATE1_IBGP.v4/32 $ATE1_IBGP.v6/128
|
Exchanged over IS-IS adjacency. Used to establish IBGP peering between ATE1 and DUT1 |
$ATE1_PORT1_user1.v4/24 $ATE1_PORT1_user2.v4/24 $ATE1_PORT1_user3.v4/24 $ATE1_PORT1_user4.v4/24 $ATE1_PORT1_user5.v4/24 $ATE1_PORT1_user1.v6/64 $ATE1_PORT1_user2.v6/64 $ATE1_PORT1_user3.v6/64 $ATE1_PORT1_user4.v6/64 $ATE1_PORT1_user5.v6/64
|
- $ATE1_IBGP.v[46] advertises these user prefixes to DUT_lo0.v[46] over IBGP- $DUT_lo0.v[46] advertises these further to $ATE2_PORT1_IBGP.v[46] and to $ $ATE2_C.IBGP.v6
|
$ATE2PORT1_DUTPORT2_1.v4/31 $ATE2PORT1_DUTPORT2_1.v6/127
|
Configured on the ATE2Port1 port of ATE2_Port1<>DUT_Port2 point-to-point connection and used for IS-IS adjacency. |
$ATE2PORT1_DUTPORT2_2.v4/31 $ATE2PORT1_DUTPORT2_2.v6/127
|
Configured on DUTPORT2 of the DUT_PORT2<>ATE2_PORT1 point-to-point connection and used for IS-IS adjacency |
$ATE2_PORT1.IBGP.v4/32 $ATE2_PORT1.IBGP.v6/128
|
Regular IBGP peering between $ATE2_PORT1.IBGP.v[46] and DUT_lo0.v[46] |
$ATE2_C.IBGP.v6/128 $ATE2_PPNH[12].v6/128
|
- For IBGP peering between $ATE2_C.IBGP.v6 and DUT_lo0.v6 - Pseudo protocol next-hop for the IBGP routes advertised by $ATE2_C.IBGP.v6 to the DUT |
$ATE2_M.IBGP.v4/32 $ATE2_M.IBGP.v6/128
|
For IBGP peering between $ATE2_M.IBGP.v[4|6] and DUT_lo0.v[4|6]
|
$ATE2PORT3_DUTPORT4_1.v4/31 $ATE2PORT3_DUTPORT4_1.v6/127
|
Configured on ATE2Port3 port of the ATE2_Port3<>DUT_Port4 point-to-point peering and used for EBGP peering between DUT_PORT4<>ATE2_PORT3 |
$ATE2PORT3_DUTPORT4_2.v4/31 $ATE2PORT3_DUTPORT4_2.v6/127
|
Configured on DUTPort4 port of the ATE2_Port3<>DUT_Port4 point-to-point peering and used for EBGP peering between DUT_PORT4<>ATE2_PORT3 |
$DUT_lo0.v4
$DUT_lo0.v6
| Adertised over IS-IS and used for IBGP peering. Also used as IPoUDP tunnel source address
$DUT_TE11.v4/32
| IPoUDP tunnel destination address on the DUT. This IP MUST receive traffic meant for single shard on the DUT
$DUT_TE10.v4/32
| IPoUDP tunnel destination address on the DUT. This IP MUST receive traffic meant for multiple shards on the DUT
$ATE2_INTERNAL_TE11.v4/32
| IPoUDP tunnel destination address on the ATE2. This IP MUST receive traffic meant for single shard on the ATE
$ATE2_INTERNAL_TE10.v4/32
| IPoUDP tunnel destination address on the ATE. This IP MUST receive traffic meant for mulitple shards on the ATE
$ATE2_INTERNAL6.v4/24
$ATE2_INTERNAL6.v6/64
$ATE2_INTERNAL7.v4/24
$ATE2_INTERNAL7.v6/64
$ATE2_INTERNAL8.v4/24
$ATE2_INTERNAL8.v6/64
$ATE2_INTERNAL9.v4/24
$ATE2_INTERNAL9.v6/64
$ATE2_INTERNAL10.v4/24
$ATE2_INTERNAL10.v6/64
|
- Internal Public prefixes
- Advertised to the DUT over the IBGP peering between ATE2_PORT1.IBGP.v[46]
<>$DUT_lo0.v[46]
and $ATE2_C.IBGP.v6
<>$DUT_lo0.v6
- Advertised further to $ATE1_IBGP.v[46]
over the IBGP peering between $ATE1_IBGP.v[46]
<>DUT_lo0.v[46]
over their respective AFI peering
IS-IS:
Different IS-IS L2 adjacencies | Prefixes advertised |
---|---|
ATE1_Port1<>DUT_Port1 |
- ATE1_PORT1 --> DUT_PORT1 : $ATE1_IBGP.v4 , $ATE1_IBGP.v6 - DUT_PORT1 --> ATE1_PORT1 : $DUT_lo0.v4 , $DUT_lo0.v6
|
ATE2_Port1<>DUT_Port2 |
- ATE2_Port1 --> DUT_Port2 : $ATE2_PORT1.IBGP.v4/32 , $ATE2_PORT1.IBGP.v6/128 , $ATE2_C.IBGP.v6/128 , $ATE2_M.IBGP.v6/128 - DUT_Port2 --> ATE2_Port1 : $DUT_lo0.v4 , $DUT_lo0.v6
|
BGP:
Different peering | BGP peering type | Prefixes advertised |
---|---|---|
$ATE1_IBGP.v[46]<>$DUT_lo0.v[46] |
IBGP |
- $DUT_lo0.v[46] is the route-reflector server and $ATE1_IBGP.v[46] is the route-reflector client- $ATE1_IBGP.v[46] advertises prefixes $ATE1_PORT1_user[1-5].v[46] to $DUT_lo0.v[46] on their respective AFI peering- $DUT_lo0.v[46] advertises $ATE2_INTERNAL[6-10].v[46] to $ATE1_IBGP.v[46] on their respective AFI peering- MULTIPATH enabled on this peering |
$ATE2_IBGP.v[46]<>$DUT_lo0.v[46] |
IBGP |
- $ATE2_IBGP.v[46] advertises $ATE2_INTERNAL[6-10].v[46] , $ATE2_INTERNAL_TE10.v4/30 . and $ATE2_INTERNAL_TE11.v4/30 to DUT_lo0.v[46] on their respective AFI peering- $DUT_lo0.v[46] advertises $ATE1_PORT1_user[1-5].v[46] , $DUT_TE10.v4/30 , $DUT_TE11.v4/30 , $DUT_TE10.v4/32 and $DUT_TE11.v4/32 to $ATE2_IBGP.v[46]
|
$ATE2_C.IBGP.v6<>$DUT_lo0.v6 |
IBGP |
- $ATE2_C.IBGP.v6 advertises $ATE2_INTERNAL[6-8].v[46] to DUT_lo0.v6 with Next-hop as $ATE2_PPNH1.v6/128 and a Local-Pref of 200. Similarly advertises $ATE2_INTERNAL[9-10].v[46] to DUT_lo0.v6 with Next-hop as $ATE2_PPNH2.v6/128 and a Local-Pref of 200. Please Note: These prefixes are gradually advertised by $ATE2_C.IBGP.v6 in different Sub tests.$ATE2_INTERNAL6.v[46] in RT-3.52.2 to RT-3.52.9$ATE2_INTERNAL7.v[46] in RT-3.52.3 to RT-3.52.9$ATE2_INTERNAL8.v[46] in RT-3.52.4 to RT-3.52.9$ATE2_INTERNAL9.v[46] in RT-3.52.5 to RT-3.52.9$ATE2_INTERNAL10.v[46] in RT-3.52.6 to RT-3.52.9- $DUT_lo0.v6 advertises $ATE1_PORT1_user[1-5].v[46] to $ATE2_C.IBGP.v6
|
$ATE2_M.IBGP.v[46]<>$DUT_lo0.v[46] |
IBGP |
- DUT_lo0.v[46] advertises, all its ECMP routes to $ATE2_M.IBGP.v[46] on the respective AFI peering.- This peering will have ADD-Path for Multipath routes enabled. |
$ATE2_Port3<>$DUT_Port4 |
EBGP |
- ATE2_Port3 advertises $ATE2_INTERNAL_TE10.v4/30 and $ATE2_INTERNAL_TE11.v4/30 to DUT_Port4 - DUT_Port4 advertises $DUT_TE10.v4/32 , $DUT_TE11.v4/32 , $DUT_TE10.v4/30 and $DUT_TE11.v4/30 to ATE2_Port3
|
Local ASN as ASN100 for following interfaces |
$ATE1_IBGP.v[46] , $DUT_lo0.v[46] , $ATE2_IBGP.v[46] , $DUT_lo0.v[46] , $ATE2_C.IBGP.v6 , $ATE2_M.IBGP.v[46] , $DUT_lo0.v[46] , $DUT_Port2
|
|
Local ASN as ASN200 for following interfaces | $ATE2_Port3 |
Different Flows used throughout the test:
Src_destination of flows | From_IP --> To_IP | DSCP | Tunnel endpoint used |
---|---|---|---|
Flow-Set#1 from ATE1_Port1 --> ATE2_[Either Port1 or Port3 depending on the FIB entries of the DUT] | $ATE1_PORT1_user1.v4/24 --> $ATE2_INTERNAL6.v4/24 |
BE1 | ATE2_INTERNAL_TE11.v4/32 |
Flow-Set#1 from ATE1_Port1 --> ATE2_[Either Port1 or Port3 depending on the FIB entries of the DUT] | $ATE1_PORT1_user1.v6/64 --> $ATE2_INTERNAL6.v6/64 |
BE1 | ATE2_INTERNAL_TE11.v4/32 |
Flow-Set#1 from ATE1_Port1 --> ATE2_[Either Port1 or Port3 depending on the FIB entries of the DUT] | $ATE1_PORT1_user2.v4/24 --> $ATE2_INTERNAL7.v4/24 |
AF1 | ATE2_INTERNAL_TE11.v4/32 |
Flow-Set#1 from ATE1_Port1 --> ATE2_[Either Port1 or Port3 depending on the FIB entries of the DUT] | $ATE1_PORT1_user2.v6/64 --> $ATE2_INTERNAL7.v6/64 |
AF1 | ATE2_INTERNAL_TE11.v4/32 |
Flow-Set#1 from ATE1_Port1 --> ATE2_[Either Port1 or Port3 depending on the FIB entries of the DUT] | $ATE1_PORT1_user3.v4/24 --> $ATE2_INTERNAL8.v4/24 |
AF2 | ATE2_INTERNAL_TE11.v4/32 |
Flow-Set#1 from ATE1_Port1 --> ATE2_[Either Port1 or Port3 depending on the FIB entries of the DUT] | $ATE1_PORT1_user3.v6/64 --> $ATE2_INTERNAL8.v6/64 |
AF2 | ATE2_INTERNAL_TE11.v4/32 |
Flow-Set#2 from ATE1_Port1 --> ATE2_[Either Port1 or Port3 depending on the FIB entries of the DUT] | $ATE1_PORT1_user4.v4/24 --> $ATE2_INTERNAL9.v4/24 |
AF3 | $ATE2_INTERNAL_TE10.v4/32 |
Flow-Set#2 from ATE1_Port1 --> ATE2_[Either Port1 or Port3 depending on the FIB entries of the DUT] | $ATE1_PORT1_user4.v6/64 --> $ATE2_INTERNAL9.v6/64 |
AF3 | $ATE2_INTERNAL_TE10.v4/32 |
Flow-Set#2 from ATE1_Port1 --> ATE2_[Either Port1 or Port3 depending on the FIB entries of the DUT] | $ATE1_PORT1_user5.v4/24 --> $ATE2_INTERNAL10.v4/24 |
AF4 | $ATE2_INTERNAL_TE10.v4/32 |
Flow-Set#2 from ATE1_Port1 --> ATE2_[Either Port1 or Port3 depending on the FIB entries of the DUT] | $ATE1_PORT1_user5.v6/64 --> $ATE2_INTERNAL10.v6/64 |
AF4 | $ATE2_INTERNAL_TE10.v4/32 |
Flow-Set#3 from ATE2_Port3 --> ATE1_Port1 are GUE encaped with Tunnel destination as $DUT_TE11.v4/32 | $ATE2_INTERNAL6.v4/24 --> $ATE1_PORT1_user1.v4/24 |
BE1 | $DUT_TE11.v4/30 |
Flow-Set#3 from ATE2_Port3 --> ATE1_Port1 are GUE encaped with Tunnel destination as $DUT_TE11.v4/32 | $ATE2_INTERNAL6.v6/64 --> $ATE1_PORT1_user1.v6/64 |
BE1 | $DUT_TE11.v4/30 |
Flow-Set#3 from ATE2_Port3 --> ATE1_Port1 are GUE encaped with Tunnel destination as $DUT_TE11.v4/32 | $ATE2_INTERNAL7.v4/24 --> $ATE1_PORT1_user2.v4/24 |
AF1 | $DUT_TE11.v4/30 |
Flow-Set#3 from ATE2_Port3 --> ATE1_Port1 are GUE encaped with Tunnel destination as $DUT_TE11.v4/32 | $ATE2_INTERNAL7.v6/64 --> $ATE1_PORT1_user2.v6/64 |
AF1 | $DUT_TE11.v4/30 |
Flow-Set#3 from ATE2_Port3 --> ATE1_Port1 are GUE encaped with Tunnel destination as $DUT_TE11.v4/32 | $ATE2_INTERNAL8.v4/24 --> $ATE1_PORT1_user3.v4/24 |
AF2 | $DUT_TE11.v4/30 |
Flow-Set#3 from ATE2_Port3 --> ATE1_Port1 are GUE encaped with Tunnel destination as $DUT_TE11.v4/32 | $ATE2_INTERNAL8.v6/64 --> $ATE1_PORT1_user3.v6/64 |
AF2 | $DUT_TE11.v4/30 |
Flow-Set#4 from ATE2_Port3 --> ATE1_Port1 are GUE encaped with Tunnel destination as $DUT_TE10.v4/32 | $ATE2_INTERNAL9.v4/24 --> $ATE1_PORT1_user4.v4/24 |
AF3 | $DUT_TE10.v4/30 |
Flow-Set#4 from ATE2_Port3 --> ATE1_Port1 are GUE encaped with Tunnel destination as $DUT_TE10.v4/32 | $ATE2_INTERNAL9.v6/64 --> $ATE1_PORT1_user4.v6/64 |
AF3 | $DUT_TE10.v4/30 |
Flow-Set#4 from ATE2_Port3 --> ATE1_Port1 are GUE encaped with Tunnel destination as $DUT_TE10.v4/32 | $ATE2_INTERNAL10.v4/24 --> $ATE1_PORT1_user5.v4/24 |
AF4 | $DUT_TE10.v4/30 |
Flow-Set#4 from ATE2_Port3 --> ATE1_Port1 are GUE encaped with Tunnel destination as $DUT_TE10.v4/32 | $ATE2_INTERNAL10.v6/64 --> $ATE1_PORT1_user5.v6/64 |
AF4 | $DUT_TE10.v4/30 |
Flow-Set#5 from ATE2:Port1 to ATE1:Port1 are sent Unencaped | $ATE2_INTERNAL6.v4/24 --> $ATE1_PORT1_user1.v4/24 |
BE1 | N/A |
Flow-Set#5 from ATE2:Port1 to ATE1:Port1 are sent Unencaped | $ATE2_INTERNAL6.v6/64 --> $ATE1_PORT1_user1.v6/64 |
BE1 | |
Flow-Set#5 from ATE2:Port1 to ATE1:Port1 are sent Unencaped | $ATE2_INTERNAL7.v4/24 --> $ATE1_PORT1_user2.v4/24 |
AF1 | |
Flow-Set#5 from ATE2:Port1 to ATE1:Port1 are sent Unencaped | $ATE2_INTERNAL7.v6/64 --> $ATE1_PORT1_user2.v6/64 |
AF1 | |
Flow-Set#5 from ATE2:Port1 to ATE1:Port1 are sent Unencaped | $ATE2_INTERNAL8.v4/24 --> $ATE1_PORT1_user3.v4/24 |
AF2 | |
Flow-Set#5 from ATE2:Port1 to ATE1:Port1 are sent Unencaped | $ATE2_INTERNAL8.v6/64 --> $ATE1_PORT1_user3.v6/64 |
AF2 | |
Flow-Set#5 from ATE2:Port1 to ATE1:Port1 are sent Unencaped | $ATE2_INTERNAL9.v4/24 --> $ATE1_PORT1_user4.v4/24 |
AF3 | |
Flow-Set#5 from ATE2:Port1 to ATE1:Port1 are sent Unencaped | $ATE2_INTERNAL9.v6/64 --> $ATE1_PORT1_user4.v6/64 |
AF3 | |
Flow-Set#5 from ATE2:Port1 to ATE1:Port1 are sent Unencaped | $ATE2_INTERNAL10.v4/24 --> $ATE1_PORT1_user5.v4/24 |
AF4 | |
Flow-Set#5 from ATE2:Port1 to ATE1:Port1 are sent Unencaped | $ATE2_INTERNAL10.v6/64 --> $ATE1_PORT1_user5.v6/64 |
AF4 |
In addition to the adjacencies and peering configurations described in the tables above, the DUT requires the following configurations:
-
IS-IS:
- The DUT's loopback interface must be passive for IS-IS.
-
BGP:
- Define import and export route policies to match the advertisements for each BGP peering.
-
Static GUE Encapsulation:
-
Configure static GUE encapsulation as follows:
-
Define UDP ports to be used for IPv4oUDP and IPv6oUDP which is 6080.
-
Define the Tunnel NHG configuration with these parameters:
ttl = 128
tunnel-source = $DUT_lo0.v4
-
tunnel-destination1 = $ATE2_INTERNAL_TE11.v4/32
. -
tunnel-destination2 = $ATE2_INTERNAL_TE10.v4/32
. - The DUT must have a static route pointing
"$ATE2_PPNH1.v6/128"
and$ATE2_PPNH2.v6/128
to the NHG created above (below is an example of the static route). The IBGP peer $ATE2_C.IBGP.v6/128 is expected to advertise both IPv4 and IPv6 prefixes with the Next-Hop as"$ATE2_PPNH1.v6/128"
or"$ATE2_PPNH2.v6/128"
static dst: ATE2_PPNH1.v6/128 next-hop: $ATE2_INTERNAL_TE11.v4/32 static dst: ATE2_PPNH2.v6/128 next-hop: $ATE2_INTERNAL_TE10.v4/32
-
-
-
GUE Decapsulation:
-
For a GUE decapsulation node, configure the following:
- UDP port 6080 (configurable) must be used for decapsulating IPv4 and IPv6 payload. The implementation MUST look at the first 4 bits of the UDP payload to determine the GUE version as well as the IP version of the payload to be either IPv4 or IPv6 as explained in the IETF draft
- The Decapsulation node must be configured for decapsulating traffic received for the range i.e $DUT_TE11.v4/30 and $DUT_TE10.v4/30 in place of the corresponding /32 addresses.
- After decapsulation, the outer TTL and DSCP bits must not be copied to the inner header
-
Use # Health-1.1: Generic Health Check. If errors identified then the test Must fail.
-
Test Steps:
- Generate DUT Configuration as specified in the test setup
- Use gnmi to push the configuration to the DUT
- Ensure no prefixes are exchanged over the IBGP peering between
$ATE2_C.IBGP.v6
and$DUT_lo0.v6
. Validate this using OC
/network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/state/session-state
/network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/afi-safis/afi-safi/state/prefixes/received
/network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/afi-safis/afi-safi/state/prefixes/sent
* Validate DUT using health-1.1 steps
* Start flow set 1, 2 and 5
* Set 50,000 packets per flow at 1,000pps
* Validate 0 packet loss on the ATE side
* Execute post-test health checks and compare the results with the
baseline. Verify that there are no core dumps, or other issues.
ATE2_Port1 path to DUT_Port4 --> ATE2_Port3 path
-
Test Steps:
- Re-run he baseline test (RT-3.52.1), with flows active in Flow-Set #1, Flow-Set #2, and Flow-Set #5
- Execute the health checks described previously
- The IBGP session between
$ATE2_C.IBGP.v6
and$DUT_lo0.v6
should now advertise only$ATE2_INTERNAL6.v[46]
with a local preference of 200 and Pseudo Protocol Next-Hop as$ATE2_PPNH1.v6/128
-
$DUT_lo0.v6
advertises$ATE1_PORT1_user[1-5].v[46]
to$ATE2_C.IBGP.v6
-
Expectations:
- Routes to prefixes
$ATE2_INTERNAL6.v4/24
and$ATE2_INTERNAL6.v6/64
, learned from$ATE2_C.IBGP.v6/128
, should be placed in the FIB. Other prefixes from ATE2 will continue to be learnt via the IBGP peering between$ATE2_PORT1.IBGP.v[46]
and$DUT_lo0.v[46]
and hence will be in the DUT's FIB. Please use the AFT paths specified below for verification. - Flows destined for
$ATE2_INTERNAL6.v4/24
and$ATE2_INTERNAL6.v6/64
should be GUE-encapsulated with tunnel destination$ATE2_INTERNAL_TE11.v4
and routed over the EBGP peering between$ATE2_Port3
and$DUT_Port4
, and these flows must be 100% successful (zero loss). Please check this on the ATE2 (capture 1 packet using OTG from each flow and then decode the packet to validate headers. Remaining packets can be trusted to also be encapsulated.). Verify that traffic is unencapsulated before the migration and encapsulated after the migration. - The outer header TTL should be 127 upon arrival at
ATE2_Port1
(before decapsulation). Please check this on the ATE2. - The outer header DSCP bits should be the same as the inner header DSCP
bits when received at
ATE2_Port1
(before decapsulation). Please verify this on the ATE2. - Verify on ATEs that the amount of packets sent is the same as the amount
of encaped packets received per tunnel endpoint. Also check the
interface counters using OC.
/interfaces/interface/state/counters/out-unicast-pkts
- Unencapsulated flows from ATE2 to
ATE1_Port1
must have 100% success (Zero loss), routing via the IBGP peering between$ATE2_IBGP.v[46]
and$DUT_lo0.v[46]
- Post-test health checks should be performed and compared against the baseline. Verify the absence of drops or core dumps. If any, the test Must fail
- Routes to prefixes
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/counters/octets-forwarded
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/counters/packets-forwarded
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/next-hop-group
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/origin-protocol
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/prefix
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/counters/octets-forwarded
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/counters/packets-forwarded
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/next-hop-group
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/origin-protocol
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/prefix
Follow the same steps as in RT-3.52.2 and gradually move one Traffic class at a time in the following order. Note changes in RT-3.52.5 and RT-3.52.6
* Migrate routing of AF1 flows from `DUT_Port2` --> `ATE2_Port1` to
`DUT_Port4` --> `ATE2_Port3`.
* BE1 and AF1 are now migrated
* Complete validation same as RT-3.52.2 above
* Migrate routing of AF2 flows from `DUT_Port2` --> `ATE2_Port1` to
`DUT_Port4` --> `ATE2_Port3`.
* BE1-AF2 are now migrated
* Complete validation same as RT-3.52.2 above
* Migrate routing of AF3 flows from `DUT_Port2` --> `ATE2_Port1` to
`DUT_Port4` --> `ATE2_Port3`.
* `$ATE2_C.IBGP.v6` will advertise `$ATE2_INTERNAL9.v4/24` and
`$ATE2_INTERNAL9.v6/64` with next-hop as `$ATE2_PPNH2.v6/128`.
Traffic towards `$ATE2_INTERNAL9.v[46]/24` will have tunnel
destination `$ATE2_INTERNAL_TE10.v4/32`.
* BE1-AF3 are now migrated
* Complete validation same as RT-3.52.2 above
* Migrate routing of AF4 flows from `DUT_Port2` --> `ATE2_Port1` to
`DUT_Port4` --> `ATE2_Port3`.
* `$ATE2_C.IBGP.v6` will advertise `$ATE2_INTERNAL10.v4/24` and
`$ATE2_INTERNAL10.v6/64` with next-hop as `$ATE2_PPNH2.v6/128`
Traffic towards `$ATE2_INTERNAL10.v[46]` will have tunnel
destination `$ATE2_INTERNAL_TE10.v4/32`.
* BE1-AF4 are now migrated
* Complete validation same as RT-3.52.2 above
-
Situation:
- The test begins from the state established in RT-3.52.3, where all traffic from ATE1 to ATE2 is encapsulated by the DUT and routed via DUT_Port4 --> ATE2_Port3 path.
-
Test Steps:
- Perform all previously defined health checks as a baseline.
- Stop Flow-Set #5 and start Flow-Set #4, resulting in active flows for Flow-Set #1 through Flow-Set #4.
-
Expectations:
-
Traffic from ATE1 to ATE2 should be GUE encapsulated with tunnel destinations
$ATE2_INTERNAL_TE11.v4/32
and$ATE2_INTERNAL_TE10.v4/32
and routed out$DUT_Port4<>$ATE2_Port3
. Verify this on the ATE2. -
ATE2_Port3
sends encapsulated flows (Flow-Set #3 and Flow-Set #4) toATE1_Port1
through the DUT.BE1 to AF2 flows are expected to have a tunnel destination of
$DUT_TE11.v4/32
, while AF3 and AF4 flows should have$DUT_TE10.v4/32
as their tunnel destination. Traffic should reach the destination successfully with zero loss. -
Post-test health checks should be performed and compared against the baseline. Verify the absence of drops or core dumps. If any, the test Must fail
-
-
Situation:
- The test begins from the final state of RT-3.52.7 In this state, the DUT
encapsulates BE1-AF2 traffic from ATE1 to ATE2 towards tunnel
destination address
"$ATE2_INTERNAL_TE11.v4/32"
, and AF3-AF4 traffic is encapsulated towards"$ATE2_INTERNAL_TE10.v4/32"
Similarly, BE1-AF2 traffic from ATE2 to ATE1 is encapsulated with tunnel destination"$DUT_TE11.v4/32"
, and AF3-AF4 traffic uses"$DUT_TE10.v4/32"
- ATE2 do not send any unencapsulated flows (Flow-Set#5)
- The test begins from the final state of RT-3.52.7 In this state, the DUT
encapsulates BE1-AF2 traffic from ATE1 to ATE2 towards tunnel
destination address
-
Test Steps:
- Execute the previously defined health checks as a baseline
- Flow-Sets #1 through #4 should be active
- On
ATE2_Port3
, stop advertising the prefixes"$ATE2_INTERNAL_TE11.v4/32"
and"$ATE2_INTERNAL_TE10.v4/32"
toDUT_Port4
over EBGP
-
Expectations:
- When
ATE2_Port3
withdraws the route advertisement on the EBGP peering withDUT_Port4
:- The tunnel endpoints
"$ATE2_INTERNAL_TE11.v4/32"
and"$ATE2_INTERNAL_TE10.v4/32"
, learned via the IBGP peering between $ATE2_IBGP.v[46]<>$DUT_lo0.v[46], should be placed in the FIB. - Traffic from ATE1 to ATE2 should then take the path
DUT_Port2
-->ATE2_Port1
path after encapsulation on the DUT, with no traffic loss expected due to this change. Please verify this behavior on the ATE2. - Post-test health checks should be performed and compared against the baseline. Verify the absence of drops or core dumps. If any, the test Must fail
- The tunnel endpoints
- When
Inflight
-
Situation:
- The test starts from the end state of RT-3.52.8, restart all the flows.
Traffic between ATE1 to ATE2 is routed via the
DUT_Port2
-->ATE2_Port1
path after encapsulation on the DUT. ATE2 --> ATE1 traffic is routed via the ATE2_Port3 --> DUT_Port4 path. - Static routes for
$ATE2_PPNH1.v6/128
and$ATE2_PPNH2.v6/128
are active because tunnel endpoints"$ATE2_INTERNAL_TE11.v4/32"
and"$ATE2_INTERNAL_TE10.v4/32"
are reachable via the IBGP peering between$ATE2_IBGP.v[46]
and$DUT_lo0.v[46]
- Routes for
ATE2_INTERNAL[6-10].v[46]
, advertised by ATE2 over the IBGP peering$ATE2_C.IBGP.v6<>$DUT_lo0.v6
, remain active on the DUT. - Verify the FIB entries using the AFT streamed data.
- The test starts from the end state of RT-3.52.8, restart all the flows.
Traffic between ATE1 to ATE2 is routed via the
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/counters/octets-forwarded
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/counters/packets-forwarded
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/next-hop-group
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/origin-protocol
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/prefix
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/counters/octets-forwarded
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/counters/packets-forwarded
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/next-hop-group
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/origin-protocol
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/prefix
-
Test Steps:
- Configure
$ATE2_IBGP.v[46]
to stop advertising tunnel endpoints"$ATE2_INTERNAL_TE11.v4/32"
and"$ATE2_INTERNAL_TE10.v4/32"
to$DUT_lo0.v[46]
over their IBGP peering
- Configure
-
Expectations:
- Static routes for
$ATE2_PPNH1.v6/128
and$ATE2_PPNH2.v6/128
must become invalid. Verify using the AFT table - Routes for
ATE2_INTERNAL[6-10].v[46]
advertised by ATE2 over the IBGP peering$ATE2_C.IBGP.v6<>$DUT_lo0.v6
must become invalid. Verify using the AFT table - Routes for
ATE2_INTERNAL[6-10].v[46]
advertised by$ATE2_IBGP.v[46]
over the IBGP peering$ATE2_IBGP.v[46]<>$DUT_lo0.v[46]
must be placed in the FIB. Verify using AFT. - Traffic from ATE1 to ATE2 towards
ATE2_INTERNAL[6-10].v[46]
destinations must not experience any drops and should be routed unencapsulated via theATE2_Port1<>DUT_Port2
path. - Post-test health checks should be performed and compared against the baseline. Verify the absence of drops or core dumps. If any, the test Must fail
- AFT paths below to be used for verification.
- Static routes for
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/counters/octets-forwarded
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/counters/packets-forwarded
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/next-hop-group
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/origin-protocol
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/prefix
/network-instances/network-instance/afts/ipv6-unicast/ipv4-entry/state/counters/octets-forwarded
/network-instances/network-instance/afts/ipv6-unicast/ipv4-entry/state/counters/packets-forwarded
/network-instances/network-instance/afts/ipv6-unicast/ipv4-entry/state/next-hop-group
/network-instances/network-instance/afts/ipv6-unicast/ipv4-entry/state/origin-protocol
/network-instances/network-instance/afts/ipv6-unicast/ipv4-entry/state/prefix
-
Test Steps:
- Establish all IS-IS adjacencies. Ensure that prefix
$ATE2_C.IBGP.v6/128
is not advertised fromATE2_Port1
toDUT_Port2
, and prefixes$DUT_lo0.v[46]
are not advertised fromDUT_Port2
toATE2_Port1
. Validate using AFT entries. - Run the previously defined health checks.
- On their mutual EBGP session,
DUT_Port4
advertises$DUT_lo0.v[46]
andATE2_Port3
advertises$ATE2_C.IBGP.v6/128
, in addition to any existing exchanges. This establishes the IBGP session between$DUT_lo0.v6/128
and$ATE2_C.IBGP.v6/128
via the EBGP session betweenDUT_Port4
andATE2_Port3
. - Disable the connection between
DUT_Port2
andATE2_Port1
. - Verify that
$ATE2_C.IBGP.v6/128
and$DUT_lo0.v6/128
exchange the same prefixes as before, according to the table mentioned earlier over their IBGP session. - Start all flows from Flow-Set #1 to Flow-Set #4.
- Establish all IS-IS adjacencies. Ensure that prefix
-
Expectations:
- Ensure no packet drops occur after the IBGP transport migration. Validate on the ATE.
- Packets should be sent encapsulated between
DUT:Port4
andATE2:Port3
. Validate on the ATE. - Post-test health checks should be performed and compared against the baseline. Verify the absence of drops or core dumps. If any, the test Must fail. Following AFT paths to be used for validation
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/counters/octets-forwarded
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/counters/packets-forwarded
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/next-hop-group
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/origin-protocol
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/prefix
/network-instances/network-instance/afts/ipv6-unicast/ipv4-entry/state/counters/octets-forwarded
/network-instances/network-instance/afts/ipv6-unicast/ipv4-entry/state/counters/packets-forwarded
/network-instances/network-instance/afts/ipv6-unicast/ipv4-entry/state/next-hop-group
/network-instances/network-instance/afts/ipv6-unicast/ipv4-entry/state/origin-protocol
/network-instances/network-instance/afts/ipv6-unicast/ipv4-entry/state/prefix
{
"network-instances": {
"network-instance": [
{
"config": {
"name": "default"
},
"name": "default",
"protocols": {
"protocol": [
{
"config": {
"identifier": "STATIC",
"name": "STATIC"
},
"identifier": "STATIC",
"name": "STATIC",
"static-routes": {
"static": [
{
"config": {
"prefix": "fc00:10::1/128"
},
"next-hop-group": {
"config": {
"name": "ENCAP-NHG-1"
}
},
"prefix": "fc00:10::1/128"
}
]
}
}
]
},
"static": {
"next-hop-groups": {
"next-hop-group": [
{
"config": {
"name": "ENCAP-NHG-1"
},
"name": "ENCAP-NHG-1",
"next-hops": {
"next-hop": [
{
"config": {
"index": "0"
},
"index": "0"
}
]
}
}
]
},
"next-hops": {
"next-hop": [
{
"config": {
"index": "0"
},
"encap-headers": {
"encap-header": [
{
"config": {
"index": 0,
"type": "UDPV4"
},
"index": 0,
"udp-v4": {
"config": {
"dscp": 32,
"dst-ip": "10.50.50.1",
"dst-udp-port": 6080,
"ip-ttl": 255,
"src-ip": "10.5.5.5",
"src-udp-port": 49152
}
}
}
]
},
"index": "0"
}
]
}
}
}
]
}
}
{
"defined-sets": {
"ipv4-prefix-sets": {
"ipv4-prefix-set": [
{
"config": {
"name": "dst_prefix"
},
"name": "dst_prefix"
}
]
}
},
"network-instances": {
"network-instance": [
{
"config": {
"name": "default"
},
"name": "default",
"policy-forwarding": {
"policies": {
"policy": [
{
"config": {
"policy-id": "decap-policy"
},
"policy-id": "decap-policy",
"rules": {
"rule": [
{
"action": {
"config": {
"decapsulate-gre": true
}
},
"config": {
"sequence-id": 1
},
"ipv4": {
"config": {
"destination-address-prefix-set": "dst_prefix",
"protocol": "IP_UDP"
}
},
"sequence-id": 1,
"transport": {
"config": {
"destination-port": 6080
}
}
}
]
}
}
]
}
}
}
]
}
}
paths:
# config
/network-instances/network-instance/static/next-hop-groups/next-hop-group/config/name:
/network-instances/network-instance/static/next-hop-groups/next-hop-group/next-hops/next-hop/config/index:
/network-instances/network-instance/static/next-hops/next-hop/config/index:
/network-instances/network-instance/static/next-hops/next-hop/encap-headers/encap-header/config/index:
/network-instances/network-instance/static/next-hops/next-hop/encap-headers/encap-header/config/type:
/network-instances/network-instance/static/next-hops/next-hop/encap-headers/encap-header/udp-v4/config/dscp:
/network-instances/network-instance/static/next-hops/next-hop/encap-headers/encap-header/udp-v4/config/dst-ip:
/network-instances/network-instance/static/next-hops/next-hop/encap-headers/encap-header/udp-v4/config/dst-udp-port:
/network-instances/network-instance/static/next-hops/next-hop/encap-headers/encap-header/udp-v4/config/ip-ttl:
/network-instances/network-instance/static/next-hops/next-hop/encap-headers/encap-header/udp-v4/config/src-ip:
/network-instances/network-instance/static/next-hops/next-hop/encap-headers/encap-header/udp-v4/config/src-udp-port:
/network-instances/network-instance/protocols/protocol/static-routes/static/next-hop-group/config/name:
# telemetry
# BGP
/network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/state/session-state:
/network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/afi-safis/afi-safi/state/prefixes/received:
/network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/afi-safis/afi-safi/state/prefixes/sent:
# IS-IS
/network-instances/network-instance/protocols/protocol/isis/interfaces/interface/levels/level/adjacencies/adjacency/state/adjacency-state:
# AFT
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/counters/octets-forwarded:
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/counters/packets-forwarded:
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/next-hop-group:
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/origin-protocol:
/network-instances/network-instance/afts/ipv4-unicast/ipv4-entry/state/prefix:
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/counters/octets-forwarded:
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/counters/packets-forwarded:
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/next-hop-group:
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/origin-protocol:
/network-instances/network-instance/afts/ipv6-unicast/ipv6-entry/state/prefix:
# interface counters
/interfaces/interface/state/counters/out-unicast-pkts:
rpcs:
gnmi:
gNMI.Set:
union_replace: true
gNMI.Subscribe:
on_change: true
- Specify the minimum DUT-type:
- FFF - fixed form factor