From aa895ecddfef7fe0de582f07a86168811fe6284a Mon Sep 17 00:00:00 2001 From: Julien Fortin Date: Fri, 15 Jun 2018 17:59:19 +0200 Subject: [PATCH] addons: addressvirtual: if device is VRF slave check vrf route table 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 Signed-off-by: Julien Fortin --- ifupdown2/addons/addressvirtual.py | 8 +++++++- ifupdown2/ifupdownaddons/LinkUtils.py | 10 +++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ifupdown2/addons/addressvirtual.py b/ifupdown2/addons/addressvirtual.py index 80541b2..0c644e4 100644 --- a/ifupdown2/addons/addressvirtual.py +++ b/ifupdown2/addons/addressvirtual.py @@ -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' diff --git a/ifupdown2/ifupdownaddons/LinkUtils.py b/ifupdown2/ifupdownaddons/LinkUtils.py index ab93f77..e4b4de9 100644 --- a/ifupdown2/ifupdownaddons/LinkUtils.py +++ b/ifupdown2/ifupdownaddons/LinkUtils.py @@ -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: -- 2.39.5