]> git.pld-linux.org Git - projects/rc-scripts.git/blob - sysconfig/network-scripts/ifup
- fixed DEVICETYPE determination for aliased devices
[projects/rc-scripts.git] / sysconfig / network-scripts / ifup
1 #!/bin/sh
2 #
3 #       $Id: ifup,v 1.48 2000/09/23 20:43:05 saq Exp $
4 #
5 PATH=/sbin:/usr/sbin:/bin:/usr/bin
6
7 . /etc/sysconfig/network
8 . /etc/rc.d/init.d/functions
9 . /etc/sysconfig/network-scripts/.functions
10
11 need_hostname
12
13 DEV=$1
14
15 [ -z "$DEV" ] && {
16     nls "usage: ifup <device name>" >&2
17     exit 1
18 }
19
20 if [ `id -u` != 0 ]; then
21     if [ -x /sbin/usernetctl ]; then
22         exec /sbin/usernetctl $DEV up
23     fi
24     nls "Users cannot control this device." >&2
25     exit 1
26 fi
27
28 if [ -f "/etc/sysconfig/interfaces/ifcfg-$DEV" ] ; then
29         CONFIG="/etc/sysconfig/interfaces/ifcfg-$DEV"
30 else
31         CONFIG="$DEV"
32 fi
33
34 source_config
35
36 if [ "foo$2" = "fooboot" ] && is_no "${ONBOOT}"; then
37     exit
38 fi
39
40 IPSETUP=no
41
42 # full network device name
43 FULLDEVNAME="$DEVICE"
44 # real name of device (is eth0 for eth0,eth0:1,eth0:alias)
45 DEVICE=`echo $FULLDEVNAME | sed 's/:.*//g'`
46 # detect network device type (dummy, eth ..)
47 DEVICETYPE=`echo $DEVICE | sed "s/[0-9]*$//"`
48
49 if echo "$FULLDEVNAME" | grep -q ':' ; then
50     ISALIAS=yes
51 else
52     ISALIAS=no
53 fi
54
55 # Old BOOTP variable
56 if is_yes "$BOOTP"; then
57     BOOTPROTO=bootp
58 fi
59
60 if [ "$BOOTPROTO" = bootp ]; then
61     DYNIP=pump
62 fi
63
64 if [ "$BOOTPROTO" = "dhcp" ]; then
65     DYNIP=dhcpcd
66 fi
67
68 # IPv4, IPv6 or both ?
69 [ -n "$IPV6_ADDR" ]             && IPv6=yes || IPv6=no
70 [ -n "$IPADDR" -o -n "$DYNIP" ] && IPv4=yes || IPv4=no
71
72 # Tunnel device ?
73 [ -f /etc/sysconfig/interfaces/tnlcfg-${FULLDEVNAME} ] && TNL=yes || TNL=no
74
75 if [ "$TNL" = "yes" ]; then
76         TNLOPTS="onlink"
77 fi
78
79 if [ -z "$PREFIX" -a -z "$NETMASK" ]; then
80         PREFIX="32"
81 fi
82
83 if [ -z "$PREFIX" -a -n "$NETMASK" ]; then
84         PREFIX="`calcprefix $NETMASK`"
85 fi
86
87 if [ -z "$NETMASK" -a -n "$PREFIX" ]; then
88         NETMASK="`calcnetmask $PREFIX`"
89 fi
90
91 is_yes "$MULTICAST"     && MULTICAST=on                 || MULTICAST=off
92 [ -n "$SRC_ADDR" ]      && SRC_ADDR="src ${SRC_ADDR}"   || SRC_ADDR=""
93 [ -n "$SCOPE" ]         && SCOPE="scope ${SCOPE}"       || SCOPE=""
94
95 if [ "$ARP" ]; then
96         is_yes "$ARP"    && ARP=on      || ARP=off
97 elif [ "$DEVICETYPE" = "eth" ]; then
98         ARP=on
99 else
100         ARP=off
101 fi
102
103 OTHERSCRIPT="/etc/sysconfig/network-scripts/ifup-${DEVICETYPE}"
104
105 if [ -x "$OTHERSCRIPT" ]; then
106     if [ "$DEFAULTHANDLING" = "yes" ]; then
107         $OTHERSCRIPT $CONFIG $2
108     else
109         exec $OTHERSCRIPT $CONFIG $2
110     fi
111 fi
112
113 # is this device available? (this catches PCMCIA devices for us)
114 if ! (/sbin/ip link set multicast ${MULTICAST} dev ${DEVICE} > /dev/null 2>&1); then
115     echo "Delaying ${FULLDEVNAME} initialization."
116     exit 0
117 fi
118
119 if [ "$SLAVE" = "yes" -a "$ISALIAS" = "no" -a "$MASTER" != "" -a -x /sbin/ifenslave ]; then
120     RFLAG="" ; [ "${RECIEVE-ONLY}" = "yes" ] && RFLAG="-r"
121
122     ip link set ${DEVICE} down
123     echo "Enslaving $DEVICE to $MASTER"
124     ifenslave $RFLAG "$MASTER" "$DEVICE"
125
126     exit 0
127 fi
128
129 if [ -n "$MACADDR" ]; then
130    ip link set ${DEVICE} address ${MACADDR}
131 fi
132
133 if [ -n "$DYNIP" -a "$ISALIAS" = "no" ]; then
134
135     echo -n "`nls "Determining IP information for %s" $FULLDEVNAME...`"
136     if [ "$DYNIP" = "pump" ]; then
137        if /sbin/pump -i $FULLDEVNAME ; then
138           nls " done."
139        else
140           nls " failed."
141           exit 1
142        fi
143     else
144        if /sbin/dhcpcd $FULLDEVNAME "$DHCPOPTIONS" ; then
145           nls " done."
146        else
147           nls " failed."
148           exit 1
149        fi
150     fi
151
152 else
153
154     if [ "$IPv4" = "yes" ]; then
155         if [ -z "$PREFIX" ]; then
156             eval `/bin/ipcalc --prefix ${IPADDR}`
157         fi
158
159         if [ -z "$BROADCAST" ]; then
160             eval `/bin/ipcalc --broadcast ${IPADDR} ${NETMASK}`
161         fi
162
163         if [ -z "$NETWORK" ]; then
164             eval `/bin/ipcalc --network ${IPADDR} ${NETMASK}`
165         fi
166     fi
167
168     ip link set ${DEVICE} multicast ${MULTICAST} arp ${ARP} up
169
170     # IPv4 rules
171     if [ "$IPv4" = "yes" ]; then
172         if [ -n "$REMIP" ]; then
173             ip -family inet addr add ${IPADDR} peer ${REMIP} dev ${DEVICE} label ${FULLDEVNAME} ${SCOPE}
174         else    
175             ip -family inet addr add ${IPADDR}/${PREFIX} broadcast ${BROADCAST} dev ${DEVICE} label ${FULLDEVNAME} ${SCOPE}
176         fi
177         # Another IPv4 aliases support
178         for ADDR4 in ${IPADDR_ALIASES} ; do
179             ip -family inet addr add ${ADDR4} dev ${DEVICE} label ${FULLDEVNAME} broadcast \+
180         done
181     fi
182
183     # IPv6 rules
184     if is_yes "${IPV6_NETWORKING}"; then
185       proc_net ipv6/conf/${DEVICE}/autoconf start 0 1 IPV6_AUTOCONF "IPv6 address autoconfiguration on ${DEVICE}"
186
187       for ADDR6 in ${IPV6_ADDR} ; do
188         ip -family inet6 addr add ${ADDR6} dev ${DEVICE} label ${FULLDEVNAME}
189       done  
190
191       if is_no "${IPV6_FORWARDING}" ; then
192         if [ "${GATEWAY6}" != "" ]; then
193           if [ "${GATEWAY6DEV}" = "" -o "${GATEWAY6DEV}" = "${FULLDEVNAME}" ]; then
194                 # set up default gateway
195                 ip -family inet6 route add default via ${GATEWAY6} dev ${DEVICE}
196           fi
197         fi
198       else
199         if [ "${IPV6_GLOBALROUTE}" != "" ] ; then
200           if [ "${IPV6_GLOBALROUTEDEV}" = "" -o "${IPV6_GLOBALROUTEDEV}" = "${FULLDEVNAME}" ]; then
201             ip -family inet6 route add 2000::/3 via ${IPV6_GLOBALROUTE} dev ${DEVICE}
202           fi
203         fi
204       fi
205     fi
206
207     if [ "${GATEWAY}" != "" ]; then
208         if [ "${GATEWAYDEV}" = "" -o "${GATEWAYDEV}" = "${FULLDEVNAME}" ]; then
209             # set up default gateway
210             ip -family inet route add default via ${GATEWAY} dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS}
211             DEFGW=${GATEWAY}
212         fi
213     fi
214
215     if [ "$BOOTPROTO" = bootp -a "$ISALIAS" = no ]; then
216         if [ -n "$GATEWAYS" ]; then
217             for gw in $GATEWAYS; do
218                 if [ "$gw" != "${DEFGW}" ]; then
219                     ip -family inet route add default via $gw dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS}
220                 fi
221             done
222         fi
223
224         if [ -n "$DNSSRVS" -a -n "$SEARCH" ]; then
225             echo "search $SEARCH" > /etc/resolv.conf
226             for dns in $DNSSRVS; do
227                     echo "nameserver $dns" >> /etc/resolv.conf
228             done
229         fi
230
231         if [ -n "$BOOTPHOSTNAME" -a -n "$NEEDHOSTNAME" ]; then
232             set_hostname $BOOTPHOSTNAME
233         fi
234     fi
235 fi
236
237 if is_yes "$IPX"; then
238         /etc/sysconfig/network-scripts/ifup-ipx $DEVICE
239 fi
240
241 exec /etc/sysconfig/network-scripts/ifup-post $CONFIG
This page took 0.045216 seconds and 3 git commands to generate.