Enhancements and bugfixes on bridging script.
authorFlorian Pose <fp@igh-essen.com>
Tue, 27 Jun 2006 19:34:21 +0000
changeset 289 3c121228ebe9
parent 288 89d3c61ef3e6
child 290 57a4201cbb0f
Enhancements and bugfixes on bridging script.
script/ethercat.sh
--- a/script/ethercat.sh	Tue Jun 27 19:33:04 2006 +0000
+++ b/script/ethercat.sh	Tue Jun 27 19:34:21 2006 +0000
@@ -59,6 +59,80 @@
 
 #------------------------------------------------------------------------------
 
+#
+#  Function for setting up the EoE bridge
+#
+build_eoe_bridge() {
+        if [ -z "$EOE_BRIDGE" ]; then return; fi
+
+	EOE_INTERFACES=`/sbin/ifconfig -a | grep -o -E "^eoe[0-9]+ "`
+
+	# add bridge, if it does not already exist
+	if ! /sbin/brctl show | grep -E -q "^$EOE_BRIDGE"; then
+	        if ! /sbin/brctl addbr $EOE_BRIDGE; then
+		        /bin/false
+			rc_status -v
+			rc_exit
+		fi
+	fi
+
+       	# check if specified interfaces are bridged
+	for interf in $EOE_INTERFACES $EOE_EXTRA_INTERFACES; do
+	        # interface is already part of the bridge 
+	        if /sbin/brctl show $EOE_BRIDGE | grep -E -q $interf
+		        then continue
+		fi
+		# clear IP address and open interface
+		if ! /sbin/ifconfig $interf 0.0.0.0 up; then
+		        /bin/false
+			rc_status -v
+			rc_exit
+		fi
+		# add interface to the bridge
+		if ! /sbin/brctl addif $EOE_BRIDGE $interf; then
+		        /bin/false
+			rc_status -v
+			rc_exit
+		fi
+	done
+
+	# configure IP on bridge
+	if [ -n "$EOE_IP_ADDRESS" -a -n "$EOE_IP_NETMASK" ]; then
+	        if ! /sbin/ifconfig $EOE_BRIDGE $EOE_IP_ADDRESS \
+		        netmask $EOE_IP_NETMASK; then
+		        /bin/false
+			rc_status -v
+			rc_exit
+		fi
+	fi
+
+	# open bridge
+	if ! /sbin/ifconfig $EOE_BRIDGE up; then
+	        /bin/false
+		rc_status -v
+		rc_exit
+	fi
+
+	# install new default gateway
+	if [ -n "$EOE_GATEWAY" ]; then
+	        while /sbin/route -n | grep -E -q "^0.0.0.0"; do
+		        if ! /sbin/route del default; then
+			        echo "Failed to remove route!" 1>&2
+				/bin/false
+				rc_status -v
+				rc_exit
+			fi
+		done
+		if ! /sbin/route add default gw $EOE_GATEWAY; then
+		        /bin/false
+			rc_status -v
+			rc_exit
+		fi
+	fi
+}
+
+#------------------------------------------------------------------------------
+
 . /etc/rc.status
 rc_reset
 
@@ -77,6 +151,7 @@
 	    EOE_DEVICES=0
 	fi
 
+	# unload conflicting modules at first
 	for mod in 8139too 8139cp; do
 		if lsmod | grep "^$mod " > /dev/null; then
 			if ! rmmod $mod; then
@@ -87,78 +162,22 @@
 		fi
 	done
 
+	# load master module
 	if ! modprobe ec_master ec_eoe_devices=$EOE_DEVICES; then
 	    /bin/false
 	    rc_status -v
 	    rc_exit
 	fi
 
+	# load device module
 	if ! modprobe ec_8139too ec_device_index=$DEVICE_INDEX; then
 	    /bin/false
 	    rc_status -v
 	    rc_exit
 	fi
 
-	# Build EoE bridge
-	if [ -n "$EOE_BRIDGE" ]; then
-
-		EOE_INTERFACES=`/sbin/ifconfig -a | grep -o -E "^eoe[0-9]+ "`
-
-		# add bridge, if it does not already exist
-		if ! /sbin/brctl show | grep -E -q "^$EOE_BRIDGE"; then
-			if ! /sbin/brctl addbr $EOE_BRIDGE; then
-				/bin/false
-				rc_status -v
-				rc_exit
-			fi
-		fi
-
-		# free all interfaces of their addresses and add them to the bridge
-		for interface in $EOE_INTERFACES $EOE_EXTRA_INTERFACES; do
-			if ! /sbin/ifconfig $interface 0.0.0.0 up; then
-				/bin/false
-				rc_status -v
-				rc_exit
-			fi
-			if ! /sbin/brctl show | grep -E -q "^$EOE_BRIDGE.*$interface"; then
-				if ! /sbin/brctl addif $EOE_BRIDGE $interface; then
-					/bin/false
-					rc_status -v
-					rc_exit
-				fi
-			fi
-		done
-		if [ -n "$EOE_IP_ADDRESS" -a -n "$EOE_IP_NETMASK" ]; then
-			if ! /sbin/ifconfig $EOE_BRIDGE $EOE_IP_ADDRESS \
-				netmask $EOE_IP_NETMASK; then
-				/bin/false
-				rc_status -v
-				rc_exit
-			fi
-		fi
-		if ! /sbin/ifconfig $EOE_BRIDGE up; then
-			/bin/false
-			rc_status -v
-			rc_exit
-		fi
-
-		# install new default gateway
-		if [ -n "$EOE_GATEWAY" ]; then
-			while /sbin/route -n | grep -E -q "^0.0.0.0"; do
-				if ! /sbin/route del default; then
-					echo "Failed to remove default route!" 1>&2
-					/bin/false
-					rc_status -v
-					rc_exit
-				fi
-			done
-			if ! /sbin/route add default gw $EOE_GATEWAY; then
-				/bin/false
-				rc_status -v
-				rc_exit
-			fi
-		fi
-	fi
+	# build EoE bridge
+	build_eoe_bridge
 
 	rc_status -v
 	;;
@@ -166,6 +185,7 @@
     stop)
 	echo -n "Shutting down EtherCAT master "
 
+	# unload modules
 	for mod in ec_8139too ec_master; do
 		if lsmod | grep "^$mod " > /dev/null; then
 			if ! rmmod $mod; then
@@ -176,6 +196,7 @@
 		fi;
 	done
 
+	# reload previous modules
 	if ! modprobe 8139too; then
 	    echo "Warning: Failed to restore 8139too module."
 	fi
@@ -184,7 +205,7 @@
 	;;
 
     restart)
-	$0 stop
+	$0 stop || exit 1
 	$0 start
 
 	rc_status
@@ -197,10 +218,24 @@
 	master_running=$?
 	lsmod | grep "^ec_8139too " > /dev/null
 	device_running=$?
+
+	# master module and device module loaded?
 	test $master_running -eq 0 -a $device_running -eq 0
 
 	rc_status -v
 	;;
+
+    bridge)
+	echo -n "Building EoE bridge "
+
+	build_eoe_bridge
+
+	rc_status -v
+	;;
+
+    *)
+	echo "USAGE: $0 {start|stop|restart|status|bridge}"
+	;;
 esac
 rc_exit