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