From ee0075399ad38618b6d46a4280560719aa656fd8 Mon Sep 17 00:00:00 2001 From: Julien Fortin Date: Thu, 20 Jun 2019 15:52:09 +0800 Subject: [PATCH] addons: addressvirtual: keep macvlan down if link-down specified on lower device auto vlan1755 iface vlan1755 address 172.21.7.42/29 address-virtual 00:00:5E:00:01:41 172.21.7.41/29 link-down yes vlan-id 1755 vlan-raw-device bridge Signed-off-by: Julien Fortin --- ifupdown2/addons/addressvirtual.py | 9 +++++++-- ifupdown2/ifupdownaddons/LinkUtils.py | 6 ++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/ifupdown2/addons/addressvirtual.py b/ifupdown2/addons/addressvirtual.py index 5566c0a..be16c81 100644 --- a/ifupdown2/addons/addressvirtual.py +++ b/ifupdown2/addons/addressvirtual.py @@ -432,7 +432,7 @@ class addressvirtual(moduleBase): self.ipcmd.ipv6_addrgen(macvlan_ifname, ipv6_addrgen_user_value, link_created) if macvlan_hwaddr: - self.ipcmd.link_set_hwaddress(macvlan_ifname, macvlan_hwaddr) + self.ipcmd.link_set_hwaddress(macvlan_ifname, macvlan_hwaddr, keep_down=ifaceobj.link_privflags & ifaceLinkPrivFlags.KEEP_LINK_DOWN) hw_address_list.append(macvlan_hwaddr) if self.addressvirtual_with_route_metric and self.ipcmd.addr_metric_support(): @@ -448,6 +448,10 @@ class addressvirtual(moduleBase): metric=metric ) + if ifaceobj.link_privflags & ifaceLinkPrivFlags.KEEP_LINK_DOWN: + self.logger.info("%s: keeping macvlan down - link-down yes on lower device %s" % (macvlan_ifname, ifname)) + netlink.link_set_updown(macvlan_ifname, "down") + # If link existed before, flap the link if not link_created: @@ -472,7 +476,8 @@ class addressvirtual(moduleBase): # since we auto create them here..we are responsible # to bring them up here in the case they were brought down # by some other entity in the system. - netlink.link_set_updown(macvlan_ifname, "up") + if not ifaceobj.link_privflags & ifaceLinkPrivFlags.KEEP_LINK_DOWN: + netlink.link_set_updown(macvlan_ifname, "up") else: try: if not self.addressvirtual_with_route_metric or not self.ipcmd.addr_metric_support(): diff --git a/ifupdown2/ifupdownaddons/LinkUtils.py b/ifupdown2/ifupdownaddons/LinkUtils.py index 8078093..2b29bfe 100644 --- a/ifupdown2/ifupdownaddons/LinkUtils.py +++ b/ifupdown2/ifupdownaddons/LinkUtils.py @@ -1090,7 +1090,7 @@ class LinkUtils(utilsBase): if key not in ['master', 'nomaster']: self._cache_update([ifacename, key], value) - def link_set_hwaddress(self, ifacename, hwaddress, force=False): + def link_set_hwaddress(self, ifacename, hwaddress, force=False, keep_down=False): if not force: link_hwaddress = self.link_get_hwaddress(ifacename) @@ -1103,7 +1103,9 @@ class LinkUtils(utilsBase): self.add_to_batch(cmd) else: utils.exec_command('%s %s' % (utils.ip_cmd, cmd)) - self.link_up(ifacename) + + if not keep_down: + self.link_up(ifacename) self._cache_update([ifacename, 'hwaddress'], hwaddress) return True -- 2.39.2