1
0
mirror of https://github.com/CumulusNetworks/ifupdown2.git synced 2024-05-06 15:54:50 +00:00

addons: vrf: Ensures fib rule for local table have higher pref than fib vrf rule

Ticket: CM-9541
Reviewed By: Roopa Prabhu
Testing Done: Yes, by installing ifupdown2 deb onto cel-e1031-01

This patch checks if fib rule for local table have higher pref
than vrf table, if not, it deletes fib rule for local table
with lower pref and adds fib rule for local table with
higher pref than vrf table.

This patch also avoid repeated addition of vrf rules on each ifup
This commit is contained in:
Nikhil
2016-02-29 17:32:23 -08:00
parent 09b1b7fb0f
commit 3fcb15febd

View File

@@ -103,6 +103,7 @@ class vrf(moduleBase):
self.last_used_vrf_table = last_used_vrf_table
self.iproute2_write_vrf_map = False
atexit.register(self.iproute2_vrf_map_write)
self.vrf_fix_local_table = True
def iproute2_vrf_map_write(self):
if not self.iproute2_write_vrf_map:
@@ -200,24 +201,36 @@ class vrf(moduleBase):
pref = 200
ip_rule_out_format = '%s: from all %s %s lookup %s'
ip_rule_cmd = 'ip %s rule add pref %s %s %s table %s'
try:
if self.vrf_fix_local_table:
self.vrf_fix_local_table = False
rule = '0: from all lookup local'
if rule in self.ip_rule_cache:
self.exec_command('ip rule del pref 0')
self.exec_command('ip rule add pref 32765 table local')
except Exception, e:
self.logger.info('%s' %str(e))
rule = ip_rule_out_format %(pref, 'oif', vrf_dev_name, vrf_table)
#Example ip rule
#200: from all oif blue lookup blue
#200: from all iif blue lookup blue
rule = ip_rule_out_format %(pref, 'oif', vrf_dev_name, vrf_dev_name)
if rule not in self.ip_rule_cache:
rule_cmd = ip_rule_cmd %('', pref, 'oif', vrf_dev_name, vrf_table)
self.exec_command(rule_cmd)
rule = ip_rule_out_format %(pref, 'iif', vrf_dev_name, vrf_table)
rule = ip_rule_out_format %(pref, 'iif', vrf_dev_name, vrf_dev_name)
if rule not in self.ip_rule_cache:
rule_cmd = ip_rule_cmd %('', pref, 'iif', vrf_dev_name, vrf_table)
self.exec_command(rule_cmd)
rule = ip_rule_out_format %(pref, 'oif', vrf_dev_name, vrf_table)
rule = ip_rule_out_format %(pref, 'oif', vrf_dev_name, vrf_dev_name)
if rule not in self.ip_rule_cache:
rule_cmd = ip_rule_cmd %('-6', pref, 'oif', vrf_dev_name,
vrf_table)
rule_cmd = ip_rule_cmd %('-6', pref, 'oif', vrf_dev_name, vrf_table)
self.exec_command(rule_cmd)
rule = ip_rule_out_format %(pref, 'iif', vrf_dev_name, vrf_table)
rule = ip_rule_out_format %(pref, 'iif', vrf_dev_name, vrf_dev_name)
if rule not in self.ip_rule_cache:
rule_cmd = ip_rule_cmd %('-6', pref, 'iif', vrf_dev_name,
vrf_table)