Exemplo n.º 1
0
 def setUp(self):
     super(TestDvrFipNs, self).setUp()
     self.conf = mock.Mock()
     self.conf.state_path = cfg.CONF.state_path
     self.driver = mock.Mock()
     self.driver.DEV_NAME_LEN = 14
     self.net_id = _uuid()
     self.fip_ns = dvr_fip_ns.FipNamespace(self.net_id,
                                           self.conf,
                                           self.driver,
                                           use_ipv6=True)
Exemplo n.º 2
0
 def setUp(self):
     super(TestDvrFipNs, self).setUp()
     self.conf = mock.Mock()
     self.conf.state_path = '/tmp'
     self.driver = mock.Mock()
     self.driver.DEV_NAME_LEN = 14
     self.net_id = _uuid()
     self.fip_ns = dvr_fip_ns.FipNamespace(self.net_id,
                                           self.conf,
                                           self.driver,
                                           mock.sentinel.root_helper,
                                           use_ipv6=True)
Exemplo n.º 3
0
    def get_fip_ns(self, ext_net_id):
        # TODO(Carl) is this necessary?  Code that this replaced was careful to
        # convert these to string like this so I preserved that.
        ext_net_id = str(ext_net_id)

        fip_ns = self._fip_namespaces.get(ext_net_id)
        if fip_ns and not fip_ns.destroyed:
            return fip_ns

        fip_ns = dvr_fip_ns.FipNamespace(ext_net_id, self.conf, self.driver,
                                         self.use_ipv6)
        self._fip_namespaces[ext_net_id] = fip_ns

        return fip_ns
Exemplo n.º 4
0
 def setUp(self):
     super(TestDvrFipNs, self).setUp()
     self.conf = mock.Mock()
     self.conf.state_path = cfg.CONF.state_path
     self.driver = mock.Mock()
     self.driver.DEV_NAME_LEN = 14
     self.net_id = _uuid()
     self.fip_ns = dvr_fip_ns.FipNamespace(self.net_id,
                                           self.conf,
                                           self.driver,
                                           use_ipv6=True)
     self.lladdr = "fe80::f816:3eff:fe5f:9d67"
     get_ipv6_lladdr = mock.patch("neutron.agent.linux.ip_lib."
                                  "get_ipv6_lladdr").start()
     get_ipv6_lladdr.return_value = "%s/64" % self.lladdr
Exemplo n.º 5
0
    def test_dvr_router_fips_stale_gw_port(self):
        self.agent.conf.agent_mode = 'dvr'

        # Create the router with external net
        dvr_router_kwargs = {
            'ip_address': '19.4.4.3',
            'subnet_cidr': '19.4.4.0/24',
            'gateway_ip': '19.4.4.1',
            'gateway_mac': 'ca:fe:de:ab:cd:ef'
        }
        router_info = self.generate_dvr_router_info(**dvr_router_kwargs)
        external_gw_port = router_info['gw_port']
        ext_net_id = router_info['_floatingips'][0]['floating_network_id']
        self.mock_plugin_api.get_external_network_id.return_value(ext_net_id)

        # Create the fip namespace up front
        stale_fip_ns = dvr_fip_ns.FipNamespace(ext_net_id, self.agent.conf,
                                               self.agent.driver,
                                               self.agent.use_ipv6)
        stale_fip_ns.create()

        # Add a stale fg port to the namespace
        fixed_ip = external_gw_port['fixed_ips'][0]
        float_subnet = external_gw_port['subnets'][0]
        fip_gw_port_ip = str(netaddr.IPAddress(fixed_ip['ip_address']) + 10)
        prefixlen = netaddr.IPNetwork(float_subnet['cidr']).prefixlen
        stale_agent_gw_port = {
            'subnets': [{
                'cidr': float_subnet['cidr'],
                'gateway_ip': float_subnet['gateway_ip'],
                'id': fixed_ip['subnet_id']
            }],
            'network_id':
            external_gw_port['network_id'],
            'device_owner':
            lib_constants.DEVICE_OWNER_AGENT_GW,
            'mac_address':
            'fa:16:3e:80:8f:89',
            portbindings.HOST_ID:
            self.agent.conf.host,
            'fixed_ips': [{
                'subnet_id': fixed_ip['subnet_id'],
                'ip_address': fip_gw_port_ip,
                'prefixlen': prefixlen
            }],
            'id':
            framework._uuid(),
            'device_id':
            framework._uuid()
        }
        stale_fip_ns.create_gateway_port(stale_agent_gw_port)

        stale_dev_exists = self.device_exists_with_ips_and_mac(
            stale_agent_gw_port, stale_fip_ns.get_ext_device_name,
            stale_fip_ns.get_name())
        self.assertTrue(stale_dev_exists)

        # Create the router, this shouldn't allow the duplicate port to stay
        router = self.manage_router(self.agent, router_info)

        # Assert the device no longer exists
        stale_dev_exists = self.device_exists_with_ips_and_mac(
            stale_agent_gw_port, stale_fip_ns.get_ext_device_name,
            stale_fip_ns.get_name())
        self.assertFalse(stale_dev_exists)

        # Validate things are looking good and clean up
        self._validate_fips_for_external_network(router,
                                                 router.fip_ns.get_name())
        ext_gateway_port = router_info['gw_port']
        self._delete_router(self.agent, router.router_id)
        self._assert_fip_namespace_deleted(ext_gateway_port)