| #!/bin/sh |
| # |
| # chkconfig: 2345 11 89 |
| # description: Brings up and configures the ethernet bridge |
| # processname: bridge |
| |
| # Source function library. |
| . /etc/init.d/functions |
| |
| # Check that networking is up. |
| if [ "$NETWORKING" = "no" ] |
| then |
| exit 0 |
| fi |
| |
| RETVAL=0 |
| |
| [ -f /etc/rsbridgeinit.conf ] && . /etc/rsbridgeinit.conf |
| |
| ###### Sample of what /etc/rsbridgeinit.conf should look like |
| # bridgeprefix="gbr" |
| # #UPDATE_STRING=-b eth2 eth3 |
| # BRIDGES="0" |
| # CSIF[0]="eth2" |
| # SSIF[0]="eth3" |
| ########################## |
| |
| #Enable RSTP if we have /sbin/rstpd |
| RSTPD=/sbin/rstpd |
| RSTPCTL=/sbin/rstpctl |
| RSTP=0 |
| [ -x $RSTPD -a -x $RSTPCTL ] && RSTP=1 |
| |
| slaves () { |
| cat /proc/net/bonding/$1 | grep 'Slave Interface' | cut -d: -f2 |
| } |
| |
| # set interrupt affinity to first cpu |
| setsmpaffinity() { |
| if [[ $1 == bond* ]] ; then |
| for sl in `slaves $1`; do |
| irq=`grep $sl /proc/interrupts | cut -d: -f1` |
| echo 1 > /proc/irq/$irq/smp_affinity |
| done |
| else |
| irq=`grep $1 /proc/interrupts | cut -d: -f1` |
| echo 1 > /proc/irq/$irq/smp_affinity |
| fi |
| } |
| |
| start () { |
| [ $RSTP == 1 ] && echo Starting rstpd && daemon $RSTPD ">>" /var/log/rstpd.log "2>&1" |
| for b in $BRIDGES ; do |
| echo Starting service bridge $bridgeprefix$b |
| brctl addbr $bridgeprefix$b || RETVAL=1 |
| if [ $RSTP == 0 ] ; then |
| brctl stp $bridgeprefix$b on |
| brctl setbridgeprio $bridgeprefix$b 65000 |
| fi |
| |
| for br in ${CSIF[$b]} ; do |
| echo Adding CSIF $br on $bridgeprefix$b |
| ifup $br |
| brctl addif $bridgeprefix$b $br || RETVAL=1 |
| done |
| |
| if [ "$1" != "client" ]; then |
| for br in ${SSIF[$b]} ; do |
| echo Adding SSIF $br on $bridgeprefix$b |
| ifup $br |
| if [[ $br == bond* ]] ; then |
| for sl in `slaves $br`; do |
| ifconfig $sl down |
| done |
| else |
| ifconfig $br down |
| fi |
| brctl addif $bridgeprefix$b $br || RETVAL=1 |
| done |
| fi |
| ifup $bridgeprefix$b |
| if [ $RSTP == 1 ]; then |
| rstpctl rstp $bridgeprefix$b on |
| rstpctl setbridgeprio $bridgeprefix$b 61440 |
| fi |
| done |
| |
| for b in $BRIDGES ; do |
| |
| . /etc/sysconfig/network-scripts/ifcfg-$bridgeprefix$b |
| # We will always have the subnet route entry. If there is a default gateway |
| # on that subnet, we will have an entry for that as well |
| if [ -n "$GATEWAY" ] ; then rttarget=2 ; else rttarget=1 ; fi |
| rtcount=x |
| |
| count=1 |
| while true ; do |
| new_rtcount=`grep -c $bridgeprefix$b /proc/net/route`; |
| if [ $new_rtcount != $rtcount ]; then |
| #DEBUG echo Number of route entries for $bridgeprefix$b is $new_rtcount |
| rtcount=$new_rtcount |
| fi |
| if [ $rtcount == $rttarget ]; then |
| #DEBUG echo Reached target for $bridgeprefix$b |
| break; |
| fi |
| count=`expr $count + 1` |
| if [ $count -gt 12 ]; then |
| echo Incomplete IP configuration for $bridgeprefix$b. Check network config. Aborting. |
| break; |
| fi |
| echo Incomplete IP configuration for $bridgeprefix$b. Waiting 5 seconds. |
| sleep 5 |
| done |
| done |
| } |
| |
| stop () { |
| for b in $BRIDGES ; do |
| echo "Shutting down service bridge $bridgeprefix$b" |
| for br in ${SSIF[$b]} ; do |
| echo Removing SSIF $br on $bridgeprefix$b |
| brctl delif $bridgeprefix$b $br || RETVAL=1 |
| done |
| for br in ${CSIF[$b]} ; do |
| echo Removing CSIF $br on $bridgeprefix$b |
| brctl delif $bridgeprefix$b $br || RETVAL=1 |
| done |
| ifconfig $bridgeprefix$b down || RETVAL=1 |
| brctl delbr $bridgeprefix$b || RETVAL=1 |
| done |
| [ $RSTP == 1 ] && killproc rstpd |
| |
| } |
| |
| serverif () { |
| case "$1" in |
| up) |
| for b in $BRIDGES ; do |
| for br in ${SSIF[$b]} ; do |
| echo Enabling $br on $bridgeprefix$b |
| if [[ $br == bond* ]] ; then |
| for sl in `slaves $br`; do |
| echo ' ' Enabling slave $sl of $br |
| ifconfig $sl up |
| done |
| else |
| ifconfig $br up |
| fi |
| done |
| done |
| ;; |
| down) |
| for b in $BRIDGES ; do |
| for br in ${SSIF[$b]} ; do |
| echo Disabling $br on $bridgeprefix$b |
| if [[ $br == bond* ]]; then |
| for sl in `slaves $br`; do |
| echo ' ' Disabling slave $sl of $br |
| ifconfig $sl down |
| done |
| else |
| ifconfig $br down |
| fi |
| done |
| done |
| ;; |
| *) |
| exit 1 |
| esac |
| } |
| |
| # See how we were called. |
| case "$1" in |
| start) |
| start $2 |
| ;; |
| stop) |
| stop $2 |
| ;; |
| status) |
| for b in $BRIDGES ; do |
| ifconfig $bridgeprefix$b |
| brctl showstp $bridgeprefix$b |
| done |
| ;; |
| serverif) |
| serverif $2 |
| ;; |
| restart|reload) |
| stop |
| start |
| ;; |
| *) |
| echo $"Usage: $0 {start|stop|status|restart|reload}" |
| exit 1 |
| esac |
| |
| exit $RETVAL |