Merge "Add a default table in "ip rule" command"
This commit is contained in:
commit
cead8923c2
|
@ -1302,9 +1302,13 @@ def _exist_ip_rule(rules, ip, iif, table, priority, to):
|
|||
return True
|
||||
|
||||
|
||||
def add_ip_rule(namespace, ip, iif=None, table=None, priority=None, to=None):
|
||||
def add_ip_rule(namespace, ip, iif=None, table=IP_RULE_TABLES['default'],
|
||||
priority=None, to=None):
|
||||
"""Create an IP rule in a namespace
|
||||
|
||||
"table" parameter cannot be an empty value (None). By default, this method
|
||||
will assign "IP_RULE_TABLES['default']" value if None is passed.
|
||||
|
||||
:param namespace: (string) namespace name
|
||||
:param ip: (string) source IP or CIDR address (IPv4, IPv6)
|
||||
:param iif: (Optional) (string) input interface name
|
||||
|
@ -1312,6 +1316,7 @@ def add_ip_rule(namespace, ip, iif=None, table=None, priority=None, to=None):
|
|||
:param priority: (Optional) (string, int) rule priority
|
||||
:param to: (Optional) (string) destination IP or CIDR address (IPv4, IPv6)
|
||||
"""
|
||||
table = table if table is not None else IP_RULE_TABLES['default']
|
||||
ip_version = common_utils.get_ip_version(ip)
|
||||
rules = list_ip_rules(namespace, ip_version)
|
||||
if _exist_ip_rule(rules, ip, iif, table, priority, to):
|
||||
|
|
|
@ -197,6 +197,20 @@ class IpLibTestCase(IpLibTestFramework):
|
|||
for expected_rule in expected_rules[ip_version]:
|
||||
self.assertNotIn(expected_rule, rules)
|
||||
|
||||
def test_add_ip_rule_default_table(self):
|
||||
attr = self.generate_device_details()
|
||||
device = self.manage_device(attr)
|
||||
test_cases = {
|
||||
constants.IP_VERSION_4: {'ip': '1.1.1.1', 'to': '8.8.8.0/24'},
|
||||
constants.IP_VERSION_6: {'ip': 'abcd::1', 'to': '1234::/64'}
|
||||
}
|
||||
for ip_version, rule in test_cases.items():
|
||||
ip_lib.add_ip_rule(namespace=device.namespace, **rule)
|
||||
rules = ip_lib.list_ip_rules(device.namespace, ip_version)
|
||||
for _rule in rules:
|
||||
if _rule['from'] == rule['ip'] and _rule['to'] == rule['to']:
|
||||
self.assertEqual('default', _rule['table'])
|
||||
|
||||
def test_device_exists(self):
|
||||
attr = self.generate_device_details()
|
||||
|
||||
|
|
|
@ -321,13 +321,15 @@ class RuleTestCase(functional_base.BaseSudoTestCase):
|
|||
ip_lenght = common_utils.get_network_length(ip_version)
|
||||
ip_family = common_utils.get_socket_address_family(ip_version)
|
||||
priv_ip_lib.add_ip_rule(self.namespace, src=ip_address,
|
||||
src_len=ip_lenght, family=ip_family)
|
||||
src_len=ip_lenght, family=ip_family,
|
||||
table=ip_lib.IP_RULE_TABLES['default'])
|
||||
rules = ip_lib.list_ip_rules(self.namespace, ip_version)
|
||||
self._check_rules(rules, ['from'], [ip_address],
|
||||
'"from" IP address %s' % ip_address)
|
||||
|
||||
priv_ip_lib.delete_ip_rule(self.namespace, family=ip_family,
|
||||
src=ip_address, src_len=ip_lenght)
|
||||
src=ip_address, src_len=ip_lenght,
|
||||
table=ip_lib.IP_RULE_TABLES['default'])
|
||||
rules = ip_lib.list_ip_rules(self.namespace, ip_version)
|
||||
self.assertFalse(
|
||||
self._check_rules(rules, ['from'], [ip_address],
|
||||
|
@ -378,7 +380,8 @@ class RuleTestCase(functional_base.BaseSudoTestCase):
|
|||
ip_family = common_utils.get_socket_address_family(ip_version)
|
||||
priv_ip_lib.add_ip_rule(self.namespace, priority=priority,
|
||||
src=ip_address, src_len=ip_lenght,
|
||||
family=ip_family)
|
||||
family=ip_family,
|
||||
table=ip_lib.IP_RULE_TABLES['default'])
|
||||
rules = ip_lib.list_ip_rules(self.namespace, ip_version)
|
||||
self._check_rules(
|
||||
rules, ['priority', 'from'], [str(priority), ip_address],
|
||||
|
@ -387,7 +390,8 @@ class RuleTestCase(functional_base.BaseSudoTestCase):
|
|||
|
||||
priv_ip_lib.delete_ip_rule(self.namespace, priority=priority,
|
||||
src=ip_address, src_len=ip_lenght,
|
||||
family=ip_family)
|
||||
family=ip_family,
|
||||
table=ip_lib.IP_RULE_TABLES['default'])
|
||||
rules = ip_lib.list_ip_rules(self.namespace, ip_version)
|
||||
self.assertFalse(
|
||||
self._check_rules(rules, ['priority', 'from'],
|
||||
|
@ -420,14 +424,16 @@ class RuleTestCase(functional_base.BaseSudoTestCase):
|
|||
def test_add_rule_exists(self):
|
||||
iif = 'iif_device_1'
|
||||
priv_ip_lib.create_interface(iif, self.namespace, 'dummy')
|
||||
priv_ip_lib.add_ip_rule(self.namespace, iifname=iif)
|
||||
priv_ip_lib.add_ip_rule(self.namespace, iifname=iif,
|
||||
table=ip_lib.IP_RULE_TABLES['default'])
|
||||
rules = ip_lib.list_ip_rules(self.namespace, 4)
|
||||
self._check_rules(rules, ['iif'], [iif], 'iif name %s' % iif)
|
||||
self.assertEqual(4, len(rules))
|
||||
|
||||
# pyroute2.netlink.exceptions.NetlinkError(17, 'File exists')
|
||||
# exception is catch.
|
||||
priv_ip_lib.add_ip_rule(self.namespace, iifname=iif)
|
||||
priv_ip_lib.add_ip_rule(self.namespace, iifname=iif,
|
||||
table=ip_lib.IP_RULE_TABLES['default'])
|
||||
rules = ip_lib.list_ip_rules(self.namespace, 4)
|
||||
self._check_rules(rules, ['iif'], [iif], 'iif name %s' % iif)
|
||||
self.assertEqual(4, len(rules))
|
||||
|
|
Loading…
Reference in New Issue