From e299349b3be240d799822daedfa2730fd96839d3 Mon Sep 17 00:00:00 2001 From: Cedric Brandily Date: Fri, 20 Jun 2014 16:41:22 +0200 Subject: [PATCH] Merge multiple constants defining linux interface maximum length DEVICE_NAME_MAX_LEN constant in neutron.common.constants replaces and correct multiple constants defining linux interface maximum length. Closes-Bug: #1332571 Change-Id: I63f760a21e17dcd57b3685b1e71c913d2722e097 --- neutron/agent/linux/ip_lib.py | 1 - neutron/agent/linux/utils.py | 4 ++-- neutron/common/constants.py | 3 +++ neutron/plugins/common/constants.py | 3 --- neutron/plugins/openvswitch/agent/ovs_neutron_agent.py | 6 +++--- neutron/tests/functional/agent/linux/base.py | 4 ++-- neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py | 4 ++-- 7 files changed, 12 insertions(+), 13 deletions(-) diff --git a/neutron/agent/linux/ip_lib.py b/neutron/agent/linux/ip_lib.py index c88c54c2060..11b4ad4eac9 100644 --- a/neutron/agent/linux/ip_lib.py +++ b/neutron/agent/linux/ip_lib.py @@ -28,7 +28,6 @@ OPTS = [ ] -VETH_MAX_NAME_LENGTH = 15 LOOPBACK_DEVNAME = 'lo' # NOTE(ethuleau): depend of the version of iproute2, the vlan # interface details vary. diff --git a/neutron/agent/linux/utils.py b/neutron/agent/linux/utils.py index d4ef237e56a..265a2553dc3 100644 --- a/neutron/agent/linux/utils.py +++ b/neutron/agent/linux/utils.py @@ -27,6 +27,7 @@ import tempfile from eventlet.green import subprocess from eventlet import greenthread +from neutron.common import constants from neutron.common import utils from neutron.openstack.common import excutils from neutron.openstack.common import log as logging @@ -87,12 +88,11 @@ def execute(cmd, root_helper=None, process_input=None, addl_env=None, def get_interface_mac(interface): - DEVICE_NAME_LEN = 15 MAC_START = 18 MAC_END = 24 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) info = fcntl.ioctl(s.fileno(), 0x8927, - struct.pack('256s', interface[:DEVICE_NAME_LEN])) + struct.pack('256s', interface[:constants.DEVICE_NAME_MAX_LEN])) return ''.join(['%02x:' % ord(char) for char in info[MAC_START:MAC_END]])[:-1] diff --git a/neutron/common/constants.py b/neutron/common/constants.py index cf3fb6025bc..7500cede134 100644 --- a/neutron/common/constants.py +++ b/neutron/common/constants.py @@ -119,3 +119,6 @@ IPV6_SLAAC = 'slaac' IPV6_MODES = [DHCPV6_STATEFUL, DHCPV6_STATELESS, IPV6_SLAAC] IPV6_LLA_PREFIX = 'fe80::/64' + +# Linux interface max length +DEVICE_NAME_MAX_LEN = 15 diff --git a/neutron/plugins/common/constants.py b/neutron/plugins/common/constants.py index 366945ad082..abf18507f82 100644 --- a/neutron/plugins/common/constants.py +++ b/neutron/plugins/common/constants.py @@ -80,6 +80,3 @@ TYPE_LOCAL = 'local' TYPE_VXLAN = 'vxlan' TYPE_VLAN = 'vlan' TYPE_NONE = 'none' - -# The maximum length of an interface name (in Linux) -MAX_DEV_NAME_LEN = 16 diff --git a/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py b/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py index a66d773c82c..46bdb1dfaae 100644 --- a/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py +++ b/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py @@ -866,20 +866,20 @@ class OVSNeutronAgent(rpc_compat.RpcCallback, exceed the maximum length allowed for a linux device. Longer names are hashed to help ensure uniqueness. """ - if len(prefix + name) <= ip_lib.VETH_MAX_NAME_LENGTH: + if len(prefix + name) <= q_const.DEVICE_NAME_MAX_LEN: return prefix + name # We can't just truncate because bridges may be distinguished # by an ident at the end. A hash over the name should be unique. # Leave part of the bridge name on for easier identification hashlen = 6 - namelen = ip_lib.VETH_MAX_NAME_LENGTH - len(prefix) - hashlen + namelen = q_const.DEVICE_NAME_MAX_LEN - len(prefix) - hashlen new_name = ('%(prefix)s%(truncated)s%(hash)s' % {'prefix': prefix, 'truncated': name[0:namelen], 'hash': hashlib.sha1(name).hexdigest()[0:hashlen]}) LOG.warning(_("Creating an interface named %(name)s exceeds the " "%(limit)d character limitation. It was shortened to " "%(new_name)s to fit."), - {'name': name, 'limit': ip_lib.VETH_MAX_NAME_LENGTH, + {'name': name, 'limit': q_const.DEVICE_NAME_MAX_LEN, 'new_name': new_name}) return new_name diff --git a/neutron/tests/functional/agent/linux/base.py b/neutron/tests/functional/agent/linux/base.py index c5ea717f7f7..e8c069750ac 100644 --- a/neutron/tests/functional/agent/linux/base.py +++ b/neutron/tests/functional/agent/linux/base.py @@ -17,7 +17,7 @@ import random from neutron.agent.linux import ovs_lib from neutron.agent.linux import utils -from neutron.plugins.common import constants as q_const +from neutron.common import constants as n_const from neutron.tests import base @@ -56,7 +56,7 @@ class BaseLinuxTestCase(base.BaseTestCase): :param *args *kwargs: These will be passed to the create function. """ while True: - name = self.get_rand_name(q_const.MAX_DEV_NAME_LEN, name_prefix) + name = self.get_rand_name(n_const.DEV_NAME_MAX_LEN, name_prefix) try: return creation_func(name, *args, **kwargs) except RuntimeError: diff --git a/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py b/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py index b1d2371b3b1..a3752fe0968 100644 --- a/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py +++ b/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py @@ -490,9 +490,9 @@ class TestOvsNeutronAgent(base.BaseTestCase): bridge1 = "A_REALLY_LONG_BRIDGE_NAME1" bridge2 = "A_REALLY_LONG_BRIDGE_NAME2" self.assertEqual(len(self.agent.get_veth_name('int-', bridge1)), - ip_lib.VETH_MAX_NAME_LENGTH) + n_const.DEVICE_NAME_MAX_LEN) self.assertEqual(len(self.agent.get_veth_name('int-', bridge2)), - ip_lib.VETH_MAX_NAME_LENGTH) + n_const.DEVICE_NAME_MAX_LEN) self.assertNotEqual(self.agent.get_veth_name('int-', bridge1), self.agent.get_veth_name('int-', bridge2))