Merge "Merge multiple constants defining linux interface maximum length"
This commit is contained in:
commit
1974244531
@ -27,7 +27,6 @@ OPTS = [
|
||||
]
|
||||
|
||||
|
||||
VETH_MAX_NAME_LENGTH = 15
|
||||
LOOPBACK_DEVNAME = 'lo'
|
||||
# NOTE(ethuleau): depend of the version of iproute2, the vlan
|
||||
# interface details vary.
|
||||
|
@ -25,6 +25,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
|
||||
@ -85,12 +86,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]
|
||||
|
||||
|
@ -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
|
||||
|
@ -78,6 +78,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
|
||||
|
@ -857,20 +857,20 @@ class OVSNeutronAgent(n_rpc.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
|
||||
|
||||
|
@ -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:
|
||||
|
@ -488,9 +488,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))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user