]> git.proxmox.com Git - mirror_ifupdown2.git/blobdiff - addons/vrf.py
Merge pull request #80 from BarbarossaTM/tunnel-fixes-master
[mirror_ifupdown2.git] / addons / vrf.py
index 197635db086d1d4390e240c412d8c60e57b79807..5e46aa3076e4781b2f71d6d1241ae0251f983e68 100644 (file)
@@ -151,8 +151,7 @@ class vrf(moduleBase):
                             continue
                         self.iproute2_vrf_map[int(table)] = vrf_name
                     except Exception, e:
-                        self.logger.info('vrf: iproute2_vrf_map: unable to parse %s'
-                                         %l)
+                        self.logger.info('vrf: iproute2_vrf_map: unable to parse %s (%s)' %(l, str(e)))
                         pass
 
         vrfs = self.ipcmd.link_get_vrfs()
@@ -312,7 +311,7 @@ class vrf(moduleBase):
             self.iproute2_vrf_map_sync_to_disk = True
             del self.iproute2_vrf_map[int(table_id)]
         except Exception, e:
-            self.logger.info('vrf: iproute2 vrf map del failed for %d (%s)'
+            self.logger.info('vrf: iproute2 vrf map del failed for %s (%s)'
                              %(table_id, str(e)))
             pass
 
@@ -363,7 +362,7 @@ class vrf(moduleBase):
                     raise
                 break
         self._handle_existing_connections(ifaceobj, vrfname)
-        self.ipcmd.link_set(ifacename, 'master', vrfname)
+        netlink.link_set_master(ifacename, vrfname)
         return
 
     def _down_dhcp_slave(self, ifaceobj, vrfname):
@@ -392,10 +391,10 @@ class vrf(moduleBase):
         try:
             master_exists = True
             if vrf_exists or self.ipcmd.link_exists(vrfname):
-                upper = self.ipcmd.link_get_upper(ifacename)
-                if not upper or upper != vrfname:
+                uppers = self.ipcmd.link_get_uppers(ifacename)
+                if not uppers or vrfname not in uppers:
                     self._handle_existing_connections(ifaceobj, vrfname)
-                    self.ipcmd.link_set(ifacename, 'master', vrfname)
+                    netlink.link_set_master(ifacename, vrfname)
             elif ifaceobj:
                 vrf_master_objs = ifaceobj_getfunc(vrfname)
                 if not vrf_master_objs:
@@ -408,6 +407,7 @@ class vrf(moduleBase):
                                    %vrfname)
                     return
                 if (ifupdownflags.flags.ALL or
+                    ifupdownflags.flags.WITH_DEPENDS or
                     (ifupdownflags.flags.CLASS and
                      ifaceobj.classes and vrf_master_objs[0].classes and
                      Set(ifaceobj.classes).intersection(vrf_master_objs[0].classes))):
@@ -871,7 +871,7 @@ class vrf(moduleBase):
     def _down_vrf_slave(self, ifacename, ifaceobj=None, vrfname=None):
         try:
             self._handle_existing_connections(ifaceobj, vrfname)
-            self.ipcmd.link_set(ifacename, 'nomaster')
+            netlink.link_set_nomaster(ifacename)
             # Down this slave only if it is a slave ifupdown2 manages.
             # we dont want to down slaves that maybe up'ed by
             # somebody else. One such example is a macvlan device
@@ -974,7 +974,9 @@ class vrf(moduleBase):
                     if running_table:
                         ifaceobjrunning.update_config('vrf-table',
                                                       running_table)
-            elif kind == 'vrf_slave':
+                        return
+            slave_kind = self.ipcmd.link_get_slave_kind(ifaceobjrunning.name)
+            if slave_kind == 'vrf_slave':
                 vrf = self.ipcmd.link_get_master(ifaceobjrunning.name)
                 if vrf:
                     ifaceobjrunning.update_config('vrf', vrf)