next_hop_encap_udp - openconfig/featureprofiles GitHub Wiki
This test verifies using static route to encapsulate packets in an IPv4 GUE tunnel. The encapsulation is based on a statically configured GUE tunnel.
The GUE header ((UDPoIP)) used in this test refers to GUE Variant 1 as specified in draft-ietf-intarea-gue-09.
The following behavioral properties are called out for awareness:
- When the DSCP for the tunnel is not explicitly set, it is copied from the inner to the outer encapsulating header.
- When the TTL for the tunnel is not explicitly set, it is decremented by 1 and copied from inner to the outer encapsulating header. Except TTL=1, where Time Exceeded is sent back to the inner source IP.
```
-------
| | ==== LAG1 ==== [ ATE:Port2, ATE:Port3 ]
[ ATE:Port1 ] ---- | DUT |
| | ==== LAG2 ==== [ ATE:Port4, ATE:Port5 ]
-------
```
- Routes are advertised from ATE:Port1
- Traffic is generated from ATE:Port1
- ATE:Port2, ATE:Port3, ATE:Port4 and ATE:Port5 are used as the destination port for GUE encapsulated traffic
- PNH-IPv6 is fc00:10::1
- IPv4-DST-GUE is 10.50.50.1
- IPv4-DST-NET is 10.1.1.1
- IPv4-DST-NET is 2001:DB8::10:1:1::1
-
DUT:Port1 is configured as singleton interface towards ATE:Port1.
- DUT:Port1:IPv6 is 2001:DB8::192:168:10:2/126
- ATE:Port1:IPv6 is 2001:DB8::192:168:10:1/126
-
DUT:Port2 and DUT:Port3 are configured as LAG1 interface towards ATE:Port2 and ATE:Port3 respectively.
- DUT:LAG1:IPv4 is 192.168.20.2/30
- ATE:LAG1:IPv4 is 192.168.20.2/30
-
DUT:Port4 and DUT:Port5 are configured as LAG2 interface towards ATE:Port4 and ATE:Port5 respectively.
- DUT:LAG1:IPv4 is 192.168.30.2/30
- ATE:LAG1:IPv4 is 192.168.30.2/30
-
DUT:Port1 is configured to form one iBGP session with ATE:Port1 using RFC5549. Peering is done with the directly connected interface IP.
-
ATE:Port1 is configured to advertise destination networks IPv4-DST-NET/32 and IPv6-DST-NET/128 via BGP to DUT. The protocol next hop of both the IPv4 and IPv6 networks should be PNH-IPv6.
-
DUT is configured with an IPv4 GUE tunnel with destination IPv4-DST-GUE without any explicit tunnel Type of Service (ToS) or Time to Live (TTL) values. The next hop group will be used for GUE encapsulation.
-
DUT is configured with the following static routes:
- To PNH-IPv6, next hop is the statically configured IPv4 GUE tunnel.
- To IPv4-DST-GUE, next hop is ATE:LAG1:IPv4.
- To IPv4-DST-GUE, next hop is ATE:LAG2:IPv4.
ATE action:
- Generate 12000000 IPv4 packets from ATE:Port1 to random IP addresses in
IPv4-DST-NET ensuring that there are at least 65000 different 5-tuple flows.
- Use 512 bytes frame size.
- Set ToS value of 0x80 for all packets.
- Set TTL of all packets to 10.
Verify:
- The packet count of traffic sent from ATE:Port1 should be equal to the sum
of all packets:
- Egressing DUT:Port2, DUT:Port3, DUT:Port4 and DUT:Port5
by checking
out-unicast-pkts
counter. - Received on ATE:Port2, ATE:Port3, ATE:Port4 and ATE:Port5.
- Egressing DUT:Port2, DUT:Port3, DUT:Port4 and DUT:Port5
by checking
- All packets received on ATE:Port2, ATE:Port3, ATE:Port4 and ATE:Port5 are GUE encapsulated.
- ECMP hashing works over the two LAG interfaces with a tolerance of 6%.
- LAG hashing works over the two singleton ports within LAG1 and LAG2 with a tolerance of 6%.
- ToS for all GUE encapsulated packets received at ATE ports:
- GUE header ToS is 0x80.
- Inner header ToS is 0x80.
- TTL for all GUE encapsulated packets received at ATE ports:
- GUE header TTL is 9.
- Inner header TTL is 9.
- Modify the flows in
RT-3.53.1
to use IPv6 destination IPv6-DST-NET and repeat the traffic generation and validation.
DUT and ATE actions:
- Re-configure the IPv4 GUE tunnel on the DUT with ToS value 0x60.
- Generate the same flows in
RT-3.53.1
.
Verify:
- Repeat same verifications in
RT-3.53.1
but with the following differences- ToS for all GUE encapsulated packets:
- GUE header ToS is 0x60.
- ToS for all GUE encapsulated packets:
- Modify the flows in
RT-3.53.3
to use IPv6 destination IPv6-DST-NET and repeat the traffic generation and validation.
DUT and ATE actions:
- Re-configure the IPv4 GUE tunnel on the DUT without an explicit ToS value.
- Re-configure the IPv4 GUE tunnel on the DUT with TTL value of 20.
- Generate the same flows in
RT-3.53.1
.
Verify:
- Repeat same verifications in
RT-3.53.1
but with the following differences- TTL for all GUE encapsulated packets:
- GUE header TTL is 20.
- TTL for all GUE encapsulated packets:
- Modify the flows in
RT-3.53.5
to use IPv6 destination IPv6-DST-NET and repeat the traffic generation and validation.
DUT and ATE actions:
- Re-configure the IPv4 GUE tunnel on the DUT with ToS value 0x60.
- Re-configure the IPv4 GUE tunnel on the DUT with TTL value of 20.
- Generate the same flows in
RT-3.53.1
.
Verify:
- Repeat same verifications in
RT-3.53.1
but with the following differences- ToS for all GUE encapsulated packets:
- GUE header ToS is 0x60.
- TTL for all GUE encapsulated packets:
- GUE header TTL is 20.
- ToS for all GUE encapsulated packets:
- Modify the flows in
RT-3.53.7
to use IPv6 destination IPv6-DST-NET and repeat the traffic generation and validation.
DUT and ATE actions:
- Re-configure DUT without explicit ToS/TTL configuration on tunnel
- Modify flows in
RT-3.53.1
to be a single flow only; use fixed source and destination IPs as well as fixed source and destination UDP ports.
Verify:
Verify:
- Repeat same verifications in
RT-3.53.1
but with the following differences- All traffic is hashed to a only one LAG and only one singleton port in the LAG.
- Modify the flows in
RT-3.53.9
to use IPv6 destination IPv6-DST-NET and repeat the traffic generation and validation.
ATE action:
- Modify flows in
RT-3.53.1
and set TTL of all packets to 1.
Verify:
- All packets should have TTL decremented to 0, dropped and ICMP Time Exceeded (Type 11) / Time to Live exceeded in Transit (Code 0) sent back to source address (ATE:Port1).
- Modify the flows in
RT-3.53.11
to use IPv6 destination IPv6-DST-NET and repeat the traffic generation and validation.
{
"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": 20,
"src-ip": "10.5.5.5",
"src-udp-port": 49152
}
}
}
]
},
"index": "0"
}
]
}
}
}
]
}
}
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
/interfaces/interface/state/counters/out-unicast-pkts:
rpcs:
gnmi:
gNMI.Set:
union_replace: true
replace: true
gNMI.Subscribe:
on_change: true