From 4c42c6bde357423f0704a6e5b1ea70081944a1bb Mon Sep 17 00:00:00 2001
From: Stig Thormodsrud <stig@vyatta.com>
Date: Mon, 14 Apr 2008 15:09:01 -0700
Subject: Fix 3148: can't delete bridge interface

---
 templates/interfaces/bridge/node.def               | 13 +++++++--
 .../ethernet/node.tag/bridge-group/node.def        | 33 +++++++++++++---------
 2 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/templates/interfaces/bridge/node.def b/templates/interfaces/bridge/node.def
index ff643980..6af845f3 100644
--- a/templates/interfaces/bridge/node.def
+++ b/templates/interfaces/bridge/node.def
@@ -1,7 +1,16 @@
 tag:
 type: txt
 help: Configure a bridge interface
+
 syntax:expression: $VAR(@) in "br0", "br1", "br2", "br3", "br4", "br5", "br6", "br7", "br8", "br9" ; "Must be (br0 - br9)"
-create:expression: "sudo brctl addbr $VAR(@)"
-delete:expression: "sudo brctl delbr $VAR(@)"
+
+create: sudo brctl addbr $VAR(@)
+
+delete: if [ -n "`/usr/sbin/brctl show | grep $VAR(@) | grep eth`" ]; then
+	   echo "Interfaces are still assigned to bridge $VAR(@)";
+           exit 1;           
+        fi;
+        sudo ip link set $VAR(@) down;
+        sudo brctl delbr $VAR(@);
+
 comp_help: "Enter bridge interface name (br0 - br9)"
diff --git a/templates/interfaces/ethernet/node.tag/bridge-group/node.def b/templates/interfaces/ethernet/node.tag/bridge-group/node.def
index 3cc92cd0..0f4e9b2c 100644
--- a/templates/interfaces/ethernet/node.tag/bridge-group/node.def
+++ b/templates/interfaces/ethernet/node.tag/bridge-group/node.def
@@ -1,15 +1,20 @@
 help: Add this interface to a bridge group
-commit:expression: $VAR(./bridge/) != ""; "Must set the bridge interface"
-create:expression: "sudo brctl addif $VAR(./bridge/@) $VAR(../@)"
-delete:expression: "touch /tmp/eth-$VAR(../@)-bridge.$PPID"
-end:expression: "\
-  if [ -f \"/tmp/eth-$VAR(../@)-bridge.$PPID\" ]; then                         \
-     rm -f /tmp/eth-$VAR(../@)-bridge.$PPID;                                   \
-  else                                                                         \
-     if [ -n \"$VAR(./cost/@)\" ]; then                                        \
-        sudo brctl setpathcost $VAR(./bridge/@) $VAR(../@) $VAR(./cost/@);     \
-     fi;                                                                       \
-     if [ -n \"$VAR(./priority/@)\" ]; then                                    \
-	sudo brctl setportprio $VAR(./bridge/@) $VAR(../@) $VAR(./priority/@); \
-     fi;                                                                       \
-  fi; "
+
+create: sudo brctl addif $VAR(./bridge/@) $VAR(../@);
+
+delete: touch /tmp/eth-$VAR(../@)-bridge.$PPID;
+
+end: if [ -f "/tmp/eth-$VAR(../@)-bridge.$PPID" ]; then
+        rm -f /tmp/eth-$VAR(../@)-bridge.$PPID;
+     else
+       if [ -z "$VAR(./bridge/@)" ]; then
+          echo "Must set the bridge interface";
+          exit 1;
+       fi;
+       if [ -n "$VAR(./cost/@)" ]; then
+          sudo brctl setpathcost $VAR(./bridge/@) $VAR(../@) $VAR(./cost/@);
+       fi;
+       if [ -n "$VAR(./priority/@)" ]; then 
+	  sudo brctl setportprio $VAR(./bridge/@) $VAR(../@) $VAR(./priority/@);
+       fi;
+     fi; 
-- 
cgit v1.2.3