def _parse_ipdt_output(self, output):
"""IPDT output parsing.
Parses the output of the `show ip device track` command.
:param output: the output of the command
IP Device Tracking = Enabled
IP Device Tracking Probe Count = 3
IP Device Tracking Probe Interval = 30
IP Device Tracking Probe Delay Interval = 0
-------------------------------------------------------------------
IP Address MAC Address Vlan Interface STATE
-------------------------------------------------------------------
192.168.1.12 6cec.eb68.c86f 601 GigabitEthernet1/0/14 ACTIVE
192.168.1.15 6cec.eb67.836c 601 GigabitEthernet1/0/12 ACTIVE
<snip>
Total number interfaces enabled: 47
Enabled interfaces:
Gi1/0/1, Gi1/0/2, Gi1/0/3, Gi1/0/4, Gi1/0/5, Gi1/0/6, Gi1/0/7,
<snip>
: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 any 'INACTIVE' entries, meaning that there hasn't been
# traffic from that MAC Address is has likely been unplugged.
if values[4] == 'INACTIVE':
continue
lookup.append(
{
'ip': values[0],
'mac': EUI(values[1], dialect=mac_unix_expanded),
'interface': self._shorthand_port_notation(values[3])
}
)
return sorted(lookup, key=lambda k: k['interface'])
评论列表
文章目录