Hi!

It's been a long time since this bug entered the system, and now I have a
patch for it, I have to say it is a little dirty (I'm just adding the bridge
back on the stances that had it removed before them) so that way they won't
fail when trying to remove it.

This will work if you do:
ln -s /lib/bridge-utils/ifupdown.sh /etc/network/if-down.d/bridge
and apply the attached patch.

I'd love to see comments on this, even though more than 15 years later...
well who knows.

Whis patch is a little big, so I don't know if it will make it to Bullseye
at this time of the freeze :-( so all the testing will be welcome and will
of course help get it on Bullseye.

Regards....
-- 
Manty/BestiaTester -> http://manty.net
--- ifupdown.sh.orig    2021-02-17 03:53:52.414027536 +0100
+++ ifupdown.sh 2021-02-17 03:51:29.029521766 +0100
@@ -67,7 +67,11 @@
   fi
 # Previous work (stop the interface)
 elif [ "$MODE" = "stop" ];  then
+  if [ "$PHASE" = "pre-down" ]; then
+    [ ! -d /sys/class/net/$IFACE ] && brctl addbr $IFACE && ip address add 
"$IF_ADDRESS"/"$IF_NETMASK" dev $IFACE
+  elif [ "$PHASE" = "post-down" ]; then
   ip link set dev $IFACE down || exit 1
+  fi
 fi
 
 all_interfaces= &&
@@ -100,7 +104,7 @@
       fi
       brctl addif $IFACE $port && ip link set dev $port up
     # We detach each port of the bridge
-    elif [ "$MODE" = "stop" ] && [ -d /sys/class/net/$IFACE/brif/$port ];  then
+    elif [ "$MODE" = "stop" -a "$PHASE" = "post-down" ] && [ -d 
/sys/class/net/$IFACE/brif/$port ];  then
       ip link set dev $port down && brctl delif $IFACE $port && 
destroy_vlan_port
       if [ -f /proc/sys/net/ipv6/conf/$port/disable_ipv6 ]
       then
@@ -194,16 +198,15 @@
   # Wait for the bridge to be ready
   if [ "$MAXWAIT" != 0 ]
   then
-    /bin/echo -e "\nWaiting for $IFACE to get ready (MAXWAIT is $MAXWAIT 
seconds)."
-
     unset BREADY
     unset TRANSITIONED
     COUNT=0
+    MMAXWAIT=$MAXWAIT
 
     # Use 0.1 delay if available
-    sleep 0.1 2>/dev/null && MAXWAIT=$((MAXWAIT * 10))
+    sleep 0.1 2>/dev/null && MMAXWAIT=$((MAXWAIT * 10))
 
-    while [ -n "$BREADY" -a $COUNT -lt $MAXWAIT ]
+    while [ ! "$BREADY" -a $COUNT -lt $MMAXWAIT ]
     do
       sleep 0.1 2>/dev/null || sleep 1
       COUNT=$(($COUNT+1))
@@ -219,12 +222,15 @@
           unset BREADY
         fi
       done
+      if [ -z "$BREADY" -a $COUNT = 1 ]
+      then
+        /bin/echo -e "\nWaiting for $IFACE to get ready (MAXWAIT is $MAXWAIT 
seconds)."
+      fi
     done
-
   fi
 
 # Finally we destroy the interface
-elif [ "$MODE" = "stop" ];  then
+elif [ "$MODE" = "stop" -a "$PHASE" = "post-down" ];  then
 
   brctl delbr $IFACE
 

Reply via email to