Merge "Move get_inteface_by_ip from LinuxBridge class to ip_lib"
This commit is contained in:
commit
5c588003e2
|
@ -120,6 +120,12 @@ class IPWrapper(SubProcessBase):
|
||||||
|
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
|
def get_device_by_ip(self, ip):
|
||||||
|
"""Get the IPDevice from system which has ip configured."""
|
||||||
|
for device in self.get_devices():
|
||||||
|
if device.addr.list(to=ip):
|
||||||
|
return device
|
||||||
|
|
||||||
def add_tuntap(self, name, mode='tap'):
|
def add_tuntap(self, name, mode='tap'):
|
||||||
self._as_root([], 'tuntap', ('add', name, 'mode', mode))
|
self._as_root([], 'tuntap', ('add', name, 'mode', mode))
|
||||||
return IPDevice(name, namespace=self.namespace)
|
return IPDevice(name, namespace=self.namespace)
|
||||||
|
|
|
@ -78,10 +78,12 @@ class LinuxBridgeManager(object):
|
||||||
self.local_ip = cfg.CONF.VXLAN.local_ip
|
self.local_ip = cfg.CONF.VXLAN.local_ip
|
||||||
self.vxlan_mode = lconst.VXLAN_NONE
|
self.vxlan_mode = lconst.VXLAN_NONE
|
||||||
if cfg.CONF.VXLAN.enable_vxlan:
|
if cfg.CONF.VXLAN.enable_vxlan:
|
||||||
self.local_int = self.get_interface_by_ip(self.local_ip)
|
device = self.ip.get_device_by_ip(self.local_ip)
|
||||||
if self.local_int:
|
if device:
|
||||||
|
self.local_int = device.name
|
||||||
self.check_vxlan_support()
|
self.check_vxlan_support()
|
||||||
else:
|
else:
|
||||||
|
self.local_int = None
|
||||||
LOG.warning(_LW('VXLAN is enabled, a valid local_ip '
|
LOG.warning(_LW('VXLAN is enabled, a valid local_ip '
|
||||||
'must be provided'))
|
'must be provided'))
|
||||||
# Store network mapping to segments
|
# Store network mapping to segments
|
||||||
|
@ -148,11 +150,6 @@ class LinuxBridgeManager(object):
|
||||||
except OSError:
|
except OSError:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def get_interface_by_ip(self, ip):
|
|
||||||
for device in self.ip.get_devices():
|
|
||||||
if device.addr.list(to=ip):
|
|
||||||
return device.name
|
|
||||||
|
|
||||||
def get_bridge_for_tap_device(self, tap_device_name):
|
def get_bridge_for_tap_device(self, tap_device_name):
|
||||||
bridges = self.get_all_neutron_bridges()
|
bridges = self.get_all_neutron_bridges()
|
||||||
for bridge in bridges:
|
for bridge in bridges:
|
||||||
|
|
|
@ -31,6 +31,9 @@ LOG = logging.getLogger(__name__)
|
||||||
Device = collections.namedtuple('Device',
|
Device = collections.namedtuple('Device',
|
||||||
'name ip_cidrs mac_address namespace')
|
'name ip_cidrs mac_address namespace')
|
||||||
|
|
||||||
|
WRONG_IP = '0.0.0.0'
|
||||||
|
TEST_IP = '240.0.0.1'
|
||||||
|
|
||||||
|
|
||||||
class IpLibTestFramework(functional_base.BaseSudoTestCase):
|
class IpLibTestFramework(functional_base.BaseSudoTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -50,7 +53,7 @@ class IpLibTestFramework(functional_base.BaseSudoTestCase):
|
||||||
def generate_device_details(self, name=None, ip_cidrs=None,
|
def generate_device_details(self, name=None, ip_cidrs=None,
|
||||||
mac_address=None, namespace=None):
|
mac_address=None, namespace=None):
|
||||||
return Device(name or base.get_rand_name(),
|
return Device(name or base.get_rand_name(),
|
||||||
ip_cidrs or ['240.0.0.1/24'],
|
ip_cidrs or ["%s/24" % TEST_IP],
|
||||||
mac_address or
|
mac_address or
|
||||||
utils.get_random_mac('fa:16:3e:00:00:00'.split(':')),
|
utils.get_random_mac('fa:16:3e:00:00:00'.split(':')),
|
||||||
namespace or base.get_rand_name())
|
namespace or base.get_rand_name())
|
||||||
|
@ -98,6 +101,13 @@ class IpLibTestCase(IpLibTestFramework):
|
||||||
self.assertFalse(
|
self.assertFalse(
|
||||||
ip_lib.device_exists(attr.name, namespace=attr.namespace))
|
ip_lib.device_exists(attr.name, namespace=attr.namespace))
|
||||||
|
|
||||||
|
def test_ipwrapper_get_device_by_ip(self):
|
||||||
|
attr = self.generate_device_details()
|
||||||
|
self.manage_device(attr)
|
||||||
|
ip_wrapper = ip_lib.IPWrapper(namespace=attr.namespace)
|
||||||
|
self.assertEqual(attr.name, ip_wrapper.get_device_by_ip(TEST_IP).name)
|
||||||
|
self.assertIsNone(ip_wrapper.get_device_by_ip(WRONG_IP))
|
||||||
|
|
||||||
def test_device_exists_with_ips_and_mac(self):
|
def test_device_exists_with_ips_and_mac(self):
|
||||||
attr = self.generate_device_details()
|
attr = self.generate_device_details()
|
||||||
device = self.manage_device(attr)
|
device = self.manage_device(attr)
|
||||||
|
|
|
@ -46,8 +46,8 @@ class TestLinuxBridge(base.BaseTestCase):
|
||||||
super(TestLinuxBridge, self).setUp()
|
super(TestLinuxBridge, self).setUp()
|
||||||
interface_mappings = {'physnet1': 'eth1'}
|
interface_mappings = {'physnet1': 'eth1'}
|
||||||
|
|
||||||
with mock.patch.object(linuxbridge_neutron_agent.LinuxBridgeManager,
|
with mock.patch.object(ip_lib.IPWrapper,
|
||||||
'get_interface_by_ip', return_value=None):
|
'get_device_by_ip', return_value=None):
|
||||||
self.linux_bridge = linuxbridge_neutron_agent.LinuxBridgeManager(
|
self.linux_bridge = linuxbridge_neutron_agent.LinuxBridgeManager(
|
||||||
interface_mappings)
|
interface_mappings)
|
||||||
|
|
||||||
|
@ -98,8 +98,8 @@ class TestLinuxBridgeAgent(base.BaseTestCase):
|
||||||
'get_interface_mac')
|
'get_interface_mac')
|
||||||
self.get_mac = self.get_mac_p.start()
|
self.get_mac = self.get_mac_p.start()
|
||||||
self.get_mac.return_value = '00:00:00:00:00:01'
|
self.get_mac.return_value = '00:00:00:00:00:01'
|
||||||
with mock.patch.object(linuxbridge_neutron_agent.LinuxBridgeManager,
|
with mock.patch.object(ip_lib.IPWrapper,
|
||||||
'get_interface_by_ip', return_value=None):
|
'get_device_by_ip', return_value=None):
|
||||||
self.agent = linuxbridge_neutron_agent.LinuxBridgeNeutronAgentRPC(
|
self.agent = linuxbridge_neutron_agent.LinuxBridgeNeutronAgentRPC(
|
||||||
{}, 0, cfg.CONF.AGENT.quitting_rpc_timeout)
|
{}, 0, cfg.CONF.AGENT.quitting_rpc_timeout)
|
||||||
with mock.patch.object(self.agent, "daemon_loop"):
|
with mock.patch.object(self.agent, "daemon_loop"):
|
||||||
|
@ -351,8 +351,8 @@ class TestLinuxBridgeManager(base.BaseTestCase):
|
||||||
super(TestLinuxBridgeManager, self).setUp()
|
super(TestLinuxBridgeManager, self).setUp()
|
||||||
self.interface_mappings = {'physnet1': 'eth1'}
|
self.interface_mappings = {'physnet1': 'eth1'}
|
||||||
|
|
||||||
with mock.patch.object(linuxbridge_neutron_agent.LinuxBridgeManager,
|
with mock.patch.object(ip_lib.IPWrapper,
|
||||||
'get_interface_by_ip', return_value=None):
|
'get_device_by_ip', return_value=None):
|
||||||
self.lbm = linuxbridge_neutron_agent.LinuxBridgeManager(
|
self.lbm = linuxbridge_neutron_agent.LinuxBridgeManager(
|
||||||
self.interface_mappings)
|
self.interface_mappings)
|
||||||
|
|
||||||
|
@ -421,16 +421,6 @@ class TestLinuxBridgeManager(base.BaseTestCase):
|
||||||
listdir_fn.side_effect = OSError()
|
listdir_fn.side_effect = OSError()
|
||||||
self.assertEqual(self.lbm.get_tap_devices_count('br0'), 0)
|
self.assertEqual(self.lbm.get_tap_devices_count('br0'), 0)
|
||||||
|
|
||||||
def test_get_interface_by_ip(self):
|
|
||||||
with mock.patch.object(ip_lib.IPWrapper, 'get_devices') as get_dev_fn,\
|
|
||||||
mock.patch.object(ip_lib.IpAddrCommand, 'list') as ip_list_fn:
|
|
||||||
device = mock.Mock()
|
|
||||||
device.name = 'dev_name'
|
|
||||||
get_dev_fn.return_value = [device]
|
|
||||||
ip_list_fn.returnvalue = mock.Mock()
|
|
||||||
self.assertEqual(self.lbm.get_interface_by_ip(LOCAL_IP),
|
|
||||||
'dev_name')
|
|
||||||
|
|
||||||
def test_get_bridge_for_tap_device(self):
|
def test_get_bridge_for_tap_device(self):
|
||||||
with mock.patch.object(self.lbm,
|
with mock.patch.object(self.lbm,
|
||||||
"get_all_neutron_bridges") as get_all_qbr_fn,\
|
"get_all_neutron_bridges") as get_all_qbr_fn,\
|
||||||
|
@ -768,8 +758,8 @@ class TestLinuxBridgeManager(base.BaseTestCase):
|
||||||
|
|
||||||
def test_delete_vxlan_bridge_no_int_mappings(self):
|
def test_delete_vxlan_bridge_no_int_mappings(self):
|
||||||
interface_mappings = {}
|
interface_mappings = {}
|
||||||
with mock.patch.object(linuxbridge_neutron_agent.LinuxBridgeManager,
|
with mock.patch.object(ip_lib.IPWrapper,
|
||||||
'get_interface_by_ip', return_value=None):
|
'get_device_by_ip', return_value=None):
|
||||||
lbm = linuxbridge_neutron_agent.LinuxBridgeManager(
|
lbm = linuxbridge_neutron_agent.LinuxBridgeManager(
|
||||||
interface_mappings)
|
interface_mappings)
|
||||||
|
|
||||||
|
@ -930,8 +920,8 @@ class TestLinuxBridgeRpcCallbacks(base.BaseTestCase):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.agent_id = 1
|
self.agent_id = 1
|
||||||
with mock.patch.object(
|
with mock.patch.object(
|
||||||
linuxbridge_neutron_agent.LinuxBridgeManager,
|
ip_lib.IPWrapper,
|
||||||
'get_interface_by_ip', return_value=None):
|
'get_device_by_ip', return_value=None):
|
||||||
self.br_mgr = (linuxbridge_neutron_agent.
|
self.br_mgr = (linuxbridge_neutron_agent.
|
||||||
LinuxBridgeManager({'physnet1': 'eth1'}))
|
LinuxBridgeManager({'physnet1': 'eth1'}))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue