Files
charm-magpie/lacp_decoder.py
Vladimir Grevtsev 1fcc024555 Adding LACP troubleshooting section
Extending Magpie's README with LACP troubleshooting
information, tips, and LACP status decoder script.

Also fetched latest release-tools boilerplate [0].

[0]: https://github.com/openstack-charmers/release-tools/tree/master/global/source-zaza

Change-Id: Ib030d188b8763e27c85ee3ef2f283c4bf05f3141
2020-12-16 15:13:50 +01:00

89 lines
2.4 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
def status_decoder(status):
decoded_status = [(status >> bit) & 1 for bit in range(8 - 1, -1, -1)]
decoded_status.reverse()
return decoded_status
def main(args):
try:
port_state = int(args.port_state)
except (TypeError, ValueError):
raise Exception('port_state has to be integer')
if args.second_port_state:
try:
second_port_state = int(args.second_port_state)
except (TypeError, ValueError):
raise Exception('second_port_state has to be integer')
else:
second_port_state = None
states = {
0: {
"name": "LACP Activity",
1: "Active LACP",
0: "Passive LACP"
},
1: {
"name": "LACP Timeout",
1: "Short",
0: "Long"
},
2: {
"name": "Aggregability",
1: "Aggregatable",
0: "Individual",
},
3: {
"name": "Synchronization",
1: "Link in sync",
0: "Link out of sync"
},
4: {
"name": "Collecting",
1: "Ingress traffic: Accepting",
0: "Ingress traffic: Rejecting",
},
5: {
"name": "Distributing",
1: "Egress traffic: Sending",
0: "Egress trafic: Not sending"
},
6: {
"name": "Is Defaulted",
1: "Defaulted settings",
0: "Settings are received from LACP PDU"
},
7: {
"name": "Link Expiration",
1: "Yes",
0: "No"
}
}
status = status_decoder(port_state)
for i, entry in enumerate(status):
status_string = "{0}: {1}".format(states[i]['name'], states[i][entry])
if second_port_state:
second_status = status_decoder(second_port_state)
if entry == second_status[i]:
status_string = "(Equal for both ports) {0}".format(
status_string)
else:
status_string += " (Port 1) / {0} (Port 2)".format(
states[i][second_status[i]])
print(status_string)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("port_state")
parser.add_argument("second_port_state", nargs='?', default=None)
main(parser.parse_args())