]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addons: addressvirtual: if device is VRF slave check vrf route table
authorJulien Fortin <julien@cumulusnetworks.com>
Fri, 15 Jun 2018 15:59:19 +0000 (17:59 +0200)
committerJulien Fortin <julien@cumulusnetworks.com>
Mon, 18 Jun 2018 11:45:28 +0000 (13:45 +0200)
auto bridge
iface bridge
      bridge-vlan-aware yes
      bridge-ports swp2

auto bridge.2
iface bridge.2
      address 10.254.1.2/24
      address 2a03:25e0:254:1::2/64
      address-virtual 00:00:5e:00:01:01 10.254.1.1/24 2a03:25e0:254:1::1/64 fe80::1/64
      vrf blue

auto blue
iface blue
      vrf-table auto

$ ifreload -a -v
...
info: executing /bin/ip route get 10.254.1.0/24 vrf blue
...
$

Reviewed-by: Roopa Prabhu <roopa@cumulusnetworks.com>
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
ifupdown2/addons/addressvirtual.py
ifupdown2/ifupdownaddons/LinkUtils.py

index 80541b232557463e847a12b92642b317adc1e63c..0c644e44d5ba436dcf76e9d23586e6ad9480c121 100644 (file)
@@ -134,7 +134,13 @@ class addressvirtual(moduleBase):
 
             route_prefix = '%s/%d' %(ip.network, ip.prefixlen)
 
-            dev = self.ipcmd.ip_route_get_dev(route_prefix)
+            if ifaceobj.link_privflags & ifaceLinkPrivFlags.VRF_SLAVE:
+                vrf_master = self.ipcmd.link_get_master(ifaceobj.name)
+            else:
+                vrf_master = None
+
+            dev = self.ipcmd.ip_route_get_dev(route_prefix, vrf_master=vrf_master)
+
             if dev and dev != ifaceobj.name:
                 self.logger.info('%s: preferred routing entry ' %ifaceobj.name +
                                  'seems to be of the macvlan dev %s'
index ab93f774615835febf0a07c093770f476bf45683..e4b4de9fb66708fea8c4465b85b874cdd023d19d 100644 (file)
@@ -1687,10 +1687,14 @@ class LinkUtils(utilsBase):
             ret = False
         return ret
 
-    def ip_route_get_dev(self, prefix):
+    def ip_route_get_dev(self, prefix, vrf_master=None):
         try:
-            output = utils.exec_command('%s route get %s' %
-                                        (utils.ip_cmd, prefix))
+            if vrf_master:
+                cmd = '%s route get %s vrf %s' % (utils.ip_cmd, prefix, vrf_master)
+            else:
+                cmd = '%s route get %s' % (utils.ip_cmd, prefix)
+
+            output = utils.exec_command(cmd)
             if output:
                 rline = output.splitlines()[0]
                 if rline: