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