]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addons: vrf: enable ipv6 on vrf slaves when moved from bport
authorJulien Fortin <julien@cumulusnetworks.com>
Tue, 16 Jul 2019 12:39:58 +0000 (14:39 +0200)
committerJulien Fortin <julien@cumulusnetworks.com>
Wed, 18 Sep 2019 10:48:59 +0000 (12:48 +0200)
Remove/add swp2 from br0 and vrf blue

auto swp2
iface swp2
      vrf blue

auto br0
iface br0
      bridge-ports swp1
      address 10.0.0.11/24
      bridge-vlan-aware no

auto blue
iface blue
      vrf-table auto

Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
ifupdown2/addons/vrf.py
ifupdown2/ifupdown/iface.py

index 3fbec5b6a29c016930d75fd076f42d65d484d7e9..a9bc25c05fb81e87cd49bdfad9a573fc5e6f57d3 100644 (file)
@@ -15,6 +15,7 @@ from sets import Set
 try:
     import ifupdown2.ifupdown.policymanager as policymanager
     import ifupdown2.ifupdown.ifupdownflags as ifupdownflags
+    from ifupdown2.ifupdown.statemanager import statemanager_api as statemanager
 
     from ifupdown2.ifupdown.iface import *
     from ifupdown2.ifupdown.utils import utils
@@ -27,6 +28,7 @@ try:
 except ImportError:
     import ifupdown.policymanager as policymanager
     import ifupdown.ifupdownflags as ifupdownflags
+    from ifupdown.statemanager import statemanager_api as statemanager
 
     from ifupdown.iface import *
     from ifupdown.utils import utils
@@ -439,8 +441,22 @@ class vrf(moduleBase):
                 break
         self._handle_existing_connections(ifaceobj, vrfname)
         self.ipcmd.link_set(ifacename, 'master', vrfname)
+        self.enable_ipv6(ifacename)
         return
 
+    def enable_ipv6(self, ifname):
+        """
+        Only enable ipv6 on former bridge port
+        - workaround for intf moved from bridge port to VRF slave
+        """
+        try:
+            for ifaceobj in statemanager.get_ifaceobjs(ifname) or []:
+                if ifaceobj.link_privflags & ifaceLinkPrivFlags.BRIDGE_PORT:
+                    self.write_file("/proc/sys/net/ipv6/conf/%s/disable_ipv6" % ifname, "0")
+                    return
+        except Exception, e:
+            self.logger.info(str(e))
+
     def _down_dhcp_slave(self, ifaceobj, vrfname):
         try:
             dhclient_cmd_prefix = None
index bb095358997223f4a84431a0723de0aa9906ad44..4be2b4f3cb82749d1c117dfbf4408cba46f91ebc 100644 (file)
@@ -647,14 +647,13 @@ class iface():
         del odict['env']
         del odict['link_type']
         del odict['link_kind']
-        del odict['link_privflags']
+        #del odict['link_privflags']
         del odict['role']
         del odict['dependency_type']
         del odict['blacklisted']
         return odict
 
     def __setstate__(self, dict):
-        self.__dict__.update(dict)
         self._config_status = {}
         self.state = ifaceState.NEW
         self.status = ifaceStatus.UNKNOWN
@@ -674,6 +673,7 @@ class iface():
         self.link_privflags = ifaceLinkPrivFlags.UNKNOWN
         self.dependency_type = ifaceDependencyType.UNKNOWN
         self.blacklisted = False
+        self.__dict__.update(dict)
 
     def dump_raw(self, logger):
         indent = '  '