[ltp] Network - 2 ethernet cards instead of a hub

Richard Neill linux-thinkpad@linux-thinkpad.org
Sat, 27 Dec 2003 04:37:09 +0000


This is a multi-part message in MIME format.
--------------050108070804070105000208
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Thank you - I am *such* a twit! I failed to realise that although the 
ethernet cards that comprise a bridge cannot have IP addresses, the 
bridge itself can do so.

For such use as it may beto anyone, I attach my finished script - it's 
rather ugly, but it does do the job (put it in /etc/init.d).

Best wishes

Richard

--------------050108070804070105000208
Content-Type: text/plain;
 name="bridge-br0_eth0_eth1"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="bridge-br0_eth0_eth1"

#!/bin/bash
#
# chkconfig: - - -
# description: Starts and stops the ethernet bridge br0 between eth0 and eth1

#This is a script to set up ethernet bridging on espresso.baddiant.org.uk
#It assumes that the network is already configured: eth0 is up and has IP assigned by dhcp; eth1 is not configured.
#It creates the bridge device br0 and merges eth0 and eth1 into it. It then sets this up on the network.

# Source function library.
. /etc/init.d/functions

prog=$"ethernet bridge br0"

start() {
	gprintf "Starting %s: \n" "$prog"

	#Does the bridge br0 already exist?
	if brctl show | grep '^br0' >/dev/null; then
		echo "Sorry, br0 already exists. Try stopping it first."
		exit 1
	fi

	#First, get the address we want the bridge to have (i.e the current address of eth0):
	BRIDGE_ADDR=`/sbin/ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | grep -oE  '([[:digit:]])+\.([[:digit:]])+\.([[:digit:]])+\.([[:digit:]])+'`
	#Similarly, get the netmask (usually 255.255.255.0)
        BRIDGE_NETMASK=`/sbin/ifconfig eth0 | grep 'inet addr' | awk '{print $4}' | grep -oE  '([[:digit:]])+\.([[:digit:]])+\.([[:digit:]])+\.([[:digit:]])+'`
	#Similarly, get the gateway
	GATEWAY=`/sbin/route -n | grep -E '^0\.0\.0\.0' | awk '{print $2}'`
	echo "Bridge Address will be: $BRIDGE_ADDR with netmask $BRIDGE_NETMASK and gateway $GATEWAY"

	#Now release both eth0 and eth1:
	echo "Stopping eth0 and eth1"
	/sbin/ifconfig eth0 0.0.0.0 down
	/sbin/ifconfig eth1 0.0.0.0 down

	#Create a bridge device br0 (with spanning tree protocol off)
	echo "Creating bridge device br0"
	/usr/sbin/brctl addbr br0
	/usr/sbin/brctl stp br0 off

	#Make sure they are both up:
	echo "Starting eth0 and eth1"
	/sbin/ifconfig eth0 up
	/sbin/ifconfig eth1 up

	#Associate eth0 and eth1 with the bridge.
	echo "Adding eth0 and eth1 to bridge br0"
	/usr/sbin/brctl addif br0 eth0
	/usr/sbin/brctl addif br0 eth1

	#Now configure the bridge interface:
	echo "Setting bridge interface IP to $BRIDGE_ADDR and netmask to $BRIDGE_NETMASK"
	/sbin/ifconfig br0 $BRIDGE_ADDR netmask $BRIDGE_NETMASK

	echo "Setting gateway to be $GATEWAY"
	route add default gw $GATEWAY

	#Ugly hack = why does this take so long?
	echo "Waiting 15 seconds for routing to take effect."
	sleep 15

	echo "...Finished"
}


stop() {
	gprintf "Shutting down %s: \n" "$prog"

	#Does the bridge br0 already exist?
        if brctl show | grep '^br0' >/dev/null ; then

		echo "Stopping the bridge device br0"
		/sbin/ifconfig br0 down

		echo "Removing eth0 and eth1 from bridge"
		/usr/sbin/brctl delif br0 eth0
		/usr/sbin/brctl delif br0 eth1

		echo "Deleting the bridge br0"
		/usr/sbin/brctl delbr br0

	else
		echo "Bridge br0 does not exist - not attempting to stop it."
        fi

	echo "Restarting the network as before"
	/sbin/service network restart

	echo "...Finished"
}

status() {
        if brctl show | grep '^br0' >/dev/null ; then
		gprintf "%s is configured.\n" "$prog"
	else
		gprintf "%s is not configured.\n" "$prog"
	fi
}


# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
  	status
	;;
  *)
	gprintf "Usage: %s {start|stop|status}\n" "$0"
	exit 1
esac

--------------050108070804070105000208--