Ejemplo n.º 1
0
 def __init__(self, plumber=None, trunk_api=None):
     self._plumber = plumber or trunk_plumber.Plumber()
     self._tapi = trunk_api or _TrunkAPI(trunk_rpc.TrunkStub())
     registry.subscribe(self.agent_port_change, local_resources.PORT_DEVICE,
                        local_events.AFTER_UPDATE)
     registry.subscribe(self.agent_port_delete, local_resources.PORT_DEVICE,
                        local_events.AFTER_DELETE)
     super(LinuxBridgeTrunkDriver, self).__init__()
Ejemplo n.º 2
0
 def test_set_port_mac(self):
     attr = self.generate_device_details()
     self.manage_device(attr)
     plumber = trunk_plumber.Plumber(namespace=attr.namespace)
     # force it to return name of above
     plumber._get_tap_device_name = lambda x: attr.name
     new_mac = utils.get_random_mac('fa:16:3e:00:00:00'.split(':'))
     self.assertTrue(plumber.set_port_mac('port_id', new_mac))
     self.assertFalse(plumber.set_port_mac('port_id', new_mac))
     new_mac = utils.get_random_mac('fa:16:3e:00:00:00'.split(':'))
     self.assertTrue(plumber.set_port_mac('port_id', new_mac))
     self.assertFalse(plumber.set_port_mac('port_id', new_mac))
Ejemplo n.º 3
0
 def setUp(self):
     self.plumber = trunk_plumber.Plumber()
     self.get_tap_device_name = mock.patch.object(
         self.plumber, '_get_tap_device_name',
         return_value='devname').start()
     self.trunk = trunk.Trunk()
     self.trunk.port_id = uuidutils.generate_uuid()
     self.trunk.sub_ports = []
     self.device_exists = mock.patch.object(trunk_plumber.ip_lib,
                                            'device_exists').start()
     self.device_exists.return_value = True
     ipwrap = mock.patch.object(trunk_plumber.ip_lib, 'IPWrapper').start()
     ipwrap.return_value.netns.execute.return_value = IP_LINK_OUTPUT
     super(PlumberTestCase, self).setUp()
Ejemplo n.º 4
0
 def setUp(self):
     super(LinuxBridgeTrunkDriverTestCase, self).setUp()
     self.plumber = mock.create_autospec(trunk_plumber.Plumber())
     self.stub = mock.create_autospec(driver.trunk_rpc.TrunkStub())
     self.tapi = mock.create_autospec(driver._TrunkAPI(self.stub))
     self.lbd = driver.LinuxBridgeTrunkDriver(self.plumber, self.tapi)
     self.trunk = trunk.Trunk(id=uuidutils.generate_uuid(),
                              port_id=uuidutils.generate_uuid(),
                              tenant_id=uuidutils.generate_uuid())
     self.subports = [trunk.SubPort(id=uuidutils.generate_uuid(),
                                    port_id=uuidutils.generate_uuid(),
                                    segmentation_type='vlan',
                                    trunk_id=self.trunk.id,
                                    segmentation_id=i)
                      for i in range(20)]
     self.trunk.sub_ports = self.subports
Ejemplo n.º 5
0
 def test_vlan_QinQ_subinterfaces(self):
     # the trunk model does not support this right now, but this is to
     # ensure the plumber on the agent side doesn't explode in their
     # presence in case an operator does something fancy or we have a
     # race where a trunk's parent port is converted to a subport while
     # the agent is offline.
     attr = self.generate_device_details()
     device = self.manage_device(attr)
     devname = device.name
     plumber = trunk_plumber.Plumber(namespace=attr.namespace)
     for i in range(20):
         plumber._create_vlan_subint(devname, 'vtest-%s' % i, i)
         plumber._create_vlan_subint('vtest-%s' % i, 'qinq-%s' % i, 2)
     top_level = {('vtest-%s' % i, i) for i in range(20)}
     for i in range(20):
         # as we iterate, we delete a vlan from each dev and ensure it
         # didn't break the top-level vlans
         self.assertEqual({('qinq-%s' % i, 2)},
                          plumber._get_vlan_children('vtest-%s' % i))
         plumber._safe_delete_device('qinq-%s' % i)
         self.assertEqual(set(), plumber._get_vlan_children('vtest-%i' % i))
         self.assertEqual(top_level, plumber._get_vlan_children(devname))
Ejemplo n.º 6
0
    def test_vlan_subinterfaces(self):
        attr = self.generate_device_details()
        device = self.manage_device(attr)
        devname = device.name
        plumber = trunk_plumber.Plumber(namespace=attr.namespace)
        for i in range(20):
            subname = 'vtest-%s' % i
            plumber._create_vlan_subint(devname, subname, i)
            # ensure no addresses were assigned (e.g. ipv6)
            vlan_int = ip_lib.IPDevice(subname, namespace=attr.namespace)
            self.assertFalse(vlan_int.addr.list())
        children = plumber._get_vlan_children(devname)
        expected = {('vtest-%s' % i, i) for i in range(20)}
        self.assertEqual(expected, children)

        # delete one
        plumber._safe_delete_device('vtest-19')
        children = plumber._get_vlan_children(devname)
        expected = {('vtest-%s' % i, i) for i in range(19)}
        self.assertEqual(expected, children)
        # ensure they are removed by parent removal
        self._safe_delete_device(device)
        self.assertFalse(plumber._get_vlan_children(devname))
Ejemplo n.º 7
0
    def test_ensure_trunk_subports(self):
        attr = self.generate_device_details()
        device = self.manage_device(attr)
        devname = device.name
        plumber = trunk_plumber.Plumber(namespace=attr.namespace)
        plumber._trunk_device_name = lambda x: devname
        trunk_obj = self._gen_trunk()
        plumber.ensure_trunk_subports(trunk_obj)
        # ensure no mutation the second time
        with mock.patch.object(plumber, '_safe_delete_device',
                               side_effect=RuntimeError()):
            plumber.ensure_trunk_subports(trunk_obj)

        while trunk_obj.sub_ports:
            # drain down the sub-ports and make sure it keeps
            # them equal
            trunk_obj.sub_ports.pop()
            plumber.ensure_trunk_subports(trunk_obj)
            expected = {(plumber._get_tap_device_name(sp.port_id),
                         sp.segmentation_id)
                        for sp in trunk_obj.sub_ports}
            wired = plumber._get_vlan_children(devname)
            self.assertEqual(expected, wired)
Ejemplo n.º 8
0
 def __init__(self, plumber=None, trunk_api=None):
     self._plumber = plumber or trunk_plumber.Plumber()
     self._tapi = trunk_api or _TrunkAPI(trunk_rpc.TrunkStub())
     super(LinuxBridgeTrunkDriver, self).__init__()