-
Notifications
You must be signed in to change notification settings - Fork 236
Add RT-5.17: Physical Interface Drain via Admin Down test with ISIS and BGP in place specification #5808
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
navaneethyv
wants to merge
3
commits into
main
Choose a base branch
from
feature/rt-5.17-interface-admin-drain
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Add RT-5.17: Physical Interface Drain via Admin Down test with ISIS and BGP in place specification #5808
Changes from 1 commit
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
159a8ed
Add RT-5.17: Physical Interface Drain via Admin Down test specification
f70e019
Update feature/interface/singleton/otg_tests/interface_admin_drain_te…
navaneethyv 8940d94
Update feature/interface/singleton/otg_tests/interface_admin_drain_te…
navaneethyv File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
219 changes: 219 additions & 0 deletions
219
feature/interface/singleton/otg_tests/interface_admin_drain_test/README.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,219 @@ | ||
| # RT-5.17: Physical Interface Drain via Admin Down | ||
|
|
||
| ## Summary | ||
|
|
||
| Validates that setting a physical interface's administrative state (`enabled`) | ||
| to `false` via gNMI causes associated routing protocols (BGP peering sessions | ||
| and IS-IS Level-2 adjacencies) to tear down cleanly, ceases all traffic | ||
| forwarding across the drained interface, and ensures pass-through traffic | ||
| across non-drained interfaces remains completely unaffected. Furthermore, | ||
| validates that re-enabling the interface restores routing protocol sessions | ||
| and traffic forwarding. | ||
|
|
||
| ## Testbed type | ||
|
|
||
| * https://github.com/openconfig/featureprofiles/blob/main/topologies/atedut_4.testbed | ||
|
|
||
| ## Topology | ||
|
|
||
| ```text | ||
| +------------+ | ||
| ATE Port 1 --| Port 1 |-- (Drained Physical Interface Under Test) | ||
| ATE Port 2 --| Port 2 DUT |-- (Ingress Traffic Generator Port) | ||
| ATE Port 3 --| Port 3 |-- (Pass-through / Egress Port) | ||
| ATE Port 4 --| Port 4 |-- (Auxiliary Transit / Monitoring Port) | ||
| +------------+ | ||
| ``` | ||
|
|
||
| * **DUT Port 1** (Drained Interface): Connected to **ATE Port 1**. | ||
| * IPv4: `198.51.100.1/31`, IPv6: `2001:db8:1::1/127` | ||
| * ATE IPv4: `198.51.100.0/31`, ATE IPv6: `2001:db8:1::0/127` | ||
| * BGP Peer: eBGP between DUT AS `64500` and ATE AS `64501` | ||
| * IS-IS: Level-2 point-to-point adjacency | ||
| * **DUT Port 2** (Ingress Source): Connected to **ATE Port 2**. | ||
| * IPv4: `198.51.100.3/31`, IPv6: `2001:db8:1::3/127` | ||
| * ATE IPv4: `198.51.100.2/31`, ATE IPv6: `2001:db8:1::2/127` | ||
| * **DUT Port 3** (Pass-through Egress): Connected to **ATE Port 3**. | ||
| * IPv4: `198.51.100.5/31`, IPv6: `2001:db8:1::5/127` | ||
| * ATE IPv4: `198.51.100.4/31`, ATE IPv6: `2001:db8:1::4/127` | ||
| * BGP Peer: eBGP between DUT AS `64500` and ATE AS `64503` | ||
| * IS-IS: Level-2 point-to-point adjacency | ||
| * **DUT Port 4** (Auxiliary Transit): Connected to **ATE Port 4**. | ||
| * IPv4: `198.51.100.7/31`, IPv6: `2001:db8:1::7/127` | ||
| * ATE IPv4: `198.51.100.6/31`, ATE IPv6: `2001:db8:1::6/127` | ||
|
|
||
| ## Procedure | ||
|
|
||
| ### Test environment setup | ||
|
|
||
| 1. Establish Layer 3 interface configurations on DUT Ports 1, 2, 3, and 4 | ||
| with dual-stack IPv4 and IPv6 subnets. | ||
|
navaneethyv marked this conversation as resolved.
Outdated
|
||
| 2. Establish eBGP sessions: | ||
| * DUT Port 1 to ATE Port 1: ATE advertises prefix `203.0.113.0/24` (IPv4) | ||
| and `2001:db8:2::/64` (IPv6). | ||
| * DUT Port 3 to ATE Port 3: ATE advertises prefix `203.0.113.128/25` (IPv4) | ||
| and `2001:db8:3::/64` (IPv6). | ||
| 3. Establish IS-IS Level-2 point-to-point adjacencies over DUT Port 1 and | ||
| DUT Port 3 with standard metrics. | ||
| 4. Verify routing protocol session states: | ||
| * `/network-instances/network-instance[name=DEFAULT]/protocols/protocol[identifier=BGP][name=bgp]/bgp/neighbors/neighbor[neighbor-address=198.51.100.0]/state/session-state` | ||
| is `ESTABLISHED`. | ||
| * `/network-instances/network-instance[name=DEFAULT]/protocols/protocol[identifier=BGP][name=bgp]/bgp/neighbors/neighbor[neighbor-address=2001:db8:1::0]/state/session-state` | ||
| is `ESTABLISHED`. | ||
| * `/network-instances/network-instance[name=DEFAULT]/protocols/protocol[identifier=BGP][name=bgp]/bgp/neighbors/neighbor[neighbor-address=198.51.100.4]/state/session-state` | ||
| is `ESTABLISHED`. | ||
| * `/network-instances/network-instance[name=DEFAULT]/protocols/protocol[identifier=BGP][name=bgp]/bgp/neighbors/neighbor[neighbor-address=2001:db8:1::4]/state/session-state` | ||
| is `ESTABLISHED`. | ||
| * IS-IS Level-2 adjacencies on Port 1 and Port 3 are in `UP` state via | ||
| `/network-instances/network-instance[name=DEFAULT]/protocols/protocol[identifier=ISIS][name=DEFAULT]/isis/interfaces/interface/levels/level[level-number=2]/adjacencies/adjacency/state/adjacency-state`. | ||
| 5. Start continuous bidirectional traffic streams from ATE Port 2: | ||
| * **Stream 1**: Ingress ATE Port 2 -> Destination `203.0.113.10` / | ||
| `2001:db8:2::10` (Egress DUT Port 1). | ||
| * **Stream 2**: Ingress ATE Port 2 -> Destination `203.0.113.130` / | ||
| `2001:db8:3::10` (Egress DUT Port 3). | ||
| 6. Verify baseline forwarding: both Stream 1 and Stream 2 experience 0% | ||
| packet loss at line rate. | ||
|
|
||
| ### RT-5.17.1 - Physical Interface Admin Down Drain | ||
|
|
||
| 1. Administratively disable DUT Port 1 via gNMI.Set: | ||
| * Set `/interfaces/interface[name=port1]/config/enabled` to `false`. | ||
|
|
||
| #### Canonical OC | ||
|
|
||
| ```json | ||
| { | ||
| "openconfig-interfaces:interfaces": { | ||
| "interface": [ | ||
| { | ||
| "config": { | ||
| "enabled": false, | ||
| "name": "port1" | ||
| }, | ||
| "name": "port1" | ||
| } | ||
| ] | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| 2. Validate Interface State via telemetry: | ||
| * `/interfaces/interface[name=port1]/state/enabled` is `false`. | ||
| * `/interfaces/interface[name=port1]/state/admin-status` transitions to `DOWN`. | ||
| * `/interfaces/interface[name=port1]/state/oper-status` transitions to `DOWN`. | ||
|
|
||
| 3. Validate Routing Protocol Reaction: | ||
| * Verify BGP neighbor sessions over Port 1 (`198.51.100.0` and | ||
| `2001:db8:1::0`) transition away from `ESTABLISHED` (to `IDLE` or `ACTIVE`) | ||
| within the hold-time / fast-down interval. | ||
| * Verify IS-IS Level-2 adjacency on Port 1 transitions to `DOWN` and is | ||
| removed from the active IS-IS neighbor table. | ||
| * Verify BGP neighbor sessions and IS-IS adjacencies over Port 3 remain | ||
| continuously `ESTABLISHED` and `UP` without flapping. | ||
|
|
||
| 4. Validate Data Plane Drain & Pass-Through Traffic Isolation: | ||
| * Verify traffic for Stream 1 (destined to Port 1 prefixes) immediately | ||
| ceases to egress DUT Port 1; | ||
| `/interfaces/interface[name=port1]/state/counters/out-pkts` stops | ||
| incrementing. | ||
| * Verify pass-through traffic for Stream 2 (destined to Port 3 prefixes) | ||
| continues forwarding through DUT Port 3 with 0% packet loss and no rate | ||
| degradation. | ||
|
|
||
| 5. Pass/Fail Criteria: | ||
| * **Pass**: | ||
| * DUT Port 1 `admin-status` and `oper-status` are `DOWN`. | ||
| * BGP sessions and IS-IS adjacencies on Port 1 tear down. | ||
| * Forwarding on Port 1 completely ceases. | ||
| * Stream 2 on Port 3 forwards with 0% packet loss and 0 protocol flaps. | ||
| * **Fail**: | ||
| * DUT Port 1 `oper-status` remains `UP`. | ||
| * BGP or IS-IS neighbor sessions over Port 1 remain `ESTABLISHED` or `UP`. | ||
| * Packets continue to be transmitted out of Port 1. | ||
| * Pass-through traffic on Port 3 experiences packet loss or session | ||
| interruption. | ||
|
|
||
| ### RT-5.17.2 - Physical Interface Un-drain and Traffic Restoration | ||
|
|
||
| 1. Administratively re-enable DUT Port 1 via gNMI.Set: | ||
| * Set `/interfaces/interface[name=port1]/config/enabled` to `true`. | ||
|
|
||
| #### Canonical OC | ||
|
|
||
| ```json | ||
| { | ||
| "openconfig-interfaces:interfaces": { | ||
| "interface": [ | ||
| { | ||
| "config": { | ||
| "enabled": true, | ||
| "name": "port1" | ||
| }, | ||
| "name": "port1" | ||
| } | ||
| ] | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| 2. Validate Interface Operational State via telemetry: | ||
| * `/interfaces/interface[name=port1]/state/enabled` is `true`. | ||
| * `/interfaces/interface[name=port1]/state/admin-status` transitions to `UP`. | ||
| * `/interfaces/interface[name=port1]/state/oper-status` transitions to `UP`. | ||
|
|
||
| 3. Validate Routing Protocol Restoration: | ||
| * Verify BGP neighbor sessions over Port 1 (`198.51.100.0` and | ||
| `2001:db8:1::0`) re-establish to `ESTABLISHED`. | ||
| * Verify IS-IS Level-2 adjacency over Port 1 re-establishes to `UP`. | ||
| * Verify learned prefixes (`203.0.113.0/24` and `2001:db8:2::/64`) are | ||
| re-installed into the FIB. | ||
|
|
||
| 4. Validate Traffic Flow Recovery: | ||
| * Verify Stream 1 resumes line-rate forwarding across DUT Port 1 with 0% | ||
| steady-state packet loss. | ||
| * Verify Stream 2 on Port 3 remains stable with 0% packet loss. | ||
|
|
||
| 5. Pass/Fail Criteria: | ||
| * **Pass**: | ||
| * DUT Port 1 `oper-status` returns to `UP`. | ||
| * BGP neighbor sessions and IS-IS adjacencies on Port 1 return to | ||
| `ESTABLISHED` / `UP`. | ||
| * Stream 1 resumes 100% throughput with 0% steady-state packet loss. | ||
| * **Fail**: | ||
| * DUT Port 1 remains `DOWN`. | ||
| * BGP or IS-IS sessions fail to re-establish on Port 1. | ||
| * Forwarding on Port 1 fails to restore or experiences packet loss. | ||
|
|
||
| ## OpenConfig Path and RPC Coverage | ||
|
|
||
| The below yaml defines the OC paths and RPCs intended to be covered by this | ||
| test. | ||
|
|
||
| ```yaml | ||
| paths: | ||
| ## Interface configuration and operational state | ||
| /interfaces/interface/config/enabled: | ||
| /interfaces/interface/config/name: | ||
| /interfaces/interface/state/admin-status: | ||
| /interfaces/interface/state/enabled: | ||
| /interfaces/interface/state/name: | ||
| /interfaces/interface/state/oper-status: | ||
| /interfaces/interface/state/counters/in-octets: | ||
| /interfaces/interface/state/counters/in-pkts: | ||
| /interfaces/interface/state/counters/out-octets: | ||
| /interfaces/interface/state/counters/out-pkts: | ||
|
|
||
| ## Routing Protocol State (BGP & IS-IS) | ||
| /network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/state/session-state: | ||
| /network-instances/network-instance/protocols/protocol/isis/interfaces/interface/levels/level/adjacencies/adjacency/state/adjacency-state: | ||
|
|
||
| rpcs: | ||
| gnmi: | ||
| gNMI.Set: | ||
| gNMI.Subscribe: | ||
| ``` | ||
|
|
||
| ## Required DUT platform | ||
|
|
||
| * FFF | ||
| * MFF | ||
7 changes: 7 additions & 0 deletions
7
feature/interface/singleton/otg_tests/interface_admin_drain_test/metadata.textproto
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| # proto-file: third_party/openconfig/featureprofiles/proto/metadata.proto | ||
| # proto-message: Metadata | ||
|
|
||
| uuid: "a3bfb6f8-7755-445e-b91f-e68263e2c81c" | ||
| plan_id: "RT-5.17" | ||
| description: "Physical Interface Drain via Admin Down" | ||
| testbed: TESTBED_DUT_ATE_4LINKS |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.