lacp_fallback_test - openconfig/featureprofiles GitHub Wiki
This is to validate the LACP Fallback functionality on a DUT. The tests validate the following actions -
- DUT will have the LACP bundle with ATE.
- The DUT will only participate in LACP if the LACP PDU is received from the ATE.
- If the DUT doesnโt receive a LACP PDU on the bundle ports until the fallback timeout period, then the DUT ports will act as an individual port.
- As soon as the DUT receives a LACP PDU on one of the bundle ports, the DUT will turn all the individual ports that are a part of the bundle into the bundle.
Verify that:
- DUT:Port[1] and DUT:Port[2] of LAG1 are sending LACP pdu
- After the LACP negotiation timer and fallback timer expire DUT:Port[1] and DUT:Port[2] are transitioned into fallback mode.
- Have ATE:Port[1],ATE:Port[2], and ATE:Port[3] as individual ports
- ATE:Port[1] IPv4 address = 10.10.11.2/27 and default gateway as VLAN10 Interface IPv4 address.
- ATE:Port[1] IPv6 address = 2001:f:b::2/64 and default gateway as VLAN10 Interface IPv6 address.
- Ensure DUT:Port[1] and DUT:Port[2] of LAG1 are already in LACP fallback state
- Send 5 packets from ATE:Port[1] to ipv4 address 10.10.11.3 and 10.10.10.1
- Send 5 packets from ATE:Port[1] to ipv6 address 2001:f:b::3 and 2001:f:a::1
Verify that:
- DUT:Ports[1] of LAG1 receives traffic.
- DUT floods traffic to 10.10.11.3 and 2001:f:b::3 to Ports[2] of LAG1 and DUT:Port[3]
- DUT forwards traffic destined to 10.10.10.1 and 2001:f:a::1 to ATE:Port[4].
- DUT:Port[1] and DUT:Port[2] of LAG1 are still sending LACP pdu
- Have ATE:Port[1],ATE:Port[2], and ATE:Port[3] as individual ports
- Ensure ATE:Port[1] doesn't have IPV4 and IPv6 address present, which were configured in test 2
- Ensure DUT:Port[1] and DUT:Port[2] are in LACP fallback state
- Send LACP pdus from ATE:Port[1]
Verify that:
- DUT:Port[1] of LAG1 receives LACP PDU.
- Ensure DUT forms LACP over DUT:Ports[LAG11] โ ATE:Ports[LAG1].
- Verify that DUT:Ports[2] of LAG1 will change its state from fallback to LACP detached
- Enable LACP on both the ports of ATE:Port[1] and ATE:Port[2].
- Ensure LACP is established between DUT:Ports[LAG11] โ ATE:Ports[LAG1].
- Stop sending LACP hello from ATE:Port[2] of LAG1 for 5 minutes.
Verify that:
- When DUT:Port[2] stops receiving consecutive 3*LACP Hello messages from ATE:Port[2], then DUT:Port[2] moves from aggregate state to the detached.
- After 5 minutes when DUT:Port[2] starts receiving the LACP PDU, the LACP LACP will be formed again between DUT:Ports[LAG1] โ ATE:Ports[LAG1].
- Enable LACP on both the ports of ATE:Port[1] and ATE:Port[2].
- Ensure LACP is established between DUT:Ports[LAG1] โ ATE:Ports[LAG1].
- Stop sending LACP hello from ATE:Port[1] and ATE:Port[2] for 5 minutes.
Verify that:
- When DUT:Port[1] and DUT:Port[2] stops receiving consecutive 3 LACP Hello messages from ATE:Port[1] and ATE:Port[2], then DUT:Port[1] and DUT:Port[2] fall out from the aggregate state to the detached state.
- Post LACP fallback timeout, the DUT:Port[1] and DUT:Port[2] are transitioned into fallback state.
- After 5 minutes when DUT:Port[1] and DUT:Port[2] start receiving the LACP PDU, the LACP will be formed again between DUT:Ports[1] and DUT:Port[2] with โ ATE:Ports[1] and ATE:Port[2].
{
"openconfig-interfaces:interfaces": {
"interface": [
{
"name": "Port-Channel100",
"config": {
"name": "Port-Channel100"
},
"openconfig-if-aggregate:aggregation": {
"config": {
"lag-type": "LACP"
},
"state": {
"lag-type": "LACP",
"lag-speed": 0
}
}
},
{
"name": "Ethernet30/1",
"config": {
"name": "Ethernet30/1"
}
},
{
"name": "Ethernet31/1",
"config": {
"name": "Ethernet31/1"
}
}
]
},
"openconfig-lacp:lacp": {
"interfaces": {
"interface": [
{
"name": "Port-Channel100",
"config": {
"name": "Port-Channel100"
},
"state": {
"name": "Port-Channel100",
"system-id-mac": "8c:01:9d:5f:da:63"
},
"members": {
"member": [
{
"interface": "Ethernet30/1",
"config": {
"interface": "Ethernet30/1"
},
"state": {
"interface": "Ethernet30/1",
"activity": "ACTIVE",
"aggregatable": true,
"collecting": false,
"distributing": false,
"oper-key": 100,
"partner-id": "00:00:00:00:00:00",
"partner-key": 0,
"partner-port-num": 0,
"port-num": 121,
"synchronization": "OUT_SYNC",
"system-id": "8c:01:9d:5f:da:63",
"timeout": "LONG",
"counters": {
"lacp-in-pkts": "1200",
"lacp-out-pkts": "3568",
"lacp-errors": "0",
"lacp-rx-errors": "0",
"lacp-tx-errors": "0",
"lacp-unknown-errors": "0"
}
}
},
{
"interface": "Ethernet31/1",
"config": {
"interface": "Ethernet31/1"
},
"state": {
"interface": "Ethernet31/1",
"activity": "ACTIVE",
"aggregatable": true,
"collecting": false,
"distributing": false,
"oper-key": 100,
"partner-id": "00:00:00:00:00:00",
"partner-key": 0,
"partner-port-num": 0,
"port-num": 125,
"synchronization": "OUT_SYNC",
"system-id": "8c:01:9d:5f:da:63",
"timeout": "LONG",
"counters": {
"lacp-in-pkts": "0",
"lacp-out-pkts": "0",
"lacp-errors": "0",
"lacp-rx-errors": "0",
"lacp-tx-errors": "0",
"lacp-unknown-errors": "0"
}
}
}
]
}
}
]
}
}
}oc_paths:
## State Paths ##
/lacp/interfaces/interface/state/name:
/lacp/interfaces/interface/members/member/state/interface:
/lacp/interfaces/interface/members/member/state/port-num:
/interfaces/interface/ethernet/state/aggregate-id:
/lacp/interfaces/interface/state/interval:
/lacp/interfaces/interface/state/fallback:
rpcs:
gnmi:
gNMI.Set:
union_replace: true
replace: true
gNMI.Subscribe:
on_change: true
- Specify the minimum DUT-type:
- FFF - Fixed Form Factor