]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
Dont follow dependents during down of interfaces as part of ifreload
authorRoopa Prabhu <roopa@cumulusnetworks.com>
Sat, 4 Apr 2015 03:47:06 +0000 (20:47 -0700)
committerSam Tannous <stannous@cumulusnetworks.com>
Wed, 3 Jun 2015 17:08:10 +0000 (13:08 -0400)
Testing Done: tested ifreload with example in the bug

ifdown of the bridge svi was following the lowerdev and downing the
bridge. kernel implicitly deletes all svi's on bridge down.
ifup of the bridge usually handles it, but a change done in 2.5.1
was causing it not to. Thinking about this some more, its safe
to not follow dependents on down during a ifreload. This patch does
just that.
(cherry picked from commit 03f7a376aee944b4037b7b7b02a5096e9360f79e)
(cherry picked from commit aac5777ecc7d367ada0681f813fbec7f78fa80ee)

ifupdown2/ifupdown/ifupdownmain.py

index 3335961272bcbec0da1fa3c7761c62190ad09c21..f46d5b2864316e2d9d16b6fc7aaa5fa5296a600e 100644 (file)
@@ -686,7 +686,8 @@ class ifupdownMain(ifupdownBase):
                 # continue reading
                 pass
 
-    def _sched_ifaces(self, ifacenames, ops, skipupperifaces=False):
+    def _sched_ifaces(self, ifacenames, ops, skipupperifaces=False,
+                      followdependents=True):
         self.logger.debug('scheduling \'%s\' for %s'
                           %(str(ops), str(ifacenames)))
         self._pretty_print_ordered_dict('dependency graph',
@@ -696,7 +697,7 @@ class ifupdownMain(ifupdownBase):
                         order=ifaceSchedulerFlags.INORDER
                             if 'down' in ops[0]
                                 else ifaceSchedulerFlags.POSTORDER,
-                        followdependents=True if self.WITH_DEPENDS else False,
+                        followdependents=followdependents,
                         skipupperifaces=skipupperifaces)
 
     def _render_ifacename(self, ifacename):
@@ -886,7 +887,8 @@ class ifupdownMain(ifupdownBase):
 
         try:
             self._sched_ifaces(filtered_ifacenames, ops,
-                    skipupperifaces=skipupperifaces)
+                    skipupperifaces=skipupperifaces,
+                    followdependents=True if self.WITH_DEPENDS else False)
         finally:
             self._process_delay_admin_state_queue('up')
             if not self.DRYRUN and self.ADDONS_ENABLE:
@@ -947,7 +949,8 @@ class ifupdownMain(ifupdownBase):
             self.populate_dependency_info(ops)
 
         try:
-            self._sched_ifaces(filtered_ifacenames, ops)
+            self._sched_ifaces(filtered_ifacenames, ops,
+                    followdependents=True if self.WITH_DEPENDS else False)
         finally:
             self._process_delay_admin_state_queue('down')
             if not self.DRYRUN and self.ADDONS_ENABLE:
@@ -1011,7 +1014,8 @@ class ifupdownMain(ifupdownBase):
         elif ops[0] == 'query-raw':
             return self.print_ifaceobjs_raw(filtered_ifacenames)
 
-        self._sched_ifaces(filtered_ifacenames, ops)
+        self._sched_ifaces(filtered_ifacenames, ops,
+                           followdependents=True if self.WITH_DEPENDS else False)
 
         if ops[0] == 'query-checkcurr':
             ret = self.print_ifaceobjscurr_pretty(filtered_ifacenames, format)
@@ -1078,7 +1082,8 @@ class ifupdownMain(ifupdownBase):
            self.dependency_graph = OrderedDict({})
            self.populate_dependency_info(downops,
                                          already_up_ifacenames_not_present)
-           self._sched_ifaces(already_up_ifacenames_not_present, downops)
+           self._sched_ifaces(already_up_ifacenames_not_present, downops,
+                   followdependents=True if self.WITH_DEPENDS else False)
         else:
            self.logger.debug('no interfaces to down ..')
 
@@ -1092,7 +1097,8 @@ class ifupdownMain(ifupdownBase):
            return
         self.logger.info('reload: scheduling up on interfaces: %s'
                          %str(interfaces_to_up))
-        self._sched_ifaces(interfaces_to_up, upops)
+        self._sched_ifaces(interfaces_to_up, upops,
+                followdependents=True if self.WITH_DEPENDS else False)
         if self.DRYRUN:
             return
         self._save_state()
@@ -1175,7 +1181,8 @@ class ifupdownMain(ifupdownBase):
                 # Generate dependency info for old config
                 self.populate_dependency_info(downops, ifacedownlist)
                 try:
-                    self._sched_ifaces(ifacedownlist, downops)
+                    self._sched_ifaces(ifacedownlist, downops,
+                                       followdependents=False)
                 except Exception, e:
                     self.logger.error(str(e))
                     pass
@@ -1198,7 +1205,8 @@ class ifupdownMain(ifupdownBase):
         self.logger.info('reload: scheduling up on interfaces: %s'
                          %str(filtered_ifacenames))
         try:
-            self._sched_ifaces(filtered_ifacenames, upops)
+            self._sched_ifaces(filtered_ifacenames, upops,
+                    followdependents=True if self.WITH_DEPENDS else False)
         except Exception, e:
             self.logger.error(str(e))
             pass