Skip to content

Commit c25cb5b

Browse files
committed
FNT Readme for GUEv1 Double Decap
1 parent 9eecdc6 commit c25cb5b

File tree

3 files changed

+195
-0
lines changed

3 files changed

+195
-0
lines changed
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
# PF-1.25: Double GUEv1 Decapsulation for Overlay Probing
2+
3+
## Summary
4+
5+
This test verifies the functionality of double decapsulation for Generic UDP Encapsulation traffic: `[Outer_IP_header][UDP][Middle_IP_header][UDP][Inner_IP_header][PAYLOAD]`.
6+
7+
The test validates that the DUT performs the following actions:
8+
* Decapsulate the outer (UDPoIPv6) headers of GUE packets matching the configured decap criteria (destination IP range and UDP port).
9+
* Decapsulate the middle (UDPoIPv6) headers of the resulting packet.
10+
* Perform a Longest Prefix Match (LPM) lookup on the inner IP header and forward the packet towards the destination.
11+
* Ensure the packet arrives at the destination as `[Inner_IP_header][PAYLOAD]`.
12+
* Support these operations potentially via sequential VRF lookups or a single pipeline operation if supported by the vendor.
13+
* Performance caveats are acceptable as this is for probing traffic.
14+
15+
## Procedure
16+
17+
### Test environment setup
18+
19+
* ATE Port 1 is connected to the DUT ingress port.
20+
* ATE Port 2 is connected to the DUT egress port.
21+
22+
```mermaid
23+
graph LR;
24+
A[ATE:Port1] --Ingress (Double Encap)--> B[DUT];
25+
B --Egress (Decapped)--> C[ATE:Port2];
26+
```
27+
28+
### ATE Configuration
29+
30+
* **ATE Port 1**: Generates double-GUE-encapsulated traffic.
31+
* **ATE Port 2**: Receives decapped inner traffic.
32+
33+
| Flow Type | Header Layer | Source IP | Destination IP | UDP Port | DSCP | TTL |
34+
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
35+
| **Flow Type #1 (IPv6/IPv6/IPv4)** | Outer IP | ATE-P1-IP | DECAP-DST-OUTER | 6081 | 35 | 70 |
36+
| | Middle IP | IPV6-MID-SRC | DECAP-DST-INNER | 6081 | 32 | 60 |
37+
| | Inner IP | IPV6-SRC-HOST | IPV4-DST-HOST | N/A | 20 | 50 |
38+
| **Flow Type #2 (IPv6/IPv6/IPv6)** | Outer IP | ATE-P1-IP | DECAP-DST-OUTER | 6081 | 35 | 70 |
39+
| | Middle IP | IPV6-MID-SRC | DECAP-DST-INNER | 6081 | 32 | 60 |
40+
| | Inner IP | IPV6-SRC-HOST | IPV6-DST-HOST | N/A | 20 | 50 |
41+
42+
### DUT Configuration
43+
44+
1. **Interfaces**: Configure DUT ports as singleton IP interfaces.
45+
2. **GUE Decapsulation (Double)**:
46+
* Configure a policy to match packets destined to `DECAP-DST-OUTER` on UDP port `6081` and perform decapsulation.
47+
* Configure a secondary policy (or the same policy applied to a resulting VRF/pipeline stage) to match packets destined to `DECAP-DST-INNER` on UDP port `6081` and perform decapsulation.
48+
* Configure BGP for `IPV4-DST-HOST` and `IPV6-DST-HOST` towards ATE Port 2.
49+
* **Optional**: Configure a "Double Decap" VRF if the vendor implementation requires sequential decap across VRFs.
50+
51+
### Test Procedure
52+
53+
#### PF-1.25.1: Double GUE Decapsulation of IPv4 Traffic
54+
* Push DUT configuration.
55+
* Initiate **Flow Type #1** from ATE Port 1.
56+
* **Verification**:
57+
* DUT decapsulates the outer header.
58+
* DUT decapsulates the middle header.
59+
* DUT performs LPM on the inner destination `IPV4-DST-HOST`.
60+
* ATE Port 2 receives the packet as `[Inner_IP][Payload]`.
61+
* Verify that the inner TTL is decremented by 1 (or as per forwarding logic) and inner DSCP is preserved.
62+
* No packet loss observed.
63+
64+
#### PF-1.25.2: Double GUE Decapsulation with IPv6 Inner Payload
65+
* Configure Flow Type #2 with an IPv6 inner header.
66+
* Initiate traffic.
67+
* **Verification**:
68+
* DUT successfully decapsulates both GUE layers and forwards the inner IPv6 packet.
69+
70+
#### PF-1.25.3: Negative - Middle Header UDP Port Mismatch
71+
* Initiate traffic where the outer header matches but the middle header has an unconfigured UDP port (e.g., 6085).
72+
* **Verification**:
73+
* DUT may decapsulate the outer header but should drop the packet (or forward as-is if no other rules match) after failing to match the middle decap criteria.
74+
* 100% packet loss (or failed decap) on ATE Port 2.
75+
76+
## Canonical OC
77+
78+
*Note: As of this FNT draft, the OpenConfig model for sequential decapsulation may require applying policies across multiple network instances or sequence IDs.*
79+
80+
```json
81+
{
82+
"network-instances": {
83+
"network-instance": [
84+
{
85+
"name": "DEFAULT",
86+
"policy-forwarding": {
87+
"policies": {
88+
"policy": [
89+
{
90+
"policy-id": "outer-decap-policy",
91+
"rules": {
92+
"rule": [
93+
{
94+
"sequence-id": 1,
95+
"ipv4": {
96+
"config": {
97+
"protocol": "IP_UDP",
98+
"destination-address": "192.0.2.1/32"
99+
}
100+
},
101+
"transport": {
102+
"config": {
103+
"destination-port": 6081
104+
}
105+
},
106+
"action": {
107+
"config": {
108+
"decapsulate-gue": true,
109+
"network-instance": "DECAP_VRF"
110+
}
111+
}
112+
}
113+
]
114+
}
115+
}
116+
]
117+
}
118+
}
119+
},
120+
{
121+
"name": "DECAP_VRF",
122+
"policy-forwarding": {
123+
"policies": {
124+
"policy": [
125+
{
126+
"policy-id": "inner-decap-policy",
127+
"rules": {
128+
"rule": [
129+
{
130+
"sequence-id": 1,
131+
"ipv4": {
132+
"config": {
133+
"protocol": "IP_UDP",
134+
"destination-address": "192.0.2.2/32"
135+
}
136+
},
137+
"transport": {
138+
"config": {
139+
"destination-port": 6081
140+
}
141+
},
142+
"action": {
143+
"config": {
144+
"decapsulate-gue": true,
145+
"network-instance": "DEFAULT"
146+
}
147+
}
148+
}
149+
]
150+
}
151+
}
152+
]
153+
}
154+
}
155+
}
156+
]
157+
}
158+
}
159+
```
160+
161+
## OpenConfig Path and RPC Coverage
162+
163+
```yaml
164+
paths:
165+
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/ipv4/config/destination-address:
166+
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/transport/config/destination-port:
167+
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/action/config/decapsulate-gue:
168+
/network-instances/network-instance/policy-forwarding/policies/policy/rules/rule/action/config/network-instance:
169+
170+
rpcs:
171+
gnmi:
172+
gNMI.Set:
173+
union_replace: true
174+
gNMI.Subscribe:
175+
on_change: true
176+
```
177+
178+
## Required DUT Platform
179+
180+
* FFF
181+
* MFF
182+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# proto-file: github.com/openconfig/featureprofiles/proto/metadata.proto
2+
# proto-message: Metadata
3+
4+
uuid: "a1b2c3d4-e5f6-4a5b-8c9d-0123456789ab"
5+
plan_id: "PF-1.25"
6+
description: "Double GUEv1 Decapsulation for Overlay Probing"
7+
testbed: TESTBED_DUT_ATE_2LINKS

testregistry.textproto

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,12 @@ test: {
629629
readme: "https://github.com/openconfig/featureprofiles/blob/main/feature/policy_forwarding/ethomplsogre/otg_tests/encap_decap_gre/README.md"
630630
exec: " "
631631
}
632+
test: {
633+
id: "PF-1.25"
634+
description: "Double GUE Decapsulation"
635+
readme: "https://github.com/openconfig/featureprofiles/blob/main/feature/policy_forwarding/otg_tests/double_gue_decap/README.md"
636+
exec: " "
637+
}
632638
test: {
633639
id: "PLT-1.1"
634640
description: "Interface breakout Test"

0 commit comments

Comments
 (0)