Add interface.get_qinx_parent_by_name()
This commit is contained in:
@ -21,6 +21,33 @@ class NullHandler(logging.Handler):
|
|||||||
def emit(self, record):
|
def emit(self, record):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def get_qinx_parent_by_name(yaml, ifname):
|
||||||
|
""" Returns the sub-interface which matches a QinAD or QinQ outer tag, or None
|
||||||
|
if that sub-interface doesn't exist. """
|
||||||
|
|
||||||
|
if not is_qinx(yaml, ifname):
|
||||||
|
return None
|
||||||
|
qinx_iface = get_by_name(yaml, ifname)
|
||||||
|
if not qinx_iface:
|
||||||
|
return None
|
||||||
|
|
||||||
|
qinx_encap = get_encapsulation(yaml, ifname)
|
||||||
|
if not qinx_encap:
|
||||||
|
return None
|
||||||
|
|
||||||
|
for ifname, iface in yaml['interfaces'].items():
|
||||||
|
for subid, sub_iface in iface['sub-interfaces'].items():
|
||||||
|
sub_ifname = "%s.%d" % (ifname, subid)
|
||||||
|
sub_encap = get_encapsulation(yaml, sub_ifname)
|
||||||
|
if not sub_encap:
|
||||||
|
continue
|
||||||
|
if qinx_encap['dot1q'] > 0 and sub_encap['dot1q'] == qinx_encap['dot1q']:
|
||||||
|
return sub_ifname
|
||||||
|
if qinx_encap['dot1ad'] > 0 and sub_encap['dot1ad'] == qinx_encap['dot1ad']:
|
||||||
|
return sub_ifname
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_parent_by_name(yaml, ifname):
|
def get_parent_by_name(yaml, ifname):
|
||||||
""" Returns the sub-interface's parent, or None if the sub-int doesn't exist. """
|
""" Returns the sub-interface's parent, or None if the sub-int doesn't exist. """
|
||||||
if not '.' in ifname:
|
if not '.' in ifname:
|
||||||
|
@ -114,3 +114,11 @@ class TestInterfaceMethods(unittest.TestCase):
|
|||||||
def test_l3(self):
|
def test_l3(self):
|
||||||
self.assertTrue(interface.is_l3(self.cfg, "GigabitEthernet1/0/0"))
|
self.assertTrue(interface.is_l3(self.cfg, "GigabitEthernet1/0/0"))
|
||||||
self.assertFalse(interface.is_l3(self.cfg, "GigabitEthernet3/0/0"))
|
self.assertFalse(interface.is_l3(self.cfg, "GigabitEthernet3/0/0"))
|
||||||
|
|
||||||
|
def test_qinx_parent(self):
|
||||||
|
self.assertEqual(interface.get_qinx_parent_by_name(self.cfg, "GigabitEthernet1/0/1.202"), "GigabitEthernet1/0/1.200")
|
||||||
|
self.assertEqual(interface.get_qinx_parent_by_name(self.cfg, "GigabitEthernet1/0/1.203"), "GigabitEthernet1/0/1.201")
|
||||||
|
self.assertIsNone(interface.get_qinx_parent_by_name(self.cfg, "GigabitEthernet1/0/1"))
|
||||||
|
self.assertIsNone(interface.get_qinx_parent_by_name(self.cfg, "GigabitEthernet1/0/1.100"))
|
||||||
|
self.assertIsNone(interface.get_qinx_parent_by_name(self.cfg, "GigabitEthernet1/0/1.200"))
|
||||||
|
self.assertIsNone(interface.get_qinx_parent_by_name(self.cfg, "GigabitEthernet1/0/1.201"))
|
||||||
|
Reference in New Issue
Block a user