Merge "Ensure that extended ethertypes still work by name"
This commit is contained in:
commit
7da7c3e1c0
|
@ -37,6 +37,7 @@ netifaces==0.10.4
|
|||
openstackdocstheme==1.18.1
|
||||
os-api-ref==1.4.0
|
||||
os-client-config==1.28.0
|
||||
os-ken==0.3.0
|
||||
os-traits==0.9.0
|
||||
oslo.concurrency==3.26.0
|
||||
oslo.config==5.2.0
|
||||
|
|
|
@ -16,6 +16,7 @@ import inspect
|
|||
import re
|
||||
|
||||
import netaddr
|
||||
from os_ken.lib.packet import ether_types
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log as logging
|
||||
from oslo_utils import netutils
|
||||
|
@ -1126,11 +1127,26 @@ def validate_subnet_service_types(service_types, valid_values=None):
|
|||
def validate_ethertype(ethertype, valid_values=None):
|
||||
"""Validates ethertype is a valid ethertype.
|
||||
|
||||
:param ethertype: Ethertype to validate
|
||||
:param ethertype: Ethertype to validate.
|
||||
:returns: None if data is a valid ethertype. Otherwise a human-readable
|
||||
message indicating that the data is not a valid ethertype.
|
||||
"""
|
||||
|
||||
if cfg.CONF.sg_filter_ethertypes:
|
||||
os_ken_ethertypes = ether_types.__dict__
|
||||
try:
|
||||
# Use the ethertype constants from os_ken with the special
|
||||
# exception of 'IPv4', which appears as 'ETH_TYPE_IP' in os_ken.
|
||||
# Be case-insensitive.
|
||||
ethertype_str = str(ethertype).upper()
|
||||
if ethertype_str == "IPV4":
|
||||
ethertype_str = "IP"
|
||||
ethertype_name = 'ETH_TYPE_' + ethertype_str
|
||||
if ethertype_name in os_ken_ethertypes:
|
||||
ethertype = os_ken_ethertypes[ethertype_name]
|
||||
except TypeError:
|
||||
# Value of ethertype cannot be coerced into a string, like None
|
||||
pass
|
||||
try:
|
||||
if isinstance(ethertype, six.string_types):
|
||||
ethertype = int(ethertype, 16)
|
||||
|
@ -1141,7 +1157,7 @@ def validate_ethertype(ethertype, valid_values=None):
|
|||
except ValueError:
|
||||
pass
|
||||
msg = _("Ethertype %s is not a two octet hexadecimal "
|
||||
"number.") % ethertype
|
||||
"number or ethertype name.") % ethertype
|
||||
LOG.debug(msg)
|
||||
return msg
|
||||
else:
|
||||
|
|
|
@ -1108,7 +1108,13 @@ class TestAttributeValidation(base.BaseTestCase):
|
|||
self.assertIsNone(validators.validate_subports(body))
|
||||
|
||||
@mock.patch('oslo_config.cfg.CONF')
|
||||
def test_validate_ethertype_valid_string(self, CONF):
|
||||
def test_validate_ethertype_valid_string_new(self, CONF):
|
||||
CONF.sg_filter_ethertypes = True
|
||||
self.assertIsNone(validators.validate_ethertype('IPv4'))
|
||||
self.assertIsNone(validators.validate_ethertype('IPv6'))
|
||||
|
||||
@mock.patch('oslo_config.cfg.CONF')
|
||||
def test_validate_ethertype_valid_string_old(self, CONF):
|
||||
CONF.sg_filter_ethertypes = False
|
||||
self.assertIsNone(validators.validate_ethertype('IPv4'))
|
||||
self.assertIsNone(validators.validate_ethertype('IPv6'))
|
||||
|
@ -1134,21 +1140,21 @@ class TestAttributeValidation(base.BaseTestCase):
|
|||
def test_validate_ethertype_extended_invalid_negative(self, CONF):
|
||||
CONF.sg_filter_ethertypes = True
|
||||
self.assertEqual(("Ethertype -16392 is not a two octet "
|
||||
"hexadecimal number."),
|
||||
"hexadecimal number or ethertype name."),
|
||||
validators.validate_ethertype('-0x4008'))
|
||||
|
||||
@mock.patch('oslo_config.cfg.CONF')
|
||||
def test_validate_ethertype_extended_invalid_nonhex(self, CONF):
|
||||
CONF.sg_filter_ethertypes = True
|
||||
self.assertEqual(("Ethertype invalid is not a two octet "
|
||||
"hexadecimal number."),
|
||||
"hexadecimal number or ethertype name."),
|
||||
validators.validate_ethertype('invalid'))
|
||||
|
||||
@mock.patch('oslo_config.cfg.CONF')
|
||||
def test_validate_ethertype_extended_invalid_toobig(self, CONF):
|
||||
CONF.sg_filter_ethertypes = True
|
||||
self.assertEqual(("Ethertype 3735928559 is not a two octet "
|
||||
"hexadecimal number."),
|
||||
"hexadecimal number or ethertype name."),
|
||||
validators.validate_ethertype('0xdeadbeef'))
|
||||
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ keystoneauth1>=3.4.0 # Apache-2.0
|
|||
netaddr>=0.7.18 # BSD
|
||||
six>=1.10.0 # MIT
|
||||
stevedore>=1.20.0 # Apache-2.0
|
||||
os-ken >= 0.3.0 # Apache-2.0
|
||||
oslo.concurrency>=3.26.0 # Apache-2.0
|
||||
oslo.config>=5.2.0 # Apache-2.0
|
||||
oslo.context>=2.19.2 # Apache-2.0
|
||||
|
|
Loading…
Reference in New Issue