def _parse_mac_address_table_output(self, output, ignore_port=None):
"""MAC Address Table parsing.
Parses the output of 'sh mac address-table' command.
:param output: the output of the command
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
All 0100.0ccc.cccc STATIC CPU
<snip>
All ffff.ffff.ffff STATIC CPU
601 000b.7866.5240 DYNAMIC Gi1/0/48
601 0013.20fe.56b4 DYNAMIC Gi1/0/35
<snip>
Total Mac Addresses for this criterion: 59
:param ignore_port: ignore this port
:return: list of dicts containing device connection metrics
"""
lookup = []
lines = [line.strip() for line in output.splitlines()]
lines.append('')
while len(lines) > 0:
line = lines.pop(0)
# Table entries will always have a '.' for the MAC address.
# If there isn't one it's not a row we care about.
if line.find('.') < 0:
continue
values = [entry for entry in line.split() if entry]
# Ignore non-physical ports
port_types = self.PORT_NOTATION.values()
if all(values[3].lower().find(port.lower()) != 0
for port in port_types):
continue
# If the ignore_port is specified and is the port in question,
# ignore it.
ignore_port = self._shorthand_port_notation(ignore_port)
if ignore_port and values[3] == ignore_port:
continue
lookup.append(
{
'mac': EUI(values[1], dialect=mac_unix_expanded),
'interface': self._shorthand_port_notation(values[3])
}
)
return sorted(lookup, key=lambda k: k['interface'])
评论列表
文章目录