Fix section rules protocols handling
- Add ipip (ip over ip) to the list of supported protocols - Raise an InvalidInput error on unsupported protocols Change-Id: I44a84d8c5111440bb2be21440174a8c125bbc4c2
This commit is contained in:
@@ -20,6 +20,7 @@ from oslo_utils import uuidutils
|
|||||||
|
|
||||||
from vmware_nsxlib.tests.unit.v3 import nsxlib_testcase
|
from vmware_nsxlib.tests.unit.v3 import nsxlib_testcase
|
||||||
from vmware_nsxlib.tests.unit.v3 import test_constants
|
from vmware_nsxlib.tests.unit.v3 import test_constants
|
||||||
|
from vmware_nsxlib.v3 import exceptions as nsxlib_exc
|
||||||
from vmware_nsxlib.v3 import nsx_constants as const
|
from vmware_nsxlib.v3 import nsx_constants as const
|
||||||
|
|
||||||
|
|
||||||
@@ -59,6 +60,34 @@ class TestNsxLibFirewallSection(nsxlib_testcase.NsxLibTestCase):
|
|||||||
}
|
}
|
||||||
self.assertEqual(expected, result)
|
self.assertEqual(expected, result)
|
||||||
|
|
||||||
|
def test_create_rules(self):
|
||||||
|
with mock.patch("vmware_nsxlib.v3.security.NsxLibFirewallSection"
|
||||||
|
".add_rules") as add_rules:
|
||||||
|
rule_id = uuidutils.generate_uuid()
|
||||||
|
rule = {'id': rule_id,
|
||||||
|
'ethertype': 'IPv4',
|
||||||
|
'protocol': 'ipip',
|
||||||
|
'direction': 'ingress',
|
||||||
|
'remote_ip_prefix': None}
|
||||||
|
rules = [rule]
|
||||||
|
self.nsxlib.firewall_section.create_rules(
|
||||||
|
None, 'section-id', 'nsgroup-id', False,
|
||||||
|
"ALLOW", rules, {rule_id: 'dummy'})
|
||||||
|
add_rules.assert_called_once()
|
||||||
|
|
||||||
|
def test_create_rule_with_illegal_protocol(self):
|
||||||
|
rule_id = uuidutils.generate_uuid()
|
||||||
|
rule = {'id': rule_id,
|
||||||
|
'ethertype': 'IPv4',
|
||||||
|
'protocol': 'bad',
|
||||||
|
'direction': 'ingress',
|
||||||
|
'remote_ip_prefix': None}
|
||||||
|
rules = [rule]
|
||||||
|
self.assertRaises(nsxlib_exc.InvalidInput,
|
||||||
|
self.nsxlib.firewall_section.create_rules,
|
||||||
|
None, 'section-id', 'nsgroup-id', False,
|
||||||
|
"ALLOW", rules, {rule_id: 'dummy'})
|
||||||
|
|
||||||
def test_create_with_rules(self):
|
def test_create_with_rules(self):
|
||||||
expected_body = {
|
expected_body = {
|
||||||
'display_name': 'display-name',
|
'display_name': 'display-name',
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ PROTO_NAME_ESP = 'esp'
|
|||||||
PROTO_NAME_GRE = 'gre'
|
PROTO_NAME_GRE = 'gre'
|
||||||
PROTO_NAME_ICMP = 'icmp'
|
PROTO_NAME_ICMP = 'icmp'
|
||||||
PROTO_NAME_IGMP = 'igmp'
|
PROTO_NAME_IGMP = 'igmp'
|
||||||
|
PROTO_NAME_IPIP = 'ipip'
|
||||||
PROTO_NAME_IPV6_ENCAP = 'ipv6-encap'
|
PROTO_NAME_IPV6_ENCAP = 'ipv6-encap'
|
||||||
PROTO_NAME_IPV6_FRAG = 'ipv6-frag'
|
PROTO_NAME_IPV6_FRAG = 'ipv6-frag'
|
||||||
PROTO_NAME_IPV6_ICMP = 'ipv6-icmp'
|
PROTO_NAME_IPV6_ICMP = 'ipv6-icmp'
|
||||||
@@ -48,6 +49,7 @@ PROTO_NUM_ESP = 50
|
|||||||
PROTO_NUM_GRE = 47
|
PROTO_NUM_GRE = 47
|
||||||
PROTO_NUM_ICMP = 1
|
PROTO_NUM_ICMP = 1
|
||||||
PROTO_NUM_IGMP = 2
|
PROTO_NUM_IGMP = 2
|
||||||
|
PROTO_NUM_IPIP = 4
|
||||||
PROTO_NUM_IPV6_ENCAP = 41
|
PROTO_NUM_IPV6_ENCAP = 41
|
||||||
PROTO_NUM_IPV6_FRAG = 44
|
PROTO_NUM_IPV6_FRAG = 44
|
||||||
PROTO_NUM_IPV6_ICMP = 58
|
PROTO_NUM_IPV6_ICMP = 58
|
||||||
@@ -70,6 +72,7 @@ IP_PROTOCOL_MAP = {PROTO_NAME_AH: PROTO_NUM_AH,
|
|||||||
PROTO_NAME_GRE: PROTO_NUM_GRE,
|
PROTO_NAME_GRE: PROTO_NUM_GRE,
|
||||||
PROTO_NAME_ICMP: PROTO_NUM_ICMP,
|
PROTO_NAME_ICMP: PROTO_NUM_ICMP,
|
||||||
PROTO_NAME_IGMP: PROTO_NUM_IGMP,
|
PROTO_NAME_IGMP: PROTO_NUM_IGMP,
|
||||||
|
PROTO_NAME_IPIP: PROTO_NUM_IPIP,
|
||||||
PROTO_NAME_IPV6_ENCAP: PROTO_NUM_IPV6_ENCAP,
|
PROTO_NAME_IPV6_ENCAP: PROTO_NUM_IPV6_ENCAP,
|
||||||
PROTO_NAME_IPV6_FRAG: PROTO_NUM_IPV6_FRAG,
|
PROTO_NAME_IPV6_FRAG: PROTO_NUM_IPV6_FRAG,
|
||||||
PROTO_NAME_IPV6_ICMP: PROTO_NUM_IPV6_ICMP,
|
PROTO_NAME_IPV6_ICMP: PROTO_NUM_IPV6_ICMP,
|
||||||
|
|||||||
@@ -272,7 +272,13 @@ class NsxLibFirewallSection(utils.NsxLibApiBase):
|
|||||||
return
|
return
|
||||||
protocol_number = constants.IP_PROTOCOL_MAP.get(protocol_number,
|
protocol_number = constants.IP_PROTOCOL_MAP.get(protocol_number,
|
||||||
protocol_number)
|
protocol_number)
|
||||||
protocol_number = int(protocol_number)
|
try:
|
||||||
|
protocol_number = int(protocol_number)
|
||||||
|
except ValueError:
|
||||||
|
raise exceptions.InvalidInput(
|
||||||
|
operation='create_rule',
|
||||||
|
arg_val=protocol_number,
|
||||||
|
arg_name='protocol')
|
||||||
if protocol_number == 6:
|
if protocol_number == 6:
|
||||||
return consts.TCP
|
return consts.TCP
|
||||||
elif protocol_number == 17:
|
elif protocol_number == 17:
|
||||||
@@ -548,7 +554,6 @@ class NsxLibFirewallSection(utils.NsxLibApiBase):
|
|||||||
logging_enabled, action)
|
logging_enabled, action)
|
||||||
|
|
||||||
firewall_rules.append(fw_rule)
|
firewall_rules.append(fw_rule)
|
||||||
|
|
||||||
return self.add_rules(firewall_rules, section_id)
|
return self.add_rules(firewall_rules, section_id)
|
||||||
|
|
||||||
def set_rule_logging(self, section_id, logging):
|
def set_rule_logging(self, section_id, logging):
|
||||||
|
|||||||
Reference in New Issue
Block a user