home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / rescue / lib / mkinitrd / bin / ipconfig.sh next >
Linux/UNIX/POSIX Shell Script  |  2006-11-29  |  2KB  |  89 lines

  1. #!/bin/bash
  2. # <client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
  3. #
  4.  
  5. # Calculate the prefix to a given netmask
  6. calc_prefix() {
  7.     local netmask=$1
  8.     local prefix
  9.  
  10.     set -- $(IFS=.; echo $netmask)
  11.  
  12.     # Analyze each block
  13.     prefix=0
  14.     while [ "$1" ] && (( $1 == 255 )); do
  15.     prefix=$(($prefix + 8))
  16.     shift
  17.     done
  18.     # Bit-shift first non-zero block
  19.     if [ "$1" ] && (( $1 > 0 )); then
  20.     mask=$1
  21.     prefix=$(($prefix + 8))
  22.     while (( ($mask & 0x1) == 0 )) ; do
  23.         mask=$(( $mask >> 1 ))
  24.         prefix=$(($prefix - 1))
  25.     done
  26.     fi
  27.     echo $prefix
  28. }
  29.  
  30. ipcfg=$(echo $1 | sed 's/::/:_:/g')
  31.  
  32. set -- $(IFS=: ; echo $ipcfg )
  33.  
  34. client=$1
  35. shift
  36. if [ "$1" != "_" ] ; then
  37.     peer=$1
  38. fi
  39. shift
  40. if [ "$1" != "_" ] ; then
  41.     gateway=$1
  42. fi
  43. shift
  44. if [ "$1" != "_" ] ; then
  45.     netmask=$1
  46. fi
  47. shift
  48. if [ "$1" != "_" ] ; then
  49.     hostname=$1
  50. fi
  51. shift
  52. if [ "$1" != "_" ] ; then
  53.     dev=$1
  54. else
  55.     dev=eth0
  56. fi
  57. shift
  58. if [ "$1" != "_" ] ; then
  59.     mode=$1
  60. fi
  61. shift
  62.  
  63. if [ "$mode" ] ; then
  64.     echo "Ignoring mode $mode, using static configuration"
  65. fi
  66.  
  67. # Calculate the prefix
  68. prefix=${client%%*/}
  69. if [ "$prefix" == "$client" ] ; then
  70.     if [ -n "$netmask" ] ; then
  71.     prefix=$(calc_prefix $netmask)
  72.     else
  73.     prefix=24
  74.     fi
  75. fi
  76.  
  77. # Configure the interface
  78. if [ "$peer" ] ; then
  79.     /sbin/ip addr add ${client} peer ${peer}/$prefix dev $dev
  80. else
  81.     /sbin/ip addr add ${client}/${prefix} dev $dev
  82. fi
  83. /sbin/ip link set $dev up
  84.  
  85. if [ "$gateway" ]; then
  86.     /sbin/ip route add to default via ${gateway}
  87. fi
  88.