]>
Commit | Line | Data |
---|---|---|
6955eb97 | 1 | #!/bin/sh |
b0443108 | 2 | # |
458f14b7 | 3 | # $Id: ifup,v 1.34 1999/12/15 18:41:09 misiek Exp $ |
b0443108 | 4 | # |
7742e157 AF |
5 | PATH=/sbin:/usr/sbin:/bin:/usr/bin |
6 | ||
7e04fe0e | 7 | . /etc/sysconfig/network |
f3002e12 | 8 | . /etc/rc.d/init.d/functions |
8b3e2b71 | 9 | . /etc/sysconfig/network-scripts/.functions |
7742e157 AF |
10 | |
11 | need_hostname | |
12 | ||
111f7a0d | 13 | DEV=$1 |
7742e157 | 14 | |
111f7a0d | 15 | [ -z "$DEV" ] && { |
12de71be | 16 | echo "usage: ifup <device name>" >&2 |
7742e157 AF |
17 | exit 1 |
18 | } | |
19 | ||
6955eb97 | 20 | if [ `id -u` != 0 ]; then |
7742e157 | 21 | if [ -x /usr/sbin/usernetctl ]; then |
111f7a0d | 22 | exec /usr/sbin/usernetctl $DEV up |
7742e157 AF |
23 | fi |
24 | echo "Users cannot control this device." >&2 | |
25 | exit 1 | |
26 | fi | |
27 | ||
458f14b7 | 28 | IFCONFIGS="`ls /etc/sysconfig/interfaces/ifcfg-*|egrep -v '~$' 2> /dev/null`" |
9a5aecd2 AF |
29 | if [ "$IFCONFIGS" ]; then |
30 | IFCONFIGS="`egrep -L '^#!' $IFCONFIGS`" | |
31 | fi | |
32 | if [ "$IFCONFIGS" ]; then | |
33 | CONFIG="`egrep -l "^DEVICE=[\"\']*$DEV[\"\']*\$" $IFCONFIGS`" | |
34 | fi | |
111f7a0d AF |
35 | |
36 | if [ -z "$CONFIG" ]; then | |
37 | CONFIG="$DEV" | |
38 | fi | |
39 | ||
7742e157 AF |
40 | source_config |
41 | ||
830949ca | 42 | if [ "foo$2" = "fooboot" -a "${ONBOOT}" = "no" ]; then |
7742e157 AF |
43 | exit |
44 | fi | |
45 | ||
46 | IPSETUP=no | |
47 | ||
54d39674 | 48 | # full network device name |
4ac87c24 | 49 | FULLDEVNAME="$DEVICE" |
54d39674 | 50 | # detect network device type (dummy, eth ..) |
4ac87c24 AM |
51 | DEVICETYPE=`echo $FULLDEVNAME | sed "s/[0-9]*$//"` |
52 | # przyjmuje eth0 przy {eth0,eth0:1,eth0:alias} | |
53 | DEVICE=`echo $FULLDEVNAME | sed 's/:.*//g'` | |
c24e165d | 54 | |
38198f50 | 55 | if echo "$FULLDEVNAME" | grep -q ':' ; then |
7742e157 AF |
56 | ISALIAS=yes |
57 | else | |
58 | ISALIAS=no | |
59 | fi | |
60 | ||
61 | # Old BOOTP variable | |
830949ca | 62 | if [ "$BOOTP" = "yes" ]; then |
7742e157 AF |
63 | BOOTPROTO=bootp |
64 | fi | |
65 | ||
830949ca | 66 | if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = "dhcp" ]; then |
d29c401a AM |
67 | PUMP=true |
68 | fi | |
69 | ||
a9a97bf4 | 70 | # IPv4, IPv6 or both ? |
458f14b7 | 71 | [ -n "$IPV6_ADDR" ] && IPv6=yes || IPv6=no |
830949ca | 72 | [ -n "$IPADDR" -o "$PUMP" = "true" ] && IPv4=yes || IPv4=no |
38198f50 | 73 | |
d3f070c8 AM |
74 | # Tunnel device ? |
75 | [ -f /etc/sysconfig/interfaces/tnlcfg-${FULLDEVNAME} ] && TNL=yes || TNL=no | |
76 | ||
830949ca | 77 | if [ "$TNL" = "yes" ]; then |
d3f070c8 AM |
78 | TNLOPTS="onlink" |
79 | fi | |
80 | ||
458f14b7 AM |
81 | if [ -z "$PREFIX" -a -z "$NETMASK" ]; then |
82 | PREFIX="32" | |
83 | fi | |
84 | ||
85 | if [ -z "$PREFIX" -a -n "$NETMASK" ]; then | |
0a3cf6ac | 86 | PREFIX="`calcprefix $NETMASK`" |
a9a97bf4 | 87 | fi |
4ac87c24 | 88 | |
458f14b7 | 89 | if [ -z "$NETMASK" -a -n "$PREFIX" ]; then |
0a3cf6ac | 90 | NETMASK="`calcnetmask $PREFIX`" |
4ac87c24 AM |
91 | fi |
92 | ||
830949ca | 93 | [ "$MULTICAST" = "yes" ] && MULTICAST=on || MULTICAST=off |
62c4265e AM |
94 | [ -n "$SRC_ADDR" ] && SRC_ADDR="src ${SRC_ADDR}" || SRC_ADDR="" |
95 | [ -z "$PROTOCOL" ] && PROTOCOL=ip | |
96 | ||
032ef40b | 97 | if [ "$ARP" ]; then |
830949ca | 98 | [ "$ARP" = "yes" ] && ARP=on || ARP=off |
032ef40b AF |
99 | elif [ "$DEVICETYPE" = "eth" ]; then |
100 | ARP=on | |
101 | else | |
102 | ARP=off | |
103 | fi | |
104 | ||
7742e157 AF |
105 | OTHERSCRIPT="/etc/sysconfig/network-scripts/ifup-${DEVICETYPE}" |
106 | ||
830949ca | 107 | if [ -x "$OTHERSCRIPT" -a "$IPv4" = "yes" ]; then |
108 | if [ "$DEFAULTHANDLING" = "yes" ]; then | |
035f0806 | 109 | $OTHERSCRIPT $CONFIG $2 |
110 | else | |
111 | exec $OTHERSCRIPT $CONFIG $2 | |
112 | fi | |
7742e157 AF |
113 | fi |
114 | ||
115 | # is this device available? (this catches PCMCIA devices for us) | |
d3f070c8 | 116 | if ! (/sbin/ip link set multicast ${MULTICAST} dev ${DEVICE} > /dev/null 2>&1); then |
4ac87c24 | 117 | echo "Delaying ${FULLDEVNAME} initialization." |
7742e157 AF |
118 | exit 0 |
119 | fi | |
120 | ||
830949ca | 121 | if [ "$SLAVE" = "yes" -a "$ISALIAS" = "no" -a "$MASTER" != "" -a -x /sbin/ifenslave ]; then |
122 | RFLAG="" ; [ "${RECIEVE-ONLY}" = "yes" ] && RFLAG="-r" | |
7742e157 | 123 | |
4ac87c24 | 124 | ip link set ${DEVICE} down |
7742e157 | 125 | echo "Enslaving $DEVICE to $MASTER" |
d29c401a | 126 | ifenslave $RFLAG "$MASTER" "$DEVICE" |
7742e157 AF |
127 | |
128 | exit 0 | |
129 | fi | |
130 | ||
026cd72c AM |
131 | if [ -n "$MACADDR" ]; then |
132 | ip link set ${DEVICE} address ${MACADDR} | |
d29c401a | 133 | fi |
7742e157 | 134 | |
458f14b7 | 135 | if [ -n "$PUMP" -a "$ISALIAS" = "no" ]; then |
4ac87c24 | 136 | |
54d39674 | 137 | echo -n "Determining IP information for $FULLDEVNAME..." |
138 | if /sbin/pump -i $FULLDEVNAME ; then | |
d29c401a | 139 | echo " done." |
7742e157 | 140 | else |
d29c401a AM |
141 | echo " failed." |
142 | exit 1 | |
7742e157 | 143 | fi |
d29c401a AM |
144 | |
145 | else | |
7742e157 | 146 | |
830949ca | 147 | if [ "$IPv4" = "yes" ]; then |
80fd83b6 | 148 | if [ -z "$PREFIX" ]; then |
bd69a65a | 149 | eval `/bin/ipcalc --prefix ${IPADDR}` |
7742e157 AF |
150 | fi |
151 | ||
152 | if [ -z "$BROADCAST" ]; then | |
153 | eval `/bin/ipcalc --broadcast ${IPADDR} ${NETMASK}` | |
154 | fi | |
155 | ||
156 | if [ -z "$NETWORK" ]; then | |
157 | eval `/bin/ipcalc --network ${IPADDR} ${NETMASK}` | |
158 | fi | |
38198f50 | 159 | fi |
7742e157 | 160 | |
62c4265e | 161 | ip link set ${DEVICE} multicast ${MULTICAST} arp ${ARP} up |
38198f50 | 162 | |
830949ca | 163 | if [ "$IPv4" = "yes" ]; then |
38198f50 | 164 | ip -family inet addr add ${IPADDR}/${PREFIX} broadcast ${BROADCAST} dev ${DEVICE} label ${FULLDEVNAME} |
8092fc90 AM |
165 | |
166 | # Another IPv4 aliases support | |
167 | for ADDR4 in ${IPADDR_ALIASES} ; do | |
168 | ip -family inet addr add ${ADDR4} dev ${DEVICE} label ${FULLDEVNAME} broadcast \+ | |
169 | done | |
38198f50 | 170 | fi |
6955eb97 | 171 | |
62c4265e AM |
172 | |
173 | # IPv6 rules | |
830949ca | 174 | if [ "${IPV6_NETWORKING}" = "yes" ] ; then |
8092fc90 AM |
175 | |
176 | for ADDR6 in ${IPV6_ADDR} ; do | |
177 | ip -family inet6 addr add ${ADDR6} dev ${DEVICE} label ${FULLDEVNAME} | |
d3f070c8 | 178 | ip -family inet6 route add ${ADDR6} dev ${DEVICE} ${TNLOPTS} |
6955eb97 | 179 | done |
8092fc90 | 180 | |
b568fc8c | 181 | # only for sit tunnel device |
830949ca | 182 | if (ip tunnel show ${FULLDEVNAME} 2>&1 | grep -q "ipv6/ip") && [ "$TNL" = "yes" ]; then |
8092fc90 | 183 | |
b568fc8c AM |
184 | for ADDR4 in `ip -4 addr | grep inet | grep -v "127\..*\..*\..*" | \ |
185 | sed -e "s#.*inet ##" | sed -e "s#/.*##" | xargs`; do | |
186 | ip -family inet6 addr add fe80::${ADDR4}/10 dev ${DEVICE} \ | |
187 | label ${FULLDEVNAME} scope link 2> /dev/null | |
8092fc90 AM |
188 | done |
189 | ||
d422d060 | 190 | fi |
8092fc90 | 191 | |
6955eb97 | 192 | fi |
d29c401a AM |
193 | |
194 | # hack for 2.2 kernels | |
830949ca | 195 | if [ "$IPv4" = "yes" ]; then |
458f14b7 | 196 | if [ "$ISALIAS" = "no" -a -z "`ip -f inet route | sed "s/ .*//" | grep ${NETWORK}`" ]; then |
d3f070c8 | 197 | ip -family inet route add ${NETWORK}/${PREFIX} dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS} |
12de71be | 198 | else |
d3f070c8 | 199 | ip -family inet route add ${IPADDR}/32 dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS} |
12de71be | 200 | fi |
38198f50 | 201 | fi |
12de71be | 202 | |
111f7a0d | 203 | # . /etc/sysconfig/network |
7742e157 AF |
204 | |
205 | if [ "${GATEWAY}" != "" ]; then | |
54d39674 | 206 | if [ "${GATEWAYDEV}" = "" -o "${GATEWAYDEV}" = "${FULLDEVNAME}" ]; then |
7742e157 | 207 | # set up default gateway |
d3f070c8 | 208 | ip -family inet route add default via ${GATEWAY} dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS} |
7742e157 AF |
209 | DEFGW=${GATEWAY} |
210 | fi | |
211 | fi | |
212 | ||
213 | if [ "$BOOTPROTO" = bootp -a "$ISALIAS" = no ]; then | |
214 | if [ -n "$GATEWAYS" ]; then | |
215 | for gw in $GATEWAYS; do | |
4ac87c24 | 216 | if [ "$gw" != "${DEFGW}" ]; then |
d3f070c8 | 217 | ip -family inet route add default via $gw dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS} |
7742e157 AF |
218 | fi |
219 | done | |
220 | fi | |
221 | ||
222 | if [ -n "$DNSSRVS" -a -n "$SEARCH" ]; then | |
223 | echo "search $SEARCH" > /etc/resolv.conf | |
224 | for dns in $DNSSRVS; do | |
225 | echo "nameserver $dns" >> /etc/resolv.conf | |
226 | done | |
227 | fi | |
228 | ||
229 | if [ -n "$BOOTPHOSTNAME" -a -n "$NEEDHOSTNAME" ]; then | |
230 | set_hostname $BOOTPHOSTNAME | |
231 | fi | |
232 | fi | |
233 | fi | |
7742e157 | 234 | |
830949ca | 235 | if [ "$IPX" = "yes" ]; then |
12de71be | 236 | /etc/sysconfig/network-scripts/ifup-ipx $DEVICE |
237 | fi | |
7742e157 AF |
238 | |
239 | exec /etc/sysconfig/network-scripts/ifup-post $CONFIG |