]>
Commit | Line | Data |
---|---|---|
6955eb97 | 1 | #!/bin/sh |
b0443108 | 2 | # |
c56277ee | 3 | # $Id: ifup,v 1.62 2001/06/26 14:53:27 marcus 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" ] && { |
1c4ce04c | 16 | nls "usage: ifup <device name>" >&2 |
7742e157 AF |
17 | exit 1 |
18 | } | |
19 | ||
6955eb97 | 20 | if [ `id -u` != 0 ]; then |
1c4ce04c | 21 | if [ -u /sbin/usernetctl ]; then |
f70b001b | 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 | ||
1c4ce04c | 42 | # full network device name |
43 | FULLDEVNAME="$DEVICE" | |
44 | # detect network device type (ie. dummy, eth for dummy0, eth0 ..) | |
45 | DEVICETYPE=$(echo $DEVICE | awk ' { gsub(/[0-9]\.[0-9]*$/,NUL); print $0 } ') | |
46 | # real name of device (ie. is eth0 for eth0,eth0:1,eth0:alias) | |
47 | DEVICE=$(echo $DEVICE | awk ' { gsub(/:.*$/,NUL); print $0 } ') | |
48 | ||
49 | if echo "$FULLDEVNAME" | grep -q ':' ; then | |
50 | ISALIAS=yes | |
51 | else | |
52 | ISALIAS=no | |
53 | fi | |
54 | ||
55 | # 802.1Q VLANs | |
56 | vlan_setup | |
57 | if is_yes $ETH_VLANS && echo "$DEVICE" | grep -q '\.' ; then | |
58 | VLANDEVICE=$(echo $DEVICE | awk ' { gsub(/\..*$/,NUL); print $0 } ') | |
59 | VLANNUMBER=$(echo $DEVICE | awk " { gsub(/$VLANDEVICE\./,NUL); print \$0 } ") | |
60 | /sbin/ip link set $VLANDEVICE up | |
61 | /sbin/vconfig add $VLANDEVICE $VLANNUMBER 2>&1 > /dev/null | |
c56277ee | 62 | /sbin/vconfig set_flag $DEVICE 1 2>&1 > /dev/null |
1c4ce04c | 63 | fi |
64 | ||
65 | # Old BOOTP variable | |
66 | if is_yes "$BOOTP"; then | |
67 | BOOTPROTO=bootp | |
68 | fi | |
69 | ||
70 | if [ "$BOOTPROTO" = bootp ]; then | |
71 | DYNIP=pump | |
72 | fi | |
73 | ||
74 | if [ "$BOOTPROTO" = "dhcp" ]; then | |
75 | DYNIP=dhcpcd | |
76 | fi | |
77 | ||
78 | # IPv4, IPv6 or both ? | |
79 | [ -n "$IPV6_ADDR" ] && IPv6=yes || IPv6=no | |
80 | [ -n "$IPADDR" -o -n "$DYNIP" ] && IPv4=yes || IPv4=no | |
81 | ||
82 | # Tunnel device ? | |
83 | [ -f /etc/sysconfig/interfaces/tnlcfg-${FULLDEVNAME} ] && TNL=yes || TNL=no | |
84 | ||
85 | if [ "$TNL" = "yes" ]; then | |
86 | TNLOPTS="onlink" | |
87 | fi | |
88 | ||
89 | if [ -z "$PREFIX" -a -z "$NETMASK" ]; then | |
90 | PREFIX="32" | |
91 | fi | |
92 | ||
93 | if [ -z "$PREFIX" -a -n "$NETMASK" ]; then | |
94 | PREFIX="`calcprefix $NETMASK`" | |
95 | fi | |
96 | ||
97 | if [ -z "$NETMASK" -a -n "$PREFIX" ]; then | |
98 | NETMASK="`calcnetmask $PREFIX`" | |
99 | fi | |
100 | ||
101 | is_yes "$MULTICAST" && MULTICAST=on || MULTICAST=off | |
102 | [ -n "$SRC_ADDR" ] && SRC_ADDR="src ${SRC_ADDR}" || SRC_ADDR="" | |
103 | [ -n "$SCOPE" ] && SCOPE="scope ${SCOPE}" || SCOPE="" | |
104 | ||
105 | if [ "$ARP" ]; then | |
106 | is_yes "$ARP" && ARP=on || ARP=off | |
107 | elif [ "$DEVICETYPE" = "eth" ]; then | |
108 | ARP=on | |
109 | else | |
110 | ARP=off | |
111 | fi | |
032ef40b | 112 | |
7742e157 AF |
113 | OTHERSCRIPT="/etc/sysconfig/network-scripts/ifup-${DEVICETYPE}" |
114 | ||
f70b001b | 115 | if [ -x "$OTHERSCRIPT" ]; then |
1c4ce04c | 116 | if [ "$DEFAULTHANDLING" = "yes" ]; then |
035f0806 | 117 | $OTHERSCRIPT $CONFIG $2 |
1c4ce04c | 118 | else |
119 | exec $OTHERSCRIPT $CONFIG $2 | |
035f0806 | 120 | fi |
7742e157 AF |
121 | fi |
122 | ||
123 | # is this device available? (this catches PCMCIA devices for us) | |
d3f070c8 | 124 | if ! (/sbin/ip link set multicast ${MULTICAST} dev ${DEVICE} > /dev/null 2>&1); then |
1c4ce04c | 125 | echo "Delaying ${FULLDEVNAME} initialization." |
126 | exit 0 | |
7742e157 AF |
127 | fi |
128 | ||
1c4ce04c | 129 | if [ "$SLAVE" = "yes" -a "$ISALIAS" = "no" -a "$MASTER" != "" -a -x /sbin/ifenslave ]; then |
130 | RFLAG="" ; [ "${RECIEVE-ONLY}" = "yes" ] && RFLAG="-r" | |
7742e157 | 131 | |
4ac87c24 | 132 | ip link set ${DEVICE} down |
1c4ce04c | 133 | echo "Enslaving $DEVICE to $MASTER" |
d29c401a | 134 | ifenslave $RFLAG "$MASTER" "$DEVICE" |
7742e157 AF |
135 | |
136 | exit 0 | |
137 | fi | |
138 | ||
026cd72c AM |
139 | if [ -n "$MACADDR" ]; then |
140 | ip link set ${DEVICE} address ${MACADDR} | |
d29c401a | 141 | fi |
7742e157 | 142 | |
1c4ce04c | 143 | if [ -n "$DYNIP" -a "$ISALIAS" = "no" ]; then |
144 | ||
145 | echo -n "`nls 'Determining IP information for %s' $FULLDEVNAME'...'`" | |
146 | if [ "$DYNIP" = "pump" ]; then | |
147 | if /sbin/pump -i $FULLDEVNAME ; then | |
148 | nls " done." | |
149 | else | |
150 | nls " failed." | |
151 | exit 1 | |
152 | fi | |
153 | else | |
154 | if /sbin/dhcpcd $FULLDEVNAME $DHCPOPTIONS ; then | |
155 | nls " done." | |
156 | else | |
157 | nls " failed." | |
158 | exit 1 | |
159 | fi | |
160 | fi | |
7742e157 | 161 | |
1c4ce04c | 162 | else |
7742e157 | 163 | |
1c4ce04c | 164 | if [ "$IPv4" = "yes" ]; then |
165 | if [ -z "$PREFIX" ]; then | |
166 | eval `/bin/ipcalc --prefix ${IPADDR}` | |
167 | fi | |
7742e157 | 168 | |
1c4ce04c | 169 | if [ -z "$BROADCAST" ]; then |
170 | eval `/bin/ipcalc --broadcast ${IPADDR} ${NETMASK}` | |
171 | fi | |
de1fc6ce | 172 | |
1c4ce04c | 173 | if [ -z "$NETWORK" ]; then |
174 | eval `/bin/ipcalc --network ${IPADDR} ${NETMASK}` | |
175 | fi | |
7742e157 AF |
176 | fi |
177 | ||
1c4ce04c | 178 | # IPv4 rules |
179 | if [ "$IPv4" = "yes" ]; then | |
45179bbf | 180 | if [ -n "$REMIP" ]; then |
1c4ce04c | 181 | ip -family inet addr add ${IPADDR} peer ${REMIP} dev ${DEVICE} label ${FULLDEVNAME} ${SCOPE} |
182 | else | |
183 | ip -family inet addr add ${IPADDR}/${PREFIX} broadcast ${BROADCAST} dev ${DEVICE} label ${FULLDEVNAME} ${SCOPE} | |
7742e157 | 184 | fi |
1c4ce04c | 185 | # Another IPv4 aliases support |
186 | for ADDR4 in ${IPADDR_ALIASES} ; do | |
187 | ip -family inet addr add ${ADDR4} dev ${DEVICE} label ${FULLDEVNAME} broadcast \+ | |
188 | done | |
7742e157 | 189 | fi |
de1fc6ce | 190 | |
1c4ce04c | 191 | ip link set ${DEVICE} multicast ${MULTICAST} arp ${ARP} up |
192 | ||
193 | # IPv6 rules | |
194 | if is_yes "${IPV6_NETWORKING}"; then | |
195 | proc_net ipv6/conf/${DEVICE}/autoconf start 0 1 IPV6_AUTOCONF "IPv6 address autoconfiguration on ${DEVICE}" | |
196 | ||
197 | for ADDR6 in ${IPV6_ADDR} ; do | |
198 | ip -family inet6 addr add ${ADDR6} dev ${DEVICE} label ${FULLDEVNAME} | |
199 | done | |
de1fc6ce | 200 | |
1c4ce04c | 201 | if is_no "${IPV6_FORWARDING}" ; then |
202 | if [ "${GATEWAY6}" != "" ]; then | |
203 | if [ "${GATEWAY6DEV}" = "" -o "${GATEWAY6DEV}" = "${FULLDEVNAME}" ]; then | |
204 | # set up default gateway | |
205 | ip -family inet6 route add default via ${GATEWAY6} dev ${DEVICE} | |
206 | fi | |
207 | fi | |
208 | else | |
209 | if [ "${IPV6_GLOBALROUTE}" != "" ] ; then | |
210 | if [ "${IPV6_GLOBALROUTEDEV}" = "" -o "${IPV6_GLOBALROUTEDEV}" = "${FULLDEVNAME}" ]; then | |
211 | ip -family inet6 route add 2000::/3 via ${IPV6_GLOBALROUTE} dev ${DEVICE} | |
212 | fi | |
213 | fi | |
214 | fi | |
de1fc6ce JR |
215 | fi |
216 | ||
1c4ce04c | 217 | if [ "${GATEWAY}" != "" ]; then |
218 | if [ "${GATEWAYDEV}" = "" -o "${GATEWAYDEV}" = "${FULLDEVNAME}" ]; then | |
219 | # set up default gateway | |
220 | ip -family inet route add default via ${GATEWAY} dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS} | |
221 | DEFGW=${GATEWAY} | |
222 | fi | |
223 | fi | |
224 | ||
225 | if [ "$BOOTPROTO" = bootp -a "$ISALIAS" = no ]; then | |
226 | if [ -n "$GATEWAYS" ]; then | |
227 | for gw in $GATEWAYS; do | |
228 | if [ "$gw" != "${DEFGW}" ]; then | |
229 | ip -family inet route add default via $gw dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS} | |
230 | fi | |
231 | done | |
232 | fi | |
de1fc6ce | 233 | |
1c4ce04c | 234 | if [ -n "$DNSSRVS" -a -n "$SEARCH" ]; then |
235 | echo "search $SEARCH" > /etc/resolv.conf | |
236 | for dns in $DNSSRVS; do | |
237 | echo "nameserver $dns" >> /etc/resolv.conf | |
238 | done | |
239 | fi | |
240 | ||
241 | if [ -n "$BOOTPHOSTNAME" -a -n "$NEEDHOSTNAME" ]; then | |
242 | set_hostname $BOOTPHOSTNAME | |
243 | fi | |
244 | fi | |
7742e157 | 245 | fi |
7742e157 | 246 | |
dd4a755f | 247 | if is_yes "$IPX"; then |
12de71be | 248 | /etc/sysconfig/network-scripts/ifup-ipx $DEVICE |
249 | fi | |
7742e157 AF |
250 | |
251 | exec /etc/sysconfig/network-scripts/ifup-post $CONFIG |