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-autoip < prev    next >
Text File  |  2006-11-29  |  6KB  |  198 lines

  1. #! /bin/bash
  2. #
  3. # Copyright (c) 2002 SuSE Linux AG Nuernberg, Germany. All rights reserved.
  4. # This program is free software; you can redistribute it and/or modify it under
  5. # the terms of the GNU General Public License as published by the Free Software
  6. # Foundation; either version 2 of the License, or (at your option) any later
  7. # version.
  8. #
  9. # This program is distributed in the hope that it will be useful, but WITHOUT
  10. # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  11. # FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  12. # details.
  13. #
  14. # You should have received a copy of the GNU General Public License along with
  15. # this program; if not, write to the Free Software Foundation, Inc., 59 Temple
  16. # Place, Suite 330, Boston, MA 02111-1307 USA
  17. #
  18. # Author: Michael Schroeder <mls@suse.de>, 2004
  19. #
  20.  
  21. usage () {
  22.     echo $@
  23.     echo "Usage: if{up,down,status}-autoip [<config>] <hwdesc> [-o <options>]"
  24.     echo "  hwdesc may be the interface name or any valid description"
  25.     echo "  of the corresponding device, for details see ifup(8)."
  26.     echo "Options are: boot         : we are currently booting"
  27.     echo "             hotplug      : we are handling a hotplug event"
  28.     echo "All other or wrong options are silently ignored."
  29.     exit $R_USAGE
  30. }
  31.  
  32. ######################################################################
  33. # change the working direcory and source some common files
  34. #
  35. R_INTERNAL=1      # internal error, e.g. no config or missing scripts
  36. cd /etc/sysconfig/network || exit $R_INTERNAL
  37. test -f ./config && . ./config
  38. test -f scripts/functions && . scripts/functions || exit $R_INTERNAL
  39.  
  40. ######################################################################
  41. # check arguments and how we are called (in case of links)
  42. #
  43. SCRIPTNAME=${0##*/}
  44. debug $*
  45.  
  46. case "${SCRIPTNAME}" in
  47.     ifup-*) ACTION=start ;;
  48.     ifdown-*) ACTION=stop ;;
  49.     ifstatus-*) ACTION=status ;;
  50.     *) usage
  51. esac
  52.  
  53. INTERFACE=$1
  54. case "$INTERFACE" in ""|-h|*help*) usage; esac
  55. shift
  56. if [ -n "$1" -a "$1" != "-o" ] ; then
  57.     CONFIG=$INTERFACE
  58.     INTERFACE=$1
  59. fi
  60. shift
  61. test "$1" = "-o" && shift
  62. OPTIONS="$@"
  63. MODE=manual
  64. PREPARE=
  65. while [ $# -gt 0 ]; do
  66.     case $1 in
  67.         boot|onboot) MODE=onboot ;;
  68.         hotplug)     MODE=hotplug ;;
  69.         prepare)     PREPARE=yes ;;
  70.         quiet)       be_quiet_has_gone ;;
  71.         debug)       DEBUG=yes ;;
  72.         rc)          RUN_FROM_RC=yes ;;
  73.         *)           debug unknown option $1 ;;
  74.     esac
  75.     shift
  76. done
  77.  
  78. test -n "$PREPARE" -a "$ACTION" != start && exit $R_SUCCESS
  79.  
  80. ######################################################################
  81. # check presence of configuration files
  82. #
  83. test -f ./autoip && . ./autoip
  84. test -f ./ifcfg-$CONFIG && . ./ifcfg-$CONFIG
  85.  
  86. ######################################################################
  87. # get the interface and check if it is up
  88. #
  89. if [ -z "$INTERFACE" ] ; then
  90.     usage "No interface given"
  91. fi
  92. if ! is_iface_available $INTERFACE && [ "$ACTION" = start ] ; then
  93.     logerror "interface ${INTERFACE} is not available"
  94.     exit $R_NODEV
  95. fi
  96.  
  97.  
  98. case "$ACTION" in
  99.     start)
  100.         info=/var/lib/autoip/autoip-$INTERFACE.info
  101.         test -d /var/lib/autoip || mkdir -p /var/lib/autoip # just in case /var is not mounted
  102.  
  103.         status=`/sbin/autoip -q $INTERFACE`
  104.  
  105.         if test -n "$PREPARE" ; then
  106.             test "$status" = BEATEN -o "$status" = CHOOSING -o "$status" = DEFENDING && exit $R_SUCCESS
  107.             ip link set $INTERFACE up
  108.             for a in 1 2 3 4 5; do is_iface_up $INTERFACE && break; sleep 1; done
  109.             # three seconds grace period
  110.             /sbin/autoip -B -g 3 $INTERFACE || exit $R_ERROR
  111.             exit $R_SUCCESS
  112.         fi
  113.  
  114.         ip link set $INTERFACE up ${MTU:+mtu $MTU} \
  115.                                   ${LLADDR:+address $LLADDR} $LINK_OPTIONS
  116.         for a in 1 2 3 4 5; do is_iface_up $INTERFACE && break; sleep 1; done
  117.  
  118.         if test "$RUN_FROM_RC" = yes; then 
  119.             message_n "(autoip) " 
  120.         else
  121.             message_n "Starting autoip on $INTERFACE... "
  122.         fi
  123.         if test "$status" = BEATEN ; then
  124.             message_n "already configured"
  125.             test "$RUN_FROM_RC" = yes || message " "
  126.             exit $R_SUCCESS
  127.         fi
  128.         if test "$status" != CHOOSING -a "$status" != DEFENDING ; then
  129.             /sbin/autoip -B $INTERFACE || exit $R_ERROR
  130.         fi
  131.  
  132.         for ((i=0; i<30; i++)); do 
  133.             pid= status= ipaddr=
  134.             if test -e $info ; then
  135.                 while read l ; do
  136.                 case $l in
  137.                     PID=*)    pid="${l#PID=}" ;;
  138.                     STATUS=*) status="${l#STATUS=}" ;;
  139.                     IPADDR=*) ipaddr="${l#IPADDR=}" ;;
  140.                 esac
  141.                 done < $info
  142.             fi
  143.             test -n "$status" -a "$status" != CHOOSING && break
  144.             test -n "$pid" -a ! -d /proc/$pid && {
  145.                 status=FAILED
  146.                 break
  147.             }
  148.             message_n .\ ; sleep 1
  149.         done
  150.         if test "$status" = BEATEN ; then
  151.             message_n "already configured"
  152.             test "$RUN_FROM_RC" = yes || message " "
  153.             exit $R_SUCCESS
  154.         fi
  155.         if test "$status" != DEFENDING -o ! -n "$ipaddr" ; then
  156.             message_n failed
  157.             test "$RUN_FROM_RC" = yes || message " "
  158.             exit $R_ERROR
  159.         fi
  160.         message_n "IP: $ipaddr"
  161.         test "$RUN_FROM_RC" = yes || message " "
  162.  
  163.         ;;
  164.     stop)
  165.         debug "Shutting down service autoip on $INTERFACE"
  166.         info=/var/lib/autoip/autoip-$INTERFACE.info
  167.             pid=`sed -ne 's/PID=//p' < $info`
  168.             test -n "$pid" && kill $pid
  169.         if [ "$AUTOIP_SET_DOWN_LINK" = yes ] ; then
  170.             ip link set down dev $INTERFACE
  171.         fi
  172.         ;;
  173.     status)
  174.         if checkproc autoip; then 
  175.             message_if_not_run_from_rc autoip running 
  176.         else
  177.             message_if_not_run_from_rc autoip not running
  178.         fi
  179.  
  180.         if test -z "`ip -o -f inet addr show $INTERFACE`"; then
  181.             message_if_not_run_from_rc $INTERFACE not up
  182.             exit $R_NOTRUNNING
  183.         else 
  184.             message_if_not_run_from_rc $INTERFACE is up
  185.             message_if_not_run_from_rc "$(ip addr show $INTERFACE)"
  186.             message_if_not_run_from_rc " "
  187.  
  188.             case "$BOOTPROTO" in 
  189.                 *autoip*) ;;
  190.                 *)      message $INTERFACE not configured for autoip in
  191. /etc/sysconfig/network/ifcfg-$CONFIG 
  192.                     message " "
  193.                     exit $R_NOTCONFIGURED
  194.                     ;;
  195.             esac 
  196.         fi
  197. esac
  198.