ipv4_guev1_decap_and_hashing_test - openconfig/featureprofiles GitHub Wiki
This is to test the functionality of decapsulation of GUEv1 to IPv4 or IPv6 payload and ensures that only the outer header (IPv4 | UDP) of GUEv1 encapsulated packets are used for hashing on decapsulating nodes.
GUEv1 decapsulation matching destination-address-prefix-set and TTL and DSCP behavior test is documented in #4178.
graph LR;
subgraph DUT [DUT]
B1[Port1]
B2[Port2]
B3[Port3]
B4[Port4]
B5[Port5]
B6[Port6]
B7[Port7]
end
subgraph ATE2 [ATE2]
N1[Port1]
end
subgraph ATE3 [ATE3]
N21[Port2]
N22[Port3]
end
subgraph ATE4 [ATE4]
N31[Port4]
N32[Port5]
end
subgraph ATE5 [ATE5]
N4[Port6]
end
A1[ATE1:Port1] <--EBGP--> B1;
B2 <--IBGP--> N1;
B3 <-- [LAG1] IBGP --> N21;
B4 <-- [LAG1] IBGP --> N22;
B5 <-- [LAG2] EBGP --> N31;
B6 <-- [LAG2] EBGP --> N32;
B7 <-- EBGP --> N4;
- The DUT's loopback interface must be passive for IS-IS.
- Configure IPv4 and IPv6 EBGP[ASN200:ASN100] between ATE:Port1 <> DUT:Port1
- Configure IPv4 and IPv6 IBGP[ASN100] between DUT <> ATE2
- Configure IPv4 and IPv6 IBGP[ASN100] between DUT <> ATE3
- Configure IPv4 and IPv6 EBGP[ASN100:ASN200] between DUT <> ATE4
- Configure IPv4 and IPv6 EBGP[ASN100:ASN200] between DUT <> ATE5
- Configure DUT as decapsulation node for IP|UDP (GUE v1)using "DUT-DECAP-Address" and decap UDP port as 6080
- Enable BGP multipath for both EBGP and IBGP sessions to enable load balancing traffic across multiple paths/links
- Enable BGP multihop for BGP(IBGP/EBGP) sessions on LAG interfaces
- DUT has multiple paths to Host2 via multiple nodes, ATE2 & ATE3
- DUT can reach Host3 via a lag interface towards ATE3
- DUT has multiple paths to Host4 via multiple nodes, ATE4 & ATE5
- Host1(v4/v6) route is installed and active via ATE1
- Host2(v4/v6) route is installed and active via ATE2 and ATE3, therefore the traffic for Host2 should be load-balanced across both the nodes
- Host3v4 route is installed and active via ATE3, therefore the traffic for Host3 should be load-balanced across the lag members
- Host4(v4/v6) route is installed and active via ATE4 and ATE5, therefore the traffic for Host4 should be load-balanced across both the nodes
- The ATE's loopback interface must be passive for IS-IS
- Establish BGP sessions as shown in the DUT configuration section
- ATE1 hosts Host1v4 and Host1v6
- ATE2 and ATE3 hosts Host2v4 and Host2v6
- ATE3 hosts Host3v4
- Reachability to Host3v4 from ATE3 is via a static MPLS label
- ATE4 and ATE5 hosts Host4v4 and Host4v6
Source ATE Nodes | Advertisement Type | Prefixes | Via BGP Sessions | Host Mapping |
---|---|---|---|---|
ATE1 | EBGP | IPv4prefix1-10/24 | IPv4 DUT <--> ATE1 | Host1v4 |
ATE1 | EBGP | IPv6prefix1-10/64 | IPv6 DUT <--> ATE1 | Host1v6 |
ATE1 | EBGP | Loopback[1-10]v4/32 | IPv4 DUT <--> ATE1 | ATE1LO[1-10]v4 |
ATE2 and ATE3 | IBGP | IPv4prefix11-20/24 | IPv4 DUT <--> ATE2 and DUT <--> ATE3 | Host2v4 |
ATE2 and ATE3 | IBGP | IPv6prefix11-20/64 | IPv6 DUT <--> ATE2 and DUT <--> ATE3 | Host2v6 |
ATE3 | IBGP | IPv4prefix21-30/24 | IPv4 DUT <--> ATE2 and DUT <--> ATE3 | Host3v4 |
ATE4 and ATE5 | EBGP | IPv4prefix31-40/24 | IPv4 DUT <--> ATE4 and DUT <--> ATE5 | Host4v4 |
ATE4 and ATE5 | EBGP | IPv6prefix31-40/64 | IPv6 DUT <--> ATE4 and DUT <--> ATE5 | Host4v6 |
To simplify this document, Host1, Host2, and Host3 will be referred to as H1, H2, H3 and H4 respectively.
Packet# | Layer | Protocol | Source Address | Destination Address | Source Port | Destination Port | MPLS Label | Notes |
---|---|---|---|---|---|---|---|---|
1 | Overall | Payload o IPv4|TCP o MPLS o IPv4|UDP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv4|TCP | H1v4 address | H3v4 address | 14 | 15 | Src Port: Any unassigned TCP port; Dst Port: Any App/unassigned TCP port | ||
MPLS | MPLS | N/A | N/A | N/A | N/A | Static label for ATE3 to reach H3v4 | Note: Inner Dst is H3v4 | |
Middle | IPv4|UDP | ATE1LO1v4 IPv4 addr | ATE3-port IPv4 addr | 5995 (randomizable) | 6080 | Src Port: Any unreserved UDP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | DUT-DECAP-Address | 5996 (randomizable) | 6080 | Src Port: Any unassigned UDP port; GUE v1 encapsulation | ||
2 | Overall | Payload o IPv4|UDP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv4|UDP | H1v4 address | H2v4 address | 14 (randomizable) | 15 | Src Port: Any unassigned UDP port; Dst Port: Any App/unassigned UDP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | DUT-DECAP-Address | 5996 (randomizable) | 6080 | Src Port: Any unassigned UDP port; GUE v1 encapsulation | ||
3 | Overall | Payload o IPv4|TCP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv4|TCP | H1v4 address | H2v4 address | 14 (randomizable) | 15 | Src Port: Any unassigned TCP port; Dst Port: Any App/unassigned TCP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | DUT-DECAP-Address | 5996 (randomizable) | 6080 | Src Port: Any unassigned UDP port; GUE v1 encapsulation | ||
4 | Overall | Payload o IPv4|UDP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv4|UDP | H1v4 address | H4v4 address | 14 (randomizable) | 15 | Src Port: Any unassigned UDP port; Dst Port: Any App/unassigned UDP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | DUT-DECAP-Address | 5996 (randomizable) | 6080 | Src Port: Any unassigned UDP port; GUE v1 encapsulation | ||
5 | Overall | Payload o IPv4|TCP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv4|TCP | H1v4 address | H4v4 address | 14 (randomizable) | 15 | Src Port: Any unassigned TCP port; Dst Port: Any App/unassigned TCP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | DUT-DECAP-Address | 5996 (randomizable) | 6080 | Src Port: Any unassigned UDP port; GUE v1 encapsulation | ||
6 | Overall | Payload o IPv6|TCP o MPLS o IPv4|UDP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv6|TCP | H1v6 address | H3v6 address | 14 | 15 | Src Port: Any unassigned TCP; Dst Port: Any App/unassigned TCP | ||
MPLS | MPLS | N/A | N/A | N/A | N/A | Static label for ATE3 to reach H3v6 | Note: Inner Dst is H3v6 | |
Middle | IPv4|UDP | ATE1LO1v4 IPv4 addr | ATE3-port IPv4 addr | 5995 (randomizable) | 6080 | Src Port: Any unassigned UDP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | DUT-DECAP-Address | 5996 (randomizable) | 6080 | Src Port: Any unassigned UDP port; GUE v1 encapsulation | ||
7 | Overall | Payload o IPv6|UDP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv6|UDP | H1v6 address | H2v6 address | 5995 (randomizable) | 5994 (randomizable) | Src/Dst Ports: Any unassigned UDP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | DUT-DECAP-Address | 5996 (randomizable) | 6080 | Src Port: Any unassigned UDP port; GUE v1 encapsulation | ||
8 | Overall | Payload o IPv6|TCP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv6|TCP | H1v6 address | H2v6 address | 14 (randomizable) | 15 | Src Port: Any unassigned TCP port; Dst Port: Any App/unassigned TCP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | DUT-DECAP-Address | 5996 (randomizable) | 6080 | Src Port: Any unassigned UDP port; GUE v1 encapsulation | ||
9 | Overall | Payload o IPv6|UDP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv6|UDP | H1v6 address | H4v6 address | 5995 (randomizable) | 5994 (randomizable) | Src/Dst Ports: Any unreserved UDP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | DUT-DECAP-Address | 5996 (randomizable) | 6080 | Src Port: Any unreserved UDP port; GUE v1 encapsulation | ||
10 | Overall | Payload o IPv6|TCP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv6|TCP | H1v6 address | H4v6 address | 14 (randomizable) | 15 | Src Port: Any unassigned TCP port; Dst Port: Any App/unassigned TCP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | DUT-DECAP-Address | 5996 (randomizable) | 6080 | Src Port: Any unreserved UDP port; GUE v1 encapsulation | ||
11 | Overall | Payload o IPv6|TCP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv6|TCP | H1v4 address | H4v4 address | 14 | 15 | Src Port: Any unassigned TCP port; Dst Port: Any App/unassigned TCP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | ATE2-port-Address IPv4 addr | 5996 | 6080 | Src Port: Any unreserved UDP port; GUE v1 encapsulation | ||
12 | Overall | Payload o IPv6|TCP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv6|TCP | H1v6 address | H4v6 address | 14 | 15 | Src Port: Any unassigned TCP port; Dst Port: Any App/unassigned TCP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | ATE2-port-Address IPv4 addr | 5996 | 6080 | Src Port: Any unreserved UDP port; GUE v1 encapsulation | ||
13 | Overall | Payload o IPv6|TCP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv6|TCP | H1v4 address | H4v4 address | 14 | 15 | Src Port: Any unassigned TCP port; Dst Port: Any App/unassigned TCP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | DUT-DECAP-Address | 5996 | 6085 | Src Port: Any unreserved UDP port; GUE v1 encapsulation | ||
14 | Overall | Payload o IPv6|TCP o IPv4|UDP(GUE v1) | ||||||
Inner | IPv6|TCP | H1v6 address | H4v6 address | 14 | 15 | Src Port: Any unassigned TCP port; Dst Port: Any App/unassigned TCP port | ||
Outer | IPv4|UDP(GUE v1) | ATE1-port IPv4 addr | DUT-DECAP-Address | 5996 | 6085 | Src Port: Any unreserved UDP port; GUE v1 encapsulation |
Flow-type | Description | Packet# |
---|---|---|
1 | H1 --> H3 with IPv4 | Packet#1 |
2 | H1 --> H2 with IPv4 | Packet#2 |
3 | H1 --> H2 with IPv4 | Packet#3 |
4 | H1 --> H4 with IPv4 | Packet#4 |
5 | H1 --> H4 with IPv4 | Packet#5 |
6 | H1 --> H3 with IPv6 | Packet#6 |
7 | H1 --> H2 with IPv6 | Packet#7 |
8 | H1 --> H2 with IPv6 | Packet#8 |
9 | H1 --> H4 with IPv6 | Packet#9 |
10 | H1 --> H4 with IPv6 | Packet#10 |
- Traffic towards a destination is spread evenly across nodes and LAGs (if applicable):
- Tolerance for delta: 5%
- Start the Ixia traffic as specified for test
- Sent 1000000 packets at the 10% of the line rate.
- Packets are generated based on different header field entropy which can be defined by the test case
- Repeat each test with the each ATE Flow-type or explicitly mentioned flow-type
- Conduct each of the following test, using a single flow-type with 1024 flows
- Configure the DUT and ATE as stated above
- Initiate a single flow-type and follow the below stated and applicable verification steps
- L4 source port of outer header(GUEv1 encap header) should be randomized for each flow-type that's running
- Repeat the test for all flow-types
- Validations:
- The outer header destination IP of the traffic is the DUT-DECAP-Address and the destination port of the traffic (UDP 6080) matches the configured UDP decap port criteria
- Therefore, DUT will decapsulate the outer header and perform a lookup based on the inner IP address
- The following traffic distribution validations are applicable as per the flow-type that is being tested
- Flow#1 for H3 should be load-balanced across the lag members via ATE3
- Flow#2 for H2 should be load-balanced via ATE2 and ATE3
- Traffic via ATE3 should be load-balanced across the lag members
- Flow#3 for H2 should be load-balanced via ATE2 and ATE3
- Traffic via ATE3 should be load-balanced across the lag members
- Flow#4 for H4 should be load-balanced via ATE4 and ATE5
- Traffic forwarded towards ATE4 (via LAG2) should be load-balanced across the LAG members
- Flow#5 for H4 should be load-balanced via ATE4 and ATE5
- Traffic forwarded towards ATE4 (via LAG2) should be load-balanced across the LAG members
- Flow#6 for H3 should be load-balanced across the lag members via ATE3
- Flow#7 for H2 should be load-balanced via ATE2 and ATE3
- Traffic via ATE3 should be load-balanced across the lag members
- Flow#8 for H2 should be load-balanced via ATE2 and ATE3
- Traffic via ATE3 should be load-balanced across the lag members
- Flow#9 for H4 should be load-balanced via ATE4 and ATE5
- Traffic forwarded towards ATE4 (via LAG2) should be load-balanced across the LAG members
- Flow#10 for H4 should be load-balanced via ATE4 and ATE5
- Traffic forwarded towards ATE4 (via LAG2) should be load-balanced across the LAG members
- No packet loss should be observed
- Port traffic counters will be leveraged to verify the loab-balance behavior
- Configure the DUT and ATE as stated above
- Repeat the test for flow-type#11 and flow-type#12 (one at a time)
- Validations:
- The outer header destination UDP port (6080) matches a configured decap port
- The outer header destination IP of the traffic does not matches the locally configured decapsulation address(DUT-DECAP-Address), therefore it does not match the decapsulation criteria for the destination IP
- The DUT will not decapsulate the outer header. Instead, it will perform a lookup based on the outer destination IP address and forward the packets as standard IP traffic
- ATE Port 2 receives 1000000 packets
- No packet loss should be observed
- Configure the DUT and ATE as stated above
- Repeat the test for flow-type#13 and flow-type#14 (one at a time)
- Validations:
- The outer header destination IP of the traffic matches a configured decap IP address
- The outer header destination UDP port (6085) of the traffic does not matches the locally configured decapsulation port(6080), therefore it does not match the decapsulation criteria for the destination port
- The DUT should not decapsulate these packets. Packets should be dropped since no specific policy-forwarding rule exists for unmatched GUE
- The DUT decapsulation counters should not increment for this flow
- The drop counters on DUT will reflect the packets to 1000000
- These drop packets count will be reflected in DUT control-plane drop counters
- 100% packet loss should be observed on ATE Port 2
PF-1.22.4: Verify the Immediate next header's L4 fields are not considered in Load-Balancing Algorithm
- Set up the DUT and ATE as previously specified.
- For each flow type, configure a single source and destination IP address for both the inner and middle IPv4 and IPv6 headers. Specifically:
- For IPv4 flows that would typically use an H1v4 range, use IPv4prefix1/24.
- For IPv6 flows that would typically use an H1v6 range, use IPv6prefix1/64.
- For IPv4 flows that would typically use an H2v4 range, use IPv4prefix11/24.
- For IPv6 flows that would typically use an H2v6 range, use IPv6prefix11/64.
- For IPv4 flows that would typically use an H4v4 range, use IPv4prefix31/24.
- For IPv6 flows that would typically use an H4v6 range, use IPv6prefix31/64.
- Randomize the L4 source port of the inner/middle header (the header immediately following the outer header) for each flow type being tested.
- Test Execution:
- Initiate each flow type sequentially.
- Perform the applicable verification steps for each flow.
- Repeat this process for all flow types, applying the modified field as described above.
- Validation:
- Expected Outcome: The traffic should not be load-balanced; instead, it would simply forwarded along a single path.
- Port traffic counters will be leveraged to verify this behavior.
- Failure Condition: If traffic distribution is observed across multiple paths, the test fails.
PF-1.22.5: Verify the Immediate next header's L3 fields are not considered in Load-Balancing Algorithm
- Set up the DUT and ATE as previously specified.
- For each flow type, configure a single destination IP address for both the inner and middle IPv4 and IPv6 headers. Specifically:
- For IPv4 flows that would typically use an H1v4 range, use IPv4prefix1/24.
- For IPv6 flows that would typically use an H1v6 range, use IPv6prefix1/64.
- For IPv4 flows that would typically use an H2v4 range, use IPv4prefix11/24.
- For IPv6 flows that would typically use an H2v6 range, use IPv6prefix11/64.
- For IPv4 flows that would typically use an H4v4 range, use IPv4prefix31/24.
- For IPv6 flows that would typically use an H4v6 range, use IPv6prefix31/64.
- For each flow type, configure a source IP addresses for both the inner and middle IPv4 and IPv6 headers. Specifically:
- For IPv4 flows that would typically use an H1v4 addresses, continue to use the range IPv4prefix1-10/24.
- For IPv6 flows that would typically use an H1v6 addresses, continue to use the range IPv6prefix1-10/64.
- For IPv4 flows that would typically use an ATE1LO1v4 IPv4 address, use the range ATE1LO[1-10] addresses for each applicable flow-type.
- Randomize the L4 source port of the inner/middle header (the header immediately following the outer header) for each flow type being tested.
- Test Execution:
- Initiate each flow type sequentially.
- Perform the applicable verification steps for each flow.
- Repeat this process for all flow types, applying the modified field as described above.
- Validation:
- Expected Outcome: The traffic should not be load-balanced; instead, it would simply forwarded along a single path.
- Port traffic counters will be leveraged to verify this behavior.
- Failure Condition: If traffic distribution is observed across multiple paths, the test fails.
TODO: decap policy to be updated by https://github.com/openconfig/public/pull/1288
{
"network-instances": {
"network-instance": {
"config": {
"name": "DEFAULT"
},
"name": "DEFAULT",
"policy-forwarding": {
"policies": {
"policy": [
{
"config": {
"policy-id": "decap-policy"
},
"rules": {
"rule": [
{
"sequence-id": 1,
"config": {
"sequence-id": 1
},
"ipv4": {
"config": {
"destination-address-prefix-set": "dst_prefix",
"protocol": "IP_UDP"
}
},
"transport": {
"config": {
"destination-port": 6080
}
}
"action": {
"decapsulate-gue": true
},
},
]
}
}
]
}
}
}
}
}
paths:
/network-instances/network-instance/policy-forwarding/policies/policy/config/policy-id:
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/config/ipv4/config/destination-address-prefix-set:
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/config/ipv4/config/protocol:
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/transport/config/destination-port:
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/action/decapsulate-gue:
# telemetry
/interfaces/interface/state/counters/out-pkts:
/interfaces/interface/state/counters/out-unicast-pkts:
/components/component/integrated-circuit/pipeline-counters/control-plane-traffic/state/dropped-bytes-aggregate:
/components/component/integrated-circuit/pipeline-counters/control-plane-traffic/state/dropped-aggregate:
rpcs:
gnmi:
gNMI.Set:
union_replace: true
replace: true
gNMI.Subscribe:
on_change: true
- Specify the minimum DUT-type:
- FFF - fixed form factor