]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addons: vrf: Ensures fib rule for local table have higher pref than fib vrf rule
authorNikhil <nikhil@cumulusnetworks.com>
Tue, 1 Mar 2016 01:32:23 +0000 (17:32 -0800)
committerNikhil <nikhil@cumulusnetworks.com>
Tue, 1 Mar 2016 03:03:51 +0000 (19:03 -0800)
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

addons/vrf.py

index 4b689c44c230ffc023c7cca7f40f85b7cc293ec4..a942a2be5ffd846be81072ee1d2dc9de81f51b26 100644 (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)