diff --git a/neutron/agent/linux/ip_lib.py b/neutron/agent/linux/ip_lib.py index cf36df28f3c..7e008b67e11 100644 --- a/neutron/agent/linux/ip_lib.py +++ b/neutron/agent/linux/ip_lib.py @@ -499,6 +499,10 @@ class IpLinkCommand(IpDeviceCommandBase): def alias(self): return self.attributes.get('alias') + @property + def link_kind(self): + return self.attributes.get('link_kind') + @property def attributes(self): return privileged.get_link_attributes(self.name, diff --git a/neutron/privileged/agent/linux/ip_lib.py b/neutron/privileged/agent/linux/ip_lib.py index f0c787b0c65..65122b32ea3 100644 --- a/neutron/privileged/agent/linux/ip_lib.py +++ b/neutron/privileged/agent/linux/ip_lib.py @@ -394,7 +394,8 @@ def get_link_attributes(device, namespace): 'brd': link.get_attr('IFLA_BROADCAST'), 'link/ether': link.get_attr('IFLA_ADDRESS'), 'alias': link.get_attr('IFLA_IFALIAS'), - 'allmulticast': bool(link['flags'] & ifinfmsg.IFF_ALLMULTI) + 'allmulticast': bool(link['flags'] & ifinfmsg.IFF_ALLMULTI), + 'link_kind': link.get_nested('IFLA_LINKINFO', 'IFLA_INFO_KIND') } diff --git a/neutron/tests/functional/privileged/agent/linux/test_ip_lib.py b/neutron/tests/functional/privileged/agent/linux/test_ip_lib.py index 20d8b770f24..06780399b47 100644 --- a/neutron/tests/functional/privileged/agent/linux/test_ip_lib.py +++ b/neutron/tests/functional/privileged/agent/linux/test_ip_lib.py @@ -592,3 +592,23 @@ class RouteTestCase(functional_base.BaseSudoTestCase): priv_ip_lib.add_ip_route(self.namespace, None, ip_version, device=self.device_name, via=_ip) self._check_gateway(_ip) + + +class GetLinkAttributesTestCase(functional_base.BaseSudoTestCase): + + def setUp(self): + super(GetLinkAttributesTestCase, self).setUp() + self.namespace = self.useFixture(net_helpers.NamespaceFixture()).name + self.device_name = 'test_device' + ip_lib.IPWrapper(self.namespace).add_dummy(self.device_name) + self.device = ip_lib.IPDevice(self.device_name, self.namespace) + self.pyroute_dev = priv_ip_lib.get_link_devices( + self.namespace, ifname=self.device_name) + self.assertEqual(1, len(self.pyroute_dev)) + self.pyroute_dev = self.pyroute_dev[0] + + def test_get_link_attribute_kind(self): + ifla_linkinfo = ip_lib.get_attr(self.pyroute_dev, 'IFLA_LINKINFO') + ifla_link_kind = ip_lib.get_attr(ifla_linkinfo, 'IFLA_INFO_KIND') + self.assertEqual('dummy', ifla_link_kind) + self.assertEqual(ifla_link_kind, self.device.link.link_kind)