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