napalm-automation / napalm-junos

Apache License 2.0
22 stars 42 forks source link

JUNOS get_mac_address_table() fails on '*' MAC address #141

Closed stiltzkin10 closed 7 years ago

stiltzkin10 commented 7 years ago

Description of Issue/Question

get_mac_address_table() fails when JUNOS return '*' as the MAC address.

XXXXX@XXXXX> show ethernet-switching table Ethernet-switching table: 3 entries, 1 learned, 0 persistent entries VLAN MAC address Type Age Interfaces client201 * Flood - All-members client201 b8:27:eb:04:ff:a2 Learn 0 ge-0/0/0.0 default 54:e0:32:30:87:01 Static - Router

from napalm import get_network_driver

driver = get_network_driver('junos')

device = driver('XXXXX', 'XXXXX', 'XXXXX') device.open() print device.get_facts() print device.get_mac_address_table()

{u'os_version': u'14.1X53-D40.8', u'uptime': 7862760, u'interface_list': ['ge-0/0/0', 'ge-0/0/1', 'ge-0/0/2', 'ge-0/0/3', 'ge-0/0/4', 'ge-0/0/5', 'ge-0/0/6', 'ge-0/0/7', 'ge-0/0/8', 'ge-0/0/9', 'ge-0/0/10', 'ge-0/0/11', 'ge-0/0/12', 'ge-0/0/13', 'ge-0/0/14', 'ge-0/0/15', 'ge-0/0/16', 'ge-0/0/17', 'ge-0/0/18', 'ge-0/0/19', 'ge-0/0/20', 'ge-0/0/21', 'ge-0/0/22', 'ge-0/0/23', 'ge-0/0/24', 'ge-0/0/25', 'ge-0/0/26', 'ge-0/0/27', 'ge-0/0/28', 'ge-0/0/29', 'ge-0/0/30', 'ge-0/0/31', 'ge-0/0/32', 'ge-0/0/33', 'ge-0/0/34', 'ge-0/0/35', 'ge-0/0/36', 'ge-0/0/37', 'ge-0/0/38', 'ge-0/0/39', 'ge-0/0/40', 'ge-0/0/41', 'ge-0/0/42', 'ge-0/0/43', 'ge-0/0/44', 'ge-0/0/45', 'ge-0/0/46', 'ge-0/0/47', 'xe-0/1/0', '.local.', 'vcp-0', 'vcp-1', 'bme0', 'dsc', 'gre', 'ipip', 'jsrv', 'lo0', 'lsi', 'me0', 'mtun', 'pimd', 'pime', 'tap', 'vlan', 'vme'], u'vendor': u'Juniper', u'serial_number': u'XXXXX', u'model': u'EX4200-48T', u'hostname': u'XXXXX', u'fqdn': u'XXXXX'} Traceback (most recent call last): File "./test2.py", line 12, in pprint(device.get_mac_address_table()) File "/usr/lib/python2.7/site-packages/napalm_junos/junos.py", line 988, in get_mac_address_table mac_entry['mac'] = napalm_base.helpers.mac(mac) File "/usr/lib/python2.7/site-packages/napalm_base/helpers.py", line 219, in mac return py23_compat.text_type(EUI(raw, dialect=_MACFormat)) File "/usr/lib/python2.7/site-packages/netaddr/eui/init.py", line 387, in init self.value = addr File "/usr/lib/python2.7/site-packages/netaddr/eui/init.py", line 437, in _set_value % value) netaddr.core.AddrFormatError: failed to detect EUI version: u'*' Segmentation fault

Did you follow the steps from https://github.com/napalm-automation/napalm#faq

[X] Yes [ ] No

Setup

napalm-junos version

(Paste verbatim output from pip freeze | grep napalm-junos between quotes below)

$ pip freeze | grep napalm-junos
napalm-junos==0.6.6

JunOS version

(Paste verbatim output from show version and haiku between quotes below)

root@XXXXX> show version and haiku 
Hostname: XXXXX
Model: ex4200-48t
Junos: 14.1X53-D40.8
JUNOS EX  Software Suite [14.1X53-D40.8]
JUNOS FIPS mode utilities [14.1X53-D40.8]
JUNOS Online Documentation [14.1X53-D40.8]
JUNOS EX 4200 Software Suite [14.1X53-D40.8]
JUNOS Web Management Platform Package [14.1X53-D40.8]

        TTL down one
        the end nearer with each hop
        little packet, poof.

{master:0}

Steps to Reproduce the Issue

Error Traceback

(Paste the complete traceback of the exception between quotes below)

{u'os_version': u'14.1X53-D40.8', u'uptime': 7862760, u'interface_list': ['ge-0/0/0', 'ge-0/0/1', 'ge-0/0/2', 'ge-0/0/3', 'ge-0/0/4', 'ge-0/0/5', 'ge-0/0/6', 'ge-0/0/7', 'ge-0/0/8', 'ge-0/0/9', 'ge-0/0/10', 'ge-0/0/11', 'ge-0/0/12', 'ge-0/0/13', 'ge-0/0/14', 'ge-0/0/15', 'ge-0/0/16', 'ge-0/0/17', 'ge-0/0/18', 'ge-0/0/19', 'ge-0/0/20', 'ge-0/0/21', 'ge-0/0/22', 'ge-0/0/23', 'ge-0/0/24', 'ge-0/0/25', 'ge-0/0/26', 'ge-0/0/27', 'ge-0/0/28', 'ge-0/0/29', 'ge-0/0/30', 'ge-0/0/31', 'ge-0/0/32', 'ge-0/0/33', 'ge-0/0/34', 'ge-0/0/35', 'ge-0/0/36', 'ge-0/0/37', 'ge-0/0/38', 'ge-0/0/39', 'ge-0/0/40', 'ge-0/0/41', 'ge-0/0/42', 'ge-0/0/43', 'ge-0/0/44', 'ge-0/0/45', 'ge-0/0/46', 'ge-0/0/47', 'xe-0/1/0', '.local.', 'vcp-0', 'vcp-1', 'bme0', 'dsc', 'gre', 'ipip', 'jsrv', 'lo0', 'lsi', 'me0', 'mtun', 'pimd', 'pime', 'tap', 'vlan', 'vme'], u'vendor': u'Juniper', u'serial_number': u'XXXXX', u'model': u'EX4200-48T', u'hostname': u'XXXXX', u'fqdn': u'XXXXX'}
Traceback (most recent call last):
  File "./test2.py", line 12, in <module>
    pprint(device.get_mac_address_table())
  File "/usr/lib/python2.7/site-packages/napalm_junos/junos.py", line 988, in get_mac_address_table
    mac_entry['mac'] = napalm_base.helpers.mac(mac)
  File "/usr/lib/python2.7/site-packages/napalm_base/helpers.py", line 219, in mac
    return py23_compat.text_type(EUI(raw, dialect=_MACFormat))
  File "/usr/lib/python2.7/site-packages/netaddr/eui/__init__.py", line 387, in __init__
    self.value = addr
  File "/usr/lib/python2.7/site-packages/netaddr/eui/__init__.py", line 437, in _set_value
    % value)
netaddr.core.AddrFormatError: failed to detect EUI version: u'*'
Segmentation fault
mirceaulinic commented 7 years ago

Closed via https://github.com/napalm-automation/napalm-junos/commit/ebc02218348c21d8e8beaf46c3f14beff1d556cf