Decoding LACP Port State

It’s frustrating when the output to a show command gives exactly the information needed, but in a format which is unintelligible. So it is with the Partner Port State field in the NXOS show lacp neighbor interface command which reports the partner port state as a hexadecimal value. To help with LACP troubleshooting, here’s a quick breakdown of the port states reported on by LACP, and how they might be seen in Junos OS and NXOS.

LACP Port State

The LACP port state (also known as the actor state) field is a single byte, each bit of which is a flag indicating a particular status. In this table, mux (i.e. a multiplexer) refers to the logical unit which aggregates the links into a single logical transmitter/receiver.

The meaning of each bit is as follows:

BitNameMeaning
0LACP_ActivityDevice intends to transmit periodically in order to find potential members for the aggregate. This is toggled by mode active in the channel-group configuration on the member interfaces.
1 = Active, 0 = Passive.
1LACP_TimeoutLength of the LACP timeout.
1 = Short Timeout, 0 = Long Timeout
2AggregationWill allow the link to be aggregated.
1 = Yes, 0 = No (individual link)
3SynchronizationIndicates that the mux on the transmitting machine is in sync with what’s being advertised in the LACP frames.
1 = In sync, 0 = Not in sync
4CollectingMux is accepting traffic received on this port
1 = Yes, 0 = No
5DistributingMux is sending traffic using this port
1 = Yes, 0 = No
6DefaultedWhether the receiving mux is using default (administratively defined) parameters, if the information was received in an LACP PDU.
1 = default settings, 0 = via LACP PDU
7ExpiredIn an expired state
1 = Yes, 0 = No

Junos OS and NXOS

Junos OS users are probably smiling right now, as this should look very familiar:

Cisco users on the other hand may be weeping quietly when viewing a port-channel summary:

The partner port state is 0x3f, which is not very helpful. The good news is that looking at individual members does reveal the information in a more human-friendly format:

However, for the sake of anybody who has been sent output from show lacp neighbor interface port-channel X and wants to understand the hex value that’s displayed (0x3F in this case), it’s pretty simple.

Decode-o-matic

  • Convert hexadecimal to binary. Hexadecimal 0x3F is 00111111 in binary.
  • Flip the bits around. 00111111 becomes 11111100
  • Map the bits in this order to the table above:

Alternatively, I suppose, flip the table so that the entries run from 7 to 0 instead of 0 to 7, then you don’t have to flip the bits; either way works. In this case 0x3F indicates a link which is an active part of the aggregated interface.

Clearly what we want from a link is that bit 7 is 0 (not expired) and bits 2-5 are 1 (will aggregate, in sync, collecting, distributing).

A recent port I had trouble with was reported as partner port state 0xC7, which in binary is 11000111, which when flipped to 11100011 means:

Clearly this link was not happy, but thankfully a shut / no shut sequence was enough to revive the patient.

Happy aggregating!

Be the first to comment

Leave a Reply

Your email address will not be published.


*