home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / rescue / etc / sysconfig / network / scripts / ifup-bridge < prev    next >
Text File  |  2006-11-29  |  5KB  |  185 lines

  1. #!/bin/bash
  2. #
  3. # Copyright (c) 2005 SUSE Linux Products GmbH Nuernberg, Germany.
  4. # All rights reserved.
  5. #
  6. # Author: 
  7. #    Stefan Scheler <sscheler@suse.de> 
  8. #
  9. # Based on a patch by:
  10. #    Jan Engelhardt <jengelh@linux01.gwdg.de>
  11. #
  12.  
  13. usage () {
  14.     echo $@
  15.     echo "usage: if{up,down,status}-bridge [<config>] <hwdesc> [-o <options>]"
  16.     echo "  hwdesc may be the interface name or any valid description"
  17.     echo "  of the corresponding device, for details see ifup(8)."
  18.     echo
  19.     echo "Options are:"
  20.     echo "    [on]boot : we are currently booting (or shutting down)"
  21.     echo "    auto     : alias for boot"
  22.     echo "    hotplug  : we are handling a hotplug event"
  23.     echo "    debug    : be verbose"
  24.     exit $R_USAGE
  25. }
  26.  
  27. ######################################################################
  28. # change the working direcory and source some common files
  29. #
  30. R_INTERNAL=1      # internal error, e.g. no config or missing scripts
  31. cd /etc/sysconfig/network || exit $R_INTERNAL
  32. test -f ./config && . ./config
  33. test -f scripts/functions && . scripts/functions || exit $R_INTERNAL
  34. test -f /sbin/getcfg || exit $R_INTERNAL
  35.  
  36. ######################################################################
  37. # check arguments and how we are called (in case of links)
  38. #
  39. SCRIPTNAME=${0##*/}
  40. debug $*
  41. ACTION=${SCRIPTNAME#if}
  42. ACTION=${ACTION%%-bridge}
  43. case "${ACTION}" in
  44.     up|status|down) ;;
  45.     *) usage
  46. esac
  47. INTERFACE=$1
  48. case "$INTERFACE" in ""|-h|*help*) usage; esac
  49. shift
  50. if [ -n "$1" -a "$1" != "-o" ] ; then
  51.     CONFIG=$INTERFACE
  52.     INTERFACE=$1
  53. fi
  54. shift
  55. test "$1" = "-o" && shift
  56. OPTIONS="$@"
  57. MODE=manual
  58. while [ $# -gt 0 ]; do
  59.     case $1 in
  60.         boot|onboot) MODE=auto ;;
  61.         hotplug)     MODE=auto ;;
  62.         auto)        MODE=auto ;;
  63.         quiet)       be_quiet_has_gone ;;
  64.         debug)       DEBUG=yes ;;
  65.         *)           debug unknown option $1 ;;
  66.     esac
  67.     shift
  68. done
  69.  
  70. ######################################################################
  71. # Check needed tools
  72. #
  73. if ! [ -x /sbin/brctl ]; then
  74.     logerror "bride-utils not installed"
  75.     exit $R_INTERNAL
  76. fi
  77.  
  78. ######################################################################
  79. # check presence of configuration file and source it
  80. #
  81. test -f ./ifcfg-$CONFIG && . ./ifcfg-$CONFIG
  82.  
  83. ######################################################################
  84. case $ACTION in
  85. up)
  86.  
  87.     ######################################################################
  88.     # Bridge setup
  89.     #
  90.     printf "    %-9s " "$INTERFACE"
  91.  
  92.     # Add bridge
  93.     brctl show | grep -v "bridge id" | grep "^$INTERFACE" &>/dev/null
  94.     case "$?" in
  95.     0)
  96.         logerror "Warning: Bridge $INTERFACE already up!"
  97.         exit $R_ERROR
  98.         ;;
  99.     *)
  100.         MESSAGE=`brctl addbr "$INTERFACE"`
  101.         if [ $? -ne 0 ]; then
  102.             logerror "Error: failed to add bridge $INTERFACE: $MESSAGE"
  103.             exit $R_ERROR
  104.         fi
  105.         ;;
  106.     esac
  107.  
  108.     # Add ports
  109.     echo -en "Ports:"
  110.     COUNTER=1
  111.     for p in $BRIDGE_PORTS; do
  112.         PORT_INTERFACE=`getcfg-interface $p`
  113.         MESSAGE=`ip link set dev "$PORT_INTERFACE" up && brctl addif "$INTERFACE" "$PORT_INTERFACE"`
  114.         if [ $? -ne 0 ]; then
  115.             logerror " Warning: failed to bring $PORT_INTERFACE up: $MESSAGE"
  116.         else
  117.             # set path costs
  118.             if [ -n "$BRIDGE_PATHCOSTS" ]; then
  119.                 COSTS=`echo $BRIDGE_PATHCOSTS | cut -d\  -f $COUNTER`
  120.                 brctl setpathcost $INTERFACE $PORT_INTERFACE $COSTS
  121.             fi
  122.             # set port prio
  123.             if [ -n "$BRIDGE_PORTPRIORITIES" ]; then
  124.                 PRIO=`echo $BRIDGE_PORTPRIORITIES | cut -d\  -f $COUNTER`
  125.                 brctl setportprio $INTERFACE $PORT_INTERFACE $PRIO
  126.             fi
  127.             echo -en " [$p]"
  128.         fi
  129.         COUNTER=$[$COUNTER+1]
  130.     done
  131.     echo -en "\n";
  132.  
  133.     # Set flags
  134.     [ -n "$BRIDGE_AGEINGTIME" ] && brctl setageing     "$INTERFACE" "$BRIDGE_AGEINGTIME"
  135.     [ -n "$BRIDGE_STP"        ] && brctl stp           "$INTERFACE" "$BRIDGE_STP"
  136.     [ -n "$BRIDGE_PRIORITY"   ] && brctl setbridgeprio "$INTERFACE" "$BRIDGE_PRIORITY"
  137.     [ -n "$BRIDGE_FORWARDDELAY" ] && brctl setfd       "$INTERFACE" "$BRIDGE_FORWARDDELAY"
  138.     [ -n "$BRIDGE_HELLOTIME"  ] && brctl sethello      "$INTERFACE" "$BRIDGE_HELLOTIME"
  139.     [ -n "$BRIDGE_MAXAGE"     ] && brctl setmaxage     "$INTERFACE" "$BRIDGE_MAXAGE"
  140.  
  141.     RETVAL=$R_SUCCESS
  142.     ;;
  143. down)
  144.  
  145.     ######################################################################
  146.     # Bridge shutdown
  147.     #
  148.     brctl show | grep -v "bridge id" | grep "^$INTERFACE" &>/dev/null
  149.     if [ $? -eq 0 ]; then
  150.         MESSAGE=`brctl delbr "$INTERFACE"`
  151.         if [ $? -ne 0 ]; then
  152.             logmessage "Error: failed to delete bridge $INTERFACE: $MESSAGE"
  153.             exit $R_STATUS
  154.         fi
  155.         for p in $BRIDGE_PORTS; do
  156.             PORT_INTERFACE=`getcfg-interface $p`
  157.             MESSAGE=`ip link set dev "$PORT_INTERFACE" down`
  158.             if [ $? -ne 0 ]; then
  159.                 logmessage "Warning: failed to bring $p down: $MESSAGE"
  160.             fi
  161.         done
  162.     fi
  163.     RETVAL=$R_SUCCESS
  164.     ;;
  165. status)
  166.  
  167.     ######################################################################
  168.     # Bridge status
  169.     #
  170.     if is_iface_up $INTERFACE ; then
  171.         # do not show status output on boot, this may log
  172.         # the WEP key in the boot log
  173.         if [ "$MODE" != onboot ]; then
  174.             brctl show $INTERFACE
  175.             brctl showstp $INTERFACE
  176.         fi
  177.         RETVAL=$R_SUCCESS
  178.     else
  179.         RETVAL=$R_NOTRUNNING
  180.     fi
  181.     ;;
  182. esac
  183.  
  184. exit $RETVAL
  185.