aggregate_admin_down_drain_test - openconfig/featureprofiles GitHub Wiki
- Verify that administratively disabling a LAG interface (e.g.,
Port-Channel1) via gNMI brings down associated routing protocols (eBGP and IS-IS), stops all traffic across the aggregate interface while keeping unrelated interfaces stable, and cleanly restores protocol sessions and forwarding when re-enabled.
+-------------------+
ATE Port-1 -----\ | DUT Port-1 |
ATE Port-2 ------+====| DUT Port-2 DUT | LAG: Port-Channel1 (3 Member Links)
ATE Port-3 -----/ | DUT Port-3 | IPv4: 192.0.2.0/30, IPv6: 2001:db8::/126
| |
ATE Port-4 -----------| DUT Port-4 | Standalone Transit Link
+-------------------+ IPv4: 192.0.2.4/30, IPv6: 2001:db8::4/126
- Connect ATE
Port-1to DUTPort-1, ATEPort-2to DUTPort-2, ATEPort-3to DUTPort-3, and ATEPort-4to DUTPort-4. - Configure the 3-member LAG interface (
Port-Channel1- Interface Under Test):- Configure aggregate interface
Port-Channel1on the DUT with/interfaces/interface[name=Port-Channel1]/config/typeset toiana-if-type:ieee8023adLag,/interfaces/interface[name=Port-Channel1]/aggregation/config/lag-typeset toLACP,/interfaces/interface[name=Port-Channel1]/aggregation/config/min-linksset to1, and/lacp/interfaces/interface[name=Port-Channel1]/config/lacp-modeset toACTIVE. - Assign DUT
Port-1,Port-2, andPort-3toPort-Channel1by setting/interfaces/interface[name=<DUT Port-1..Port-3>]/ethernet/config/aggregate-idtoPort-Channel1. - Configure a matching 3-port LACP (
ACTIVE) LAG on ATE (ATE Port-1,Port-2, andPort-3). - Configure dual-stack Layer 3 addressing on DUT
Port-Channel1subinterface0in theDEFAULTnetwork instance:- DUT
Port-Channel1: IPv4192.0.2.1/30(/interfaces/interface[name=Port-Channel1]/subinterfaces/subinterface[index=0]/ipv4/addresses/address[ip=192.0.2.1]/config/ip=192.0.2.1and.../config/prefix-length=30) and IPv62001:db8::1/126(/interfaces/interface[name=Port-Channel1]/subinterfaces/subinterface[index=0]/ipv6/addresses/address[ip=2001:db8::1]/config/ip=2001:db8::1and.../config/prefix-length=126). - ATE
Port-Channel1: IPv4192.0.2.2/30and IPv62001:db8::2/126.
- DUT
- Configure aggregate interface
- Configure the standalone Layer 3 transit interface (
Port-4):- Configure dual-stack Layer 3 addressing on DUT
Port-4subinterface0in theDEFAULTnetwork instance:- DUT
Port-4: IPv4192.0.2.5/30(.../ipv4/addresses/address[ip=192.0.2.5]/config/ip=192.0.2.5,prefix-length=30) and IPv62001:db8::5/126(.../ipv6/addresses/address[ip=2001:db8::5]/config/ip=2001:db8::5,prefix-length=126). - ATE
Port-4: IPv4192.0.2.6/30and IPv62001:db8::6/126.
- DUT
- Configure dual-stack Layer 3 addressing on DUT
- Establish IS-IS (
DEFAULTnetwork instance, protocol identifierISIS, nameISIS,LEVEL_2,WIDE_METRIC, Area ID49.0001):- Configure System IDs: DUT
1920.0000.2001(NET49.0001.1920.0000.2001.00), ATEPort-Channel11920.0000.2002(NET49.0001.1920.0000.2002.00), and ATEPort-41920.0000.2003(NET49.0001.1920.0000.2003.00). - Enable IS-IS (
POINT_TO_POINT, Level 2 metric10,IPV4_UNICASTandIPV6_UNICAST) on bothPort-Channel1andPort-4. - Advertise IS-IS reachability prefixes from ATE
Port-Channel1:198.18.0.0/24(IPv4, next-hop192.0.2.2) and2001:db8:2000::/64(IPv6, next-hop2001:db8::2).
- Configure System IDs: DUT
- Establish eBGP (
DEFAULTnetwork instance, protocol identifierBGP, nameBGP, DUT local AS64500) with 4 neighbors (IPV4_UNICASTandIPV6_UNICAST):- Over
Port-Channel1(ATE AS64501): IPv4 neighbor192.0.2.2(local-address192.0.2.1) and IPv6 neighbor2001:db8::2(local-address2001:db8::1). - Over
Port-4(ATE AS64502): IPv4 neighbor192.0.2.6(local-address192.0.2.5) and IPv6 neighbor2001:db8::6(local-address2001:db8::5).
- Over
- Advertise deterministic, non-overlapping route pools over eBGP:
- From ATE
Port-Channel1(192.0.2.2and2001:db8::2, AS64501), advertise 10,000 IPv4/24prefixes and 10,000 IPv6/64prefixes:-
IPv4 (
10,000prefixes):100.64.0.0/24through100.103.15.0/24(100.<64 + floor(i/256)>.<i mod 256>.0/24for$i \in [0, 9999]$ , next-hop192.0.2.2). -
IPv6 (
10,000prefixes):2001:db8:1000::/64through2001:db8:1000:270f::/64(2001:db8:1000:<hex(i)>::/64for$i \in [0, 9999]$ , next-hop2001:db8::2).
-
IPv4 (
- From ATE
Port-4(192.0.2.6and2001:db8::6, AS64502), advertise transit prefixes for reverse traffic routing:-
IPv4:
198.51.100.0/24(next-hop192.0.2.6). -
IPv6:
2001:db8:3000::/64(next-hop2001:db8::6).
-
IPv4:
- From ATE
- Step 1 - Verify via gNMI
Watch(Await) that all 4 eBGP sessions (192.0.2.2,2001:db8::2,192.0.2.6,2001:db8::6) areESTABLISHEDand IS-IS Level-2 adjacencies onPort-Channel1andPort-4areUP. Verify that BGPinstalledprefixes onPort-Channel1reach10000for IPv4 (192.0.2.2) and10000for IPv6 (2001:db8::2) via gNMI telemetry:/network-instances/network-instance[name=DEFAULT]/protocols/protocol[identifier=BGP][name=BGP]/bgp/neighbors/neighbor[neighbor-address=192.0.2.2]/afi-safis/afi-safi[afi-safi-name=IPV4_UNICAST]/state/prefixes/installed/network-instances/network-instance[name=DEFAULT]/protocols/protocol[identifier=BGP][name=BGP]/bgp/neighbors/neighbor[neighbor-address=2001:db8::2]/afi-safis/afi-safi[afi-safi-name=IPV6_UNICAST]/state/prefixes/installed
- Step 2 - Ensure IPv4 ARP and IPv6 ND resolution completes (
WaitForARP) on all ATE interfaces, then start continuous bidirectional IPv4 and IPv6 traffic flows between ATEPort-4and ATEPort-Channel1(Port-1..Port-3) at a non-congesting rate (10%of a single member link's line rate, so a single active member link can carry 100% of the traffic without congestion):-
Forward IPv4 Flow (
Port-4->Port-Channel1): Source IP198.51.100.1to all 10,000 BGP destination IPs100.64.0.1through100.103.15.1(plus IS-IS destination IP198.18.0.1). -
Reverse IPv4 Flow (
Port-Channel1->Port-4): Source IPs100.64.0.1through100.103.15.1to destination IP198.51.100.1. -
Forward IPv6 Flow (
Port-4->Port-Channel1): Source IP2001:db8:3000::1to all 10,000 BGP destination IPs2001:db8:1000:0::1through2001:db8:1000:270f::1(plus IS-IS destination IP2001:db8:2000::1). -
Reverse IPv6 Flow (
Port-Channel1->Port-4): Source IPs2001:db8:1000:0::1through2001:db8:1000:270f::1to destination IP2001:db8:3000::1.
-
Forward IPv4 Flow (
- Step 3 - Verify
0%steady-state traffic loss across all flows (using gNMI counterWatch, with no static sleep wait time). - Step 4 - Administratively disable the LAG interface by setting
/interfaces/interface[name=Port-Channel1]/config/enabledtofalseusinggNMI.SetwithREPLACEoption.
{
"interfaces": {
"interface": [
{
"name": "Port-Channel1",
"config": {
"enabled": false
}
}
]
}
}- Step 5 - Verify via gNMI Subscribe (
Watch) that/interfaces/interface[name=Port-Channel1]/state/admin-statusisDOWNand/interfaces/interface[name=Port-Channel1]/state/oper-statusisDOWN. - Step 6 - Verify that the associated BGP sessions on
Port-Channel1(192.0.2.2and2001:db8::2) transition toACTIVEorIDLE(notESTABLISHED) via/network-instances/network-instance[name=DEFAULT]/protocols/protocol[identifier=BGP][name=BGP]/bgp/neighbors/neighbor[neighbor-address=<192.0.2.2|2001:db8::2>]/state/session-state, while the BGP sessions onPort-4(192.0.2.6and2001:db8::6) remainESTABLISHED. - Step 7 - Verify that the IS-IS adjacency on
Port-Channel1transitions toDOWN(or is removed from the active adjacency table) via/network-instances/network-instance[name=DEFAULT]/protocols/protocol[identifier=ISIS][name=ISIS]/isis/interfaces/interface[interface-id=Port-Channel1]/levels/level[level-number=2]/adjacencies/adjacency/state/adjacency-state, while the IS-IS adjacency onPort-4remainsUP. - Step 8 - Verify that all bidirectional traffic traversing
Port-Channel1stops completely (steady-state traffic loss is100%).
- Step 1 - Re-enable the LAG interface by setting
/interfaces/interface[name=Port-Channel1]/config/enabledtotrueusinggNMI.SetwithREPLACEoption. - Step 2 - Verify via gNMI Subscribe (
Watch) that/interfaces/interface[name=Port-Channel1]/state/admin-statusisUPand/interfaces/interface[name=Port-Channel1]/state/oper-statusisUP. - Step 3 - Verify that the BGP sessions over
Port-Channel1(192.0.2.2and2001:db8::2) re-establish by checkingsession-stateisESTABLISHEDat the paths from RT-5.18.1 Step 6. - Step 4 - Verify that the IS-IS Level-2 adjacency on
Port-Channel1re-establishes by checkingadjacency-stateisUPat the path from RT-5.18.1 Step 7. - Step 5 - Verify via gNMI
Watchthat the BGPinstalledprefix count returns to10000for bothIPV4_UNICASTandIPV6_UNICASTat the paths from RT-5.18.1 Step 1. - Step 6 - Once gNMI confirms control plane and AFT convergence, verify that steady-state bidirectional traffic loss returns to
0%.
- Step 1 - Verify BGP
installedprefixes are at10000for IPv4 (192.0.2.2) and10000for IPv6 (2001:db8::2) via gNMI telemetry at the paths from RT-5.18.1 Step 1. - Step 2 - Send continuous bidirectional IPv4 and IPv6 traffic flows between ATE
Port-4and ATEPort-Channel1(Port-1..Port-3) via the advertised prefixes at10%of a single member link's line rate. - Step 3 - Administratively disable 2 out of the 3 individual member links of
Port-Channel1(DUTPort-1and DUTPort-2, leaving DUTPort-3active) by setting/interfaces/interface[name=<DUT Port-1|Port-2>]/config/enabledtofalseusinggNMI.SetwithREPLACEoption. - Step 4 - Verify via gNMI that the disabled member links (
Port-1andPort-2) transition tooper-status = DOWN, while the aggregate interface/interfaces/interface[name=Port-Channel1]/state/oper-statusremainsUP(via active memberPort-3). - Step 5 - Verify that the eBGP (
192.0.2.2,2001:db8::2) and IS-IS sessions overPort-Channel1remainESTABLISHEDandUPat their respective paths without flapping. - Step 6 - Verify that bidirectional traffic continues to flow (
0%steady-state loss) over the remaining active member link (DUT Port-3). - Step 7 - Re-enable the disabled member links (
DUT Port-1andDUT Port-2) by setting/interfaces/interface[name=<DUT Port-1|Port-2>]/config/enabledtotrueusinggNMI.SetwithREPLACEoption, verify theiroper-statusreturns toUP, and confirm traffic remains at0%loss across all 3 member links.
- Step 1 - Administratively disable the LAG interface by setting
/interfaces/interface[name=Port-Channel1]/config/enabledtofalseusinggNMI.SetwithREPLACEoption. - Step 2 - Verify via gNMI that
/interfaces/interface[name=Port-Channel1]/state/admin-statusisDOWN,/interfaces/interface[name=Port-Channel1]/state/oper-statusisDOWN, and traffic loss acrossPort-Channel1is100%. - Step 3 - Send a second idempotent
gNMI.Set(REPLACE) setting/interfaces/interface[name=Port-Channel1]/config/enabledtofalseon the already disabledPort-Channel1interface. - Step 4 - Verify that the DUT accepts the redundant
gNMI.Setconfiguration without returning any RPC errors. - Step 5 - Verify that
/interfaces/interface[name=Port-Channel1]/state/admin-statusand/interfaces/interface[name=Port-Channel1]/state/oper-statusremainDOWNand traffic remains at100%loss. - Step 6 - Restore
Port-Channel1by setting/interfaces/interface[name=Port-Channel1]/config/enabledtotrueusinggNMI.SetwithREPLACEoption, and verify via gNMI thatadmin-statusandoper-statusreturn toUP, eBGP (192.0.2.2,2001:db8::2) and IS-IS sessions re-establish toESTABLISHED/UP, BGPinstalledprefixes return to10000(IPv4 and IPv6), and steady-state traffic loss returns to0%.
RT-5.18.5 - Uplink LAG Member Retention and Inband BGP Reachability in Non-Default VRF (B2_CORE) Across Drain States
This scenario validates that uplink aggregate interfaces carrying an inband
management and control-plane VRF (B2_CORE) over a single-tagged 802.1Q VLAN
subinterface retain their LACP member port bundle assignments (aggregate-id)
and forwarding viability (forwarding-viable: true) across initial and drained
lifecycle states, preserving continuous dual-stack eBGP reachability and
bidirectional data-plane forwarding.
- Step 1 - Configure a non-default Layer 3 VRF network instance named
B2_COREand bindPort-Channel1subinterface100(Port-Channel1.100) andPort-4subinterface100(Port-4.100) toB2_CORE:-
/network-instances/network-instance[name=B2_CORE]/config/name=B2_CORE -
/network-instances/network-instance[name=B2_CORE]/config/type=L3VRF -
/network-instances/network-instance[name=B2_CORE]/interfaces/interface[id=Port-Channel1.100]/config/interface=Port-Channel1 -
/network-instances/network-instance[name=B2_CORE]/interfaces/interface[id=Port-Channel1.100]/config/subinterface=100 -
/network-instances/network-instance[name=B2_CORE]/interfaces/interface[id=Port-4.100]/config/interface=Port-4 -
/network-instances/network-instance[name=B2_CORE]/interfaces/interface[id=Port-4.100]/config/subinterface=100
-
- Step 2 - Configure single-tagged VLAN
100and dual-stack Layer 3 addressing onPort-Channel1subinterface100andPort-4subinterface100on both the DUT and ATE:- On DUT
Port-Channel1subinterface100:-
/interfaces/interface[name=Port-Channel1]/subinterfaces/subinterface[index=100]/config/index=100 -
/interfaces/interface[name=Port-Channel1]/subinterfaces/subinterface[index=100]/vlan/match/single-tagged/config/vlan-id=100 - IPv4 address
192.0.2.9/30:-
/interfaces/interface[name=Port-Channel1]/subinterfaces/subinterface[index=100]/ipv4/addresses/address[ip=192.0.2.9]/config/ip=192.0.2.9 -
/interfaces/interface[name=Port-Channel1]/subinterfaces/subinterface[index=100]/ipv4/addresses/address[ip=192.0.2.9]/config/prefix-length=30
-
- IPv6 address
2001:db8::9/126:-
/interfaces/interface[name=Port-Channel1]/subinterfaces/subinterface[index=100]/ipv6/addresses/address[ip=2001:db8::9]/config/ip=2001:db8::9 -
/interfaces/interface[name=Port-Channel1]/subinterfaces/subinterface[index=100]/ipv6/addresses/address[ip=2001:db8::9]/config/prefix-length=126
-
- Configure matching VLAN
100subinterface on ATEPort-Channel1with IPv4192.0.2.10/30and IPv62001:db8::a/126.
-
- On DUT
Port-4subinterface100:-
/interfaces/interface[name=Port-4]/subinterfaces/subinterface[index=100]/config/index=100 -
/interfaces/interface[name=Port-4]/subinterfaces/subinterface[index=100]/vlan/match/single-tagged/config/vlan-id=100 - IPv4 address
192.0.2.13/30:-
/interfaces/interface[name=Port-4]/subinterfaces/subinterface[index=100]/ipv4/addresses/address[ip=192.0.2.13]/config/ip=192.0.2.13 -
/interfaces/interface[name=Port-4]/subinterfaces/subinterface[index=100]/ipv4/addresses/address[ip=192.0.2.13]/config/prefix-length=30
-
- IPv6 address
2001:db8::d/126:-
/interfaces/interface[name=Port-4]/subinterfaces/subinterface[index=100]/ipv6/addresses/address[ip=2001:db8::d]/config/ip=2001:db8::d -
/interfaces/interface[name=Port-4]/subinterfaces/subinterface[index=100]/ipv6/addresses/address[ip=2001:db8::d]/config/prefix-length=126
-
- Configure matching VLAN
100subinterface on ATEPort-4with IPv4192.0.2.14/30and IPv62001:db8::e/126.
-
- On DUT
- Step 3 - Configure uplink LAG
Port-Channel1and ensure all 3 uplink member ports (Port-1,Port-2, andPort-3) retain their LAG membership and forwarding viability in the drained/initial uplink state by pushing viagNMI.Set(REPLACE/UNION_REPLACE):-
/interfaces/interface[name=Port-Channel1]/aggregation/config/lag-type=LACP -
/lacp/interfaces/interface[name=Port-Channel1]/config/lacp-mode=ACTIVE -
/lacp/interfaces/interface[name=Port-Channel1]/config/interval=FAST -
/interfaces/interface[name=<Port-1..Port-3>]/config/enabled=true -
/interfaces/interface[name=<Port-1..Port-3>]/ethernet/config/aggregate-id=Port-Channel1 -
/interfaces/interface[name=<Port-1..Port-3>]/config/forwarding-viable=true
-
- Step 4 - Configure dual-stack eBGP in the
B2_COREnetwork instance:- Set
/network-instances/network-instance[name=B2_CORE]/protocols/protocol[identifier=BGP][name=BGP]/bgp/global/config/as=64500. - Over
Port-Channel1.100(ATE AS64501):- Configure IPv4 neighbor
192.0.2.10(advertising prefix203.0.113.0/24) and IPv6 neighbor2001:db8::a(advertising prefix2001:db8:4000::/64).
- Configure IPv4 neighbor
- Over
Port-4.100(ATE AS64502):- Configure IPv4 neighbor
192.0.2.14(advertising prefix198.51.100.0/24) and IPv6 neighbor2001:db8::e(advertising prefix2001:db8:3000::/64).
- Configure IPv4 neighbor
- Set
{
"interfaces": {
"interface": [
{
"name": "Port-Channel1",
"config": {
"name": "Port-Channel1",
"type": "iana-if-type:ieee8023adLag",
"enabled": true
},
"aggregation": {
"config": {
"lag-type": "LACP",
"min-links": 1
}
},
"subinterfaces": {
"subinterface": [
{
"index": 100,
"config": {
"index": 100
},
"vlan": {
"match": {
"single-tagged": {
"config": {
"vlan-id": 100
}
}
}
},
"ipv4": {
"config": {
"enabled": true
},
"addresses": {
"address": [
{
"ip": "192.0.2.9",
"config": {
"ip": "192.0.2.9",
"prefix-length": 30
}
}
]
}
},
"ipv6": {
"config": {
"enabled": true
},
"addresses": {
"address": [
{
"ip": "2001:db8::9",
"config": {
"ip": "2001:db8::9",
"prefix-length": 126
}
}
]
}
}
}
]
}
},
{
"name": "Port-1",
"config": {
"name": "Port-1",
"type": "iana-if-type:ethernetCsmacd",
"enabled": true,
"forwarding-viable": true
},
"ethernet": {
"config": {
"aggregate-id": "Port-Channel1"
}
}
},
{
"name": "Port-2",
"config": {
"name": "Port-2",
"type": "iana-if-type:ethernetCsmacd",
"enabled": true,
"forwarding-viable": true
},
"ethernet": {
"config": {
"aggregate-id": "Port-Channel1"
}
}
},
{
"name": "Port-3",
"config": {
"name": "Port-3",
"type": "iana-if-type:ethernetCsmacd",
"enabled": true,
"forwarding-viable": true
},
"ethernet": {
"config": {
"aggregate-id": "Port-Channel1"
}
}
},
{
"name": "Port-4",
"config": {
"name": "Port-4",
"type": "iana-if-type:ethernetCsmacd",
"enabled": true
},
"subinterfaces": {
"subinterface": [
{
"index": 100,
"config": {
"index": 100
},
"vlan": {
"match": {
"single-tagged": {
"config": {
"vlan-id": 100
}
}
}
},
"ipv4": {
"config": {
"enabled": true
},
"addresses": {
"address": [
{
"ip": "192.0.2.13",
"config": {
"ip": "192.0.2.13",
"prefix-length": 30
}
}
]
}
},
"ipv6": {
"config": {
"enabled": true
},
"addresses": {
"address": [
{
"ip": "2001:db8::d",
"config": {
"ip": "2001:db8::d",
"prefix-length": 126
}
}
]
}
}
}
]
}
}
]
},
"lacp": {
"interfaces": {
"interface": [
{
"name": "Port-Channel1",
"config": {
"name": "Port-Channel1",
"lacp-mode": "ACTIVE",
"interval": "FAST"
}
}
]
}
},
"network-instances": {
"network-instance": [
{
"name": "B2_CORE",
"config": {
"name": "B2_CORE",
"type": "L3VRF"
},
"interfaces": {
"interface": [
{
"id": "Port-Channel1.100",
"config": {
"id": "Port-Channel1.100",
"interface": "Port-Channel1",
"subinterface": 100
}
},
{
"id": "Port-4.100",
"config": {
"id": "Port-4.100",
"interface": "Port-4",
"subinterface": 100
}
}
]
}
}
]
}
}- Step 5 - Verify via gNMI Subscribe (
WatchwithAwait) that all 3 uplink member ports (Port-1,Port-2, andPort-3) remain bound toPort-Channel1and actively participating in LACP:-
/interfaces/interface[name=<Port-1..Port-3>]/ethernet/state/aggregate-idisPort-Channel1. -
/interfaces/interface[name=<Port-1..Port-3>]/state/forwarding-viableistrue. -
/interfaces/interface[name=<Port-1..Port-3>]/state/oper-statusisUPand/interfaces/interface[name=Port-Channel1]/state/oper-statusisUP. -
/lacp/interfaces/interface[name=Port-Channel1]/members/member[interface=<Port-1..Port-3>]/state/activityisACTIVE. -
/lacp/interfaces/interface[name=Port-Channel1]/members/member[interface=<Port-1..Port-3>]/state/aggregatableistrue. -
/lacp/interfaces/interface[name=Port-Channel1]/members/member[interface=<Port-1..Port-3>]/state/collectingistrue. -
/lacp/interfaces/interface[name=Port-Channel1]/members/member[interface=<Port-1..Port-3>]/state/distributingistrue. -
/lacp/interfaces/interface[name=Port-Channel1]/members/member[interface=<Port-1..Port-3>]/state/synchronizationisIN_SYNC.
-
- Step 6 - Verify via gNMI
Watch(Await) that all 4 eBGP sessions in theB2_COREnetwork instance (192.0.2.10,2001:db8::a,192.0.2.14, and2001:db8::e) reachESTABLISHEDand thatinstalledprefixes reach1for bothIPV4_UNICASTandIPV6_UNICAST:-
/network-instances/network-instance[name=B2_CORE]/protocols/protocol[identifier=BGP][name=BGP]/bgp/neighbors/neighbor[neighbor-address=<neighbor_ip>]/state/session-stateisESTABLISHED. -
/network-instances/network-instance[name=B2_CORE]/protocols/protocol[identifier=BGP][name=BGP]/bgp/neighbors/neighbor[neighbor-address=192.0.2.10]/afi-safis/afi-safi[afi-safi-name=IPV4_UNICAST]/state/prefixes/installedis1. -
/network-instances/network-instance[name=B2_CORE]/protocols/protocol[identifier=BGP][name=BGP]/bgp/neighbors/neighbor[neighbor-address=2001:db8::a]/afi-safis/afi-safi[afi-safi-name=IPV6_UNICAST]/state/prefixes/installedis1.
-
- Step 7 - Confirm IPv4 ARP and IPv6 ND neighbor resolution (
WaitForARP) on all ATE VLAN100interfaces, then start bidirectional IPv4 and IPv6 traffic flows in theB2_COREVRF between ATEPort-4(VLAN100) and ATEPort-Channel1(VLAN100) at10%of a single member link's line rate:-
Forward IPv4 Flow (
Port-4.100->Port-Channel1.100): Source IP198.51.100.1to destination IP203.0.113.1(VLAN ID100). -
Reverse IPv4 Flow (
Port-Channel1.100->Port-4.100): Source IP203.0.113.1to destination IP198.51.100.1(VLAN ID100). -
Forward IPv6 Flow (
Port-4.100->Port-Channel1.100): Source IP2001:db8:3000::1to destination IP2001:db8:4000::1(VLAN ID100). -
Reverse IPv6 Flow (
Port-Channel1.100->Port-4.100): Source IP2001:db8:4000::1to destination IP2001:db8:3000::1(VLAN ID100).
-
Forward IPv4 Flow (
- Step 8 - Verify via gNMI counter
Watchthat steady-state packet loss is0%for all four IPv4 and IPv6 flows and that egress traffic onPort-Channel1is distributed across all 3 retained member ports (Port-1,Port-2, andPort-3).
RT-5.18.6 - Differential Member Drain Behavior: Standard Member Drain (forwarding-viable: false) vs. Retained Uplink LAG Members
This scenario validates the differential drain behavior between standard drained
member ports (where forwarding-viable is set to false to drain egress
traffic off a member port) and retained Access Core uplink member ports (where
aggregate-id is preserved and forwarding-viable remains true), verifying
that inband B2_CORE VRF eBGP sessions and bidirectional IPv4/IPv6 traffic
remain uninterrupted.
- Step 1 - Starting from the converged
B2_COREVRF topology in RT-5.18.5, apply a member drain state toPort-1while retainingPort-2andPort-3as active forwarding uplink members viagNMI.Set:-
/interfaces/interface[name=Port-1]/config/forwarding-viable=false -
/interfaces/interface[name=<Port-1..Port-3>]/ethernet/config/aggregate-id=Port-Channel1 -
/interfaces/interface[name=<Port-2|Port-3>]/config/forwarding-viable=true
-
{
"interfaces": {
"interface": [
{
"name": "Port-Channel1",
"config": {
"name": "Port-Channel1",
"type": "iana-if-type:ieee8023adLag",
"enabled": true
}
},
{
"name": "Port-1",
"config": {
"name": "Port-1",
"type": "iana-if-type:ethernetCsmacd",
"enabled": true,
"forwarding-viable": false
},
"ethernet": {
"config": {
"aggregate-id": "Port-Channel1"
}
}
}
]
}
}- Step 2 - Verify via gNMI Subscribe (
WatchwithAwait) the differential member state acrossPort-Channel1:-
/interfaces/interface[name=Port-1]/state/forwarding-viabletransitions tofalse. -
/interfaces/interface[name=Port-2]/state/forwarding-viableand/interfaces/interface[name=Port-3]/state/forwarding-viableremaintrue. -
/interfaces/interface[name=<Port-1..Port-3>]/ethernet/state/aggregate-idremainsPort-Channel1.
-
- Step 3 - Verify via gNMI that the dual-stack eBGP sessions in
B2_CORE(192.0.2.10and2001:db8::a) remainESTABLISHEDwithout flapping:/network-instances/network-instance[name=B2_CORE]/protocols/protocol[identifier=BGP][name=BGP]/bgp/neighbors/neighbor[neighbor-address=<192.0.2.10|2001:db8::a>]/state/session-state
- Step 4 - Send continuous bidirectional IPv4 and IPv6 traffic in the
B2_COREVRF between ATEPort-4.100and ATEPort-Channel1.100(using the flows from RT-5.18.5 Step 7) and verify via gNMI interface counterWatch:- DUT
Port-1transmits zero egress data-plane traffic (/interfaces/interface[name=Port-1]/state/counters/out-unicast-pktsrate is0for routed data traffic), whilePort-2andPort-3carry 100% of the egress traffic from the DUT. - Steady-state bidirectional IPv4 and IPv6 traffic loss across
B2_COREis0%.
- DUT
- Step 5 - Restore
Port-1to the retained Access Core uplink state viagNMI.Setand verify recovery:- Set
/interfaces/interface[name=Port-1]/config/forwarding-viable=true. - Verify
/interfaces/interface[name=Port-1]/state/forwarding-viablereturns totrue. - Confirm egress traffic resumes across all 3 member links (
Port-1,Port-2, andPort-3) with0%steady-state loss.
- Set
- Stop all ATE traffic flows and OTG protocols.
- Register and execute
t.Cleanup()routines to ensurePort-Channel1and all member interfaces (Port-1throughPort-4) are administratively enabled (enabled: true),forwarding-viableis restored totrue, and revert all test-specific gNMI configurations (LAG, subinterfaces,B2_COREandDEFAULTnetwork instances, BGP, and IS-IS) so the DUT is returned to its exact pre-test baseline state.
paths:
/interfaces/interface/config/enabled:
/interfaces/interface/config/forwarding-viable:
/interfaces/interface/config/name:
/interfaces/interface/config/type:
/interfaces/interface/state/admin-status:
/interfaces/interface/state/counters/in-octets:
/interfaces/interface/state/counters/in-unicast-pkts:
/interfaces/interface/state/counters/out-octets:
/interfaces/interface/state/counters/out-unicast-pkts:
/interfaces/interface/state/enabled:
/interfaces/interface/state/forwarding-viable:
/interfaces/interface/state/oper-status:
/interfaces/interface/aggregation/config/lag-type:
/interfaces/interface/aggregation/config/min-links:
/interfaces/interface/aggregation/state/lag-type:
/interfaces/interface/ethernet/config/aggregate-id:
/interfaces/interface/ethernet/state/aggregate-id:
/interfaces/interface/subinterfaces/subinterface/config/index:
/interfaces/interface/subinterfaces/subinterface/ipv4/addresses/address/config/ip:
/interfaces/interface/subinterfaces/subinterface/ipv4/addresses/address/config/prefix-length:
/interfaces/interface/subinterfaces/subinterface/ipv4/config/enabled:
/interfaces/interface/subinterfaces/subinterface/ipv6/addresses/address/config/ip:
/interfaces/interface/subinterfaces/subinterface/ipv6/addresses/address/config/prefix-length:
/interfaces/interface/subinterfaces/subinterface/ipv6/config/enabled:
/interfaces/interface/subinterfaces/subinterface/vlan/match/single-tagged/config/vlan-id:
/lacp/interfaces/interface/config/interval:
/lacp/interfaces/interface/config/lacp-mode:
/lacp/interfaces/interface/config/name:
/lacp/interfaces/interface/members/member/state/activity:
/lacp/interfaces/interface/members/member/state/aggregatable:
/lacp/interfaces/interface/members/member/state/collecting:
/lacp/interfaces/interface/members/member/state/distributing:
/lacp/interfaces/interface/members/member/state/synchronization:
/network-instances/network-instance/config/name:
/network-instances/network-instance/config/type:
/network-instances/network-instance/interfaces/interface/config/id:
/network-instances/network-instance/interfaces/interface/config/interface:
/network-instances/network-instance/interfaces/interface/config/subinterface:
/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/installed:
/network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/afi-safis/afi-safi/state/prefixes/received:
/network-instances/network-instance/protocols/protocol/isis/interfaces/interface/levels/level/adjacencies/adjacency/state/adjacency-state:
rpcs:
gnmi:
gNMI.Set:
gNMI.Subscribe:- vRX