]>
Commit | Line | Data |
---|---|---|
356d834b | 1 | #!/bin/sh - keep it for file(1) to get bourne shell script result |
b0443108 | 2 | # |
ec8b15cb | 3 | # $Id$ |
5e6dfc29 | 4 | # |
7e04fe0e | 5 | # This is not a shell script; it provides functions to network scripts |
6 | # that source it. | |
7 | ||
8 | source_config () | |
9 | { | |
5e6dfc29 JR |
10 | DEVNAME=$(basename "$CONFIG" | awk ' { gsub(/^ifcfg-/,NIL); print $0; } ') |
11 | ||
12 | if echo "$CONFIG"|egrep "^/" >/dev/null 2>&1 ; then | |
13 | if [ -f "$CONFIG" ] ; then | |
14 | . "$CONFIG" | |
15 | fi | |
16 | elif [ -f "/etc/sysconfig/interfaces/$CONFIG" ] ; then | |
17 | . "/etc/sysconfig/interfaces/$CONFIG" | |
18 | fi | |
d100991e ER |
19 | |
20 | # This is sanity check so that if you've copied ifcfg-eth0 to ifcfg-eth1 | |
21 | # and forgot to alter DEVICE= line you won't accidentally bring down eth0 | |
22 | # while executing ifdown eth1. | |
23 | if [ -n "$DEVICE" -a "$DEVNAME" != "$DEVICE" ]; then | |
24 | echo >&2 "$0: DEVICE specified in $CONFIG does not match filename. Aborting!" | |
25 | exit 1 | |
26 | fi | |
27 | ||
5e6dfc29 JR |
28 | if [ -n "${PREFIX}" ] && ! $(echo $IPADDR | grep "/" 2>&1 >/dev/null) ; then |
29 | IPADDR="$IPADDR/$PREFIX" | |
30 | fi | |
7e04fe0e | 31 | } |
32 | ||
33 | do_netreport () | |
34 | { | |
5e6dfc29 JR |
35 | # Notify programs that have requested notification |
36 | ( cd /var/run/netreport || exit | |
37 | for i in * ; do | |
38 | [ -f $i ] && kill -SIGIO $i >/dev/null 2>&1 || \ | |
39 | rm -f $i >/dev/null 2>&1 | |
40 | done | |
41 | ) | |
7e04fe0e | 42 | } |
43 | ||
44 | need_hostname() | |
45 | { | |
5e6dfc29 JR |
46 | if [ "`hostname`" = "(none)" -o "`hostname`" = "localhost" -o \ |
47 | "`hostname`" = "localhost.localdomain" ]; then | |
48 | NEEDHOSTNAME=yes | |
49 | else | |
50 | unset NEEDHOSTNAME | |
51 | fi | |
7e04fe0e | 52 | } |
53 | ||
54 | set_hostname() | |
55 | { | |
5e6dfc29 JR |
56 | typeset hostname domain |
57 | ||
58 | hostname=$(echo $1 | awk ' { gsub(/\..*$/,NIL); print $0; } ') | |
59 | domain=$(echo $1 | awk ' { sub(/^[^\.]*\./,NIL); print $0; } ') | |
60 | ||
61 | if [ -n "$hostname" ] ; then | |
62 | echo "$hostname" > /etc/HOSTNAME | |
63 | hostname $hostname | |
64 | fi | |
65 | ||
66 | if [ -n "$domain" ] ; then | |
67 | >/etc/resolv.conf.new | |
68 | if ! grep -q "search $domain" /etc/resolv.conf ; then | |
69 | echo "search $domain" >> /etc/resolv.conf.new | |
70 | fi | |
71 | echo "domain $domain" >> /etc/resolv.conf.new | |
72 | grep -v "^domain " /etc/resolv.conf >> /etc/resolv.conf.new | |
73 | mv -f /etc/resolv.conf.new /etc/resolv.conf | |
74 | fi | |
7e04fe0e | 75 | } |
76 | ||
767c8707 AM |
77 | # Setup Network Address Translation (NAT) |
78 | setup_nat() | |
79 | { | |
5e6dfc29 JR |
80 | typeset src via dst |
81 | ||
82 | if [ -r /etc/sysconfig/static-nat ]; then | |
83 | if [ "$1" = "on" ]; then | |
84 | grep "^[0-9]" /etc/sysconfig/static-nat | while read src via dst; do | |
85 | /sbin/ip route add nat $dst via $src | |
86 | /sbin/ip rule add from $src nat $dst | |
87 | done | |
88 | elif [ "$1" = "off" ]; then | |
89 | /sbin/ip route show table all | egrep "^nat[[:blank:]]" | while read nat dst via src args; do | |
90 | /sbin/ip rule del from $src nat $dst | |
91 | /sbin/ip route del nat $dst via $src | |
92 | done | |
93 | fi | |
94 | fi | |
767c8707 AM |
95 | } |
96 | ||
fa8aca70 JR |
97 | # Setup static ARP |
98 | static_arp() | |
7e04fe0e | 99 | { |
5e6dfc29 JR |
100 | typeset rc arpdev host hwaddr flags neflags |
101 | ||
102 | if is_yes "$STATIC_ARP" && [ -r /etc/ethers ]; then | |
103 | if [ -x /sbin/arp ]; then | |
104 | run_cmd "Setting static ARP entries" /sbin/arp -f /etc/ethers | |
105 | else | |
106 | show "Setting static ARP entries"; busy | |
107 | rc=0 | |
108 | arpdev=$(ip link show | awk -F':' '(/UP/) && ! (/NOARP/) && ! (/lo:/) && ! (/NONE:/) { print $2; exit }') | |
109 | if [ -z "$arpdev" ]; then | |
110 | rc=1 | |
111 | else | |
112 | # ip supports only ip addresses | |
113 | grep "^[0-9]" /etc/ethers | \ | |
114 | while read host hwaddr flags; do | |
115 | case "$flags" in | |
116 | *temp*) | |
117 | neflags="nud stale" | |
118 | ;; | |
119 | *) | |
120 | neflags="nud permanent" | |
121 | ;; | |
122 | esac | |
123 | if ! /sbin/ip neigh add $host lladdr $hwaddr $neflags dev $arpdev; then | |
124 | rc=1 | |
125 | fi | |
126 | done | |
127 | fi | |
128 | if [ "$rc" -gt 0 ]; then | |
129 | fail | |
130 | fi | |
0a6161f2 | 131 | fi |
74a7f2e4 | 132 | fi |
7e04fe0e | 133 | } |
134 | ||
fa8aca70 | 135 | static_rarp() |
7e04fe0e | 136 | { |
5e6dfc29 JR |
137 | if is_yes "$STATIC_RARP"; then |
138 | if [ ! -e /proc/net/rarp ]; then | |
139 | _modprobe single -k rarp | |
140 | fi | |
141 | if [ -r /etc/ethers -a -x /sbin/rarp ]; then | |
142 | run_cmd "Setting static RARP entries" /sbin/rarp -f /etc/ethers | |
143 | fi | |
144 | fi | |
e9e86175 AM |
145 | } |
146 | ||
fa8aca70 | 147 | vlan_setup() |
e9e86175 | 148 | { |
5e6dfc29 JR |
149 | if [ -x /sbin/vconfig -a -e /proc/net/vlan/config ] && `echo $DEVICE | grep -q ^eth`; then |
150 | /sbin/vconfig set_name_type DEV_PLUS_VID_NO_PAD 2>&1 > /dev/null | |
151 | ETH_VLANS="yes" | |
152 | else | |
153 | ETH_VLANS="no" | |
154 | fi | |
de1fc6ce JR |
155 | } |
156 | ||
fa8aca70 JR |
157 | # Set up all IP && IP parameter variables |
158 | setup_ip_param () | |
38198f50 | 159 | { |
5e6dfc29 JR |
160 | # detect network device type (ie. dummy, eth for dummy0, eth0 ..) |
161 | if [ -z "$DEVICETYPE" ]; then | |
162 | DEVICETYPE=$(echo $DEVICE | awk ' { gsub(/[0-9]*\.?[0-9]*$/,NUL); print $0 } ') | |
163 | fi | |
164 | ||
165 | # Setup DEVICETYPE for special cases. | |
166 | if (echo ${DEVICE} | LC_ALL=C egrep -q '^[a-z0-9]+\.[0-9]+$'); then | |
167 | DEVICETYPE=vlan | |
168 | fi | |
169 | ||
170 | # real name of device (ie. is eth0 for eth0,eth0:1,eth0:alias) | |
171 | DEVICE=$(echo $DEVICE | awk ' { gsub(/:.*$/,NUL); print $0 } ') | |
172 | ||
173 | eval IP4ADDR="\$IPADDR${IP4_PRIM_IF:-}" | |
174 | if echo "${IP4ADDR}" | grep -q ":" ; then | |
175 | IP6ADDR=${IP4ADDR} | |
176 | IP4ADDR="" | |
177 | else | |
178 | eval IP4ADDROPT="\$IP_AOPTS${IP4_PRIM_IF:-}" | |
179 | eval IP4ROUTEOPT="\$IP_ROPTS${IP4_PRIM_IF:-}" | |
180 | fi | |
181 | if [ -n "${IP6_PRIM_IF}" ] ; then | |
182 | eval IP6ADDR="\$IPADDR${IP6_PRIM_IF:-}" | |
183 | eval IP6ADDROPT="\$IPV6_AOPTS${IP6_PRIM_IF:-}" | |
184 | fi | |
185 | if [ -n "${IP4_SRC_IF}" ] ; then | |
186 | eval IP4SRCADDR="\$IPADDR${IP4_SRC_IF}" | |
187 | IP4SRCADDR=$(echo ${IP4SRCADDR} | awk ' { gsub(/\/.*/,NIL); print "src " $0; } ') | |
188 | fi | |
189 | if [ -n "${IP6_SRC_IF}" ] ; then | |
190 | eval IP6SRCADDR="\$IPADDR${IP6_SRC_IF}" | |
191 | IP6SRCADDR=$(echo ${IP6SRCADDR} | awk ' { gsub(/\/.*/,NIL); print "src " $0; } ') | |
192 | fi | |
193 | ||
194 | # new rc-scripts 0.4.x option | |
195 | if [ -z "$HANDLING" ]; then | |
196 | HANDLING=0 | |
197 | fi | |
198 | ||
199 | # set handling for bridge | |
200 | case "$DEVICETYPE" in | |
201 | br|atm|lec|irda|vlan) | |
202 | HANDLING=1 | |
203 | ;; | |
204 | esac | |
74a7f2e4 | 205 | |
5e6dfc29 JR |
206 | # Multicast ready devices |
207 | if is_yes "$MULTICAST"; then | |
208 | MULTICAST="on" | |
209 | else | |
210 | case "$DEVICETYPE" in | |
211 | eth|br) | |
212 | MULTICAST="on" | |
213 | ;; | |
214 | *) | |
215 | MULTICAST="off" | |
216 | ;; | |
217 | esac | |
218 | fi | |
219 | ||
220 | # ARP ready devices | |
221 | if [ -n "$ARP" ] ; then | |
222 | if is_yes "$ARP"; then | |
223 | ARP="arp on" | |
224 | else | |
225 | ARP="arp off" | |
226 | fi | |
227 | fi | |
38198f50 AM |
228 | } |
229 | ||
fa8aca70 | 230 | check_device_down () |
38198f50 | 231 | { |
5e6dfc29 JR |
232 | if (ip link show dev ${DEVICE} 2> /dev/null | grep -q UP); then |
233 | return 1 | |
234 | else | |
235 | return 0 | |
236 | fi | |
38198f50 AM |
237 | } |
238 | ||
5e6dfc29 | 239 | setup_ip_gw_ro () |
38198f50 | 240 | { |
5e6dfc29 JR |
241 | # IPv4 gateway |
242 | if is_yes "$IPV4_NETWORKING"; then | |
243 | if [ -z "${GATEWAYDEV}" -o "${GATEWAYDEV}" = "${DEVICE}" ]; then | |
244 | # set up default gateway | |
245 | if [ -n "${GATEWAY}" ]; then | |
246 | ip -4 route add default via ${GATEWAY} dev ${DEVICE} ${IP4SRCADDR} onlink | |
247 | DEFGW=${GATEWAY} | |
248 | elif [ "${GATEWAYDEV}" = "${DEVICE}" ]; then | |
249 | ip -4 route add default dev ${DEVICE} ${IP4SRCADDR} | |
250 | fi | |
251 | fi | |
252 | fi | |
253 | ||
254 | # IPv6 gateway && IPv6 globalroute | |
255 | if is_yes "$IPV6_NETWORKING"; then | |
256 | if [ -z "${GATEWAY6DEV}" -o "${GATEWAY6DEV}" = "${DEVICE}" ]; then | |
257 | # set up default gateway | |
258 | if [ -n "${GATEWAY6}" ]; then | |
259 | ip -6 route add default via ${GATEWAY6} dev ${DEVICE} ${IP6SRCADDR} onlink | |
260 | DEFGW6=${GATEWAY6} | |
261 | elif [ "${GATEWAY6DEV}" = "${DEVICE}" ]; then | |
262 | ip -6 route add default dev ${DEVICE} ${IP6SRCADDR} | |
263 | fi | |
264 | fi | |
265 | if [ -z "${IPV6_GLOBALROUTEDEV}" -o "${IPV6_GLOBALROUTEDEV}" = "${DEVICE}" ]; then | |
266 | # set up default route | |
267 | if [ -n "${IPV6_GLOBALROUTEGW}" ]; then | |
268 | ip -6 route add 2000::/3 via ${IPV6_GLOBALROUTEGW} dev ${DEVICE} ${IP6SRCADDR} onlink | |
269 | elif [ "${IPV6_GLOBALROUTEDEV}" = "${DEVICE}" ]; then | |
270 | ip -6 route add 2000::/3 dev ${DEVICE} ${IP6SRCADDR} | |
271 | fi | |
272 | fi | |
273 | fi | |
0a6161f2 | 274 | } |
275 | ||
fa8aca70 JR |
276 | # |
277 | # following function sets up routes not associated to any device | |
278 | # eg. unreachable or blackhole routes | |
ec8b15cb | 279 | # (c) 1999 Jacek Konieczny <jajcus@pld-linux.org> |
fa8aca70 JR |
280 | # |
281 | setup_routes() | |
0a6161f2 | 282 | { |
5e6dfc29 JR |
283 | typeset args |
284 | ||
285 | if [ -f /etc/sysconfig/static-routes ]; then | |
286 | if [ "$1" = "on" -o "$1" = "yes" ] ; then | |
287 | egrep "^(none|any)[[:blank:]]" /etc/sysconfig/static-routes | while read device args; do | |
288 | /sbin/ip route add $args | |
289 | done | |
290 | else | |
291 | egrep "^(none|any)[[:blank:]]" /etc/sysconfig/static-routes | while read device args; do | |
292 | /sbin/ip route del $args 2>/dev/null | |
293 | done | |
294 | fi | |
295 | fi | |
0a6161f2 | 296 | } |
38198f50 | 297 | |
fa8aca70 JR |
298 | # Add ONLY IPv4 address (IPv6 address is added automaticly) |
299 | set_up_loopback() | |
0a6161f2 | 300 | { |
5e6dfc29 JR |
301 | if is_yes "$IPV4_NETWORKING"; then |
302 | ip addr add 127.0.0.1/8 dev lo | |
303 | fi | |
304 | ip link set dev lo up | |
fa8aca70 JR |
305 | } |
306 | ||
307 | set_down_loopback() | |
308 | { | |
5e6dfc29 JR |
309 | ip addr flush dev lo 2>&1 | grep -v "Nothing to flush" |
310 | ip link set dev lo down | |
0a6161f2 | 311 | } |
312 | ||
313 | modprobe_net() | |
314 | { | |
5e6dfc29 JR |
315 | if is_yes "$IPV6_NETWORKING" && is_module "ipv6"; then |
316 | _modprobe single -k ipv6 | |
317 | fi | |
fa8aca70 | 318 | |
5e6dfc29 JR |
319 | if is_yes "$IPX" && is_module "ipx"; then |
320 | _modprobe single -k ipx | |
321 | fi | |
e016cdae | 322 | } |
7e04fe0e | 323 | |
490f6163 | 324 | # |
325 | # folowing function calculates network prefix from given network mask | |
490f6163 | 326 | # (c) 1999 Grzegorz Stanislawski <stangrze@open.net.pl> |
327 | # | |
fa8aca70 JR |
328 | calcprefix() |
329 | { | |
5e6dfc29 JR |
330 | typeset len olen bad prefix |
331 | ||
332 | prefix=0 | |
333 | olen=8 | |
334 | bad=0 | |
335 | for i in 1 2 3 4; do | |
336 | len=0 | |
337 | j=$(echo "$1" | awk -F"." "{ print \$${i} }") | |
338 | case "$j" in | |
339 | 255) len=8 ;; | |
340 | 254) len=7 ;; | |
341 | 252) len=6 ;; | |
342 | 248) len=5 ;; | |
343 | 240) len=4 ;; | |
344 | 224) len=3 ;; | |
345 | 192) len=2 ;; | |
346 | 128) len=1 ;; | |
347 | 0) len=0 ;; | |
348 | *) len=300 ;; | |
349 | esac | |
350 | [ "$len" -gt "$olen" ] && bad=1 | |
351 | prefix=$(($prefix + $len)) | |
352 | olen=$len | |
353 | done | |
354 | ||
355 | if [ "$bad" = "0" ]; then | |
356 | echo "$prefix" | |
357 | else | |
358 | echo "32" | |
359 | fi | |
360 | return | |
490f6163 | 361 | } |
85ebccea | 362 | |
5379c9d4 | 363 | # |
364 | # folowing function calculates network mask from given prefix | |
365 | # (c) 1999 Grzegorz Stanislawski <stangrze@open.net.pl> | |
366 | # | |
fa8aca70 JR |
367 | calcnetmask() |
368 | { | |
5e6dfc29 JR |
369 | typeset prefix a MASK |
370 | ||
371 | MASK="" | |
372 | if [ "`echo "${1}" | grep "^[0-9]"`" = "" ]; then | |
373 | prefix=32 | |
374 | else | |
375 | typeset -i prefix=$1 | |
376 | fi | |
377 | for i in 1 2 3 4; do | |
378 | case $prefix in | |
379 | 7) a=254 ;; | |
380 | 6) a=252 ;; | |
381 | 5) a=248 ;; | |
382 | 4) a=240 ;; | |
383 | 3) a=224 ;; | |
384 | 2) a=192 ;; | |
385 | 1) a=128 ;; | |
386 | *) | |
387 | [ $prefix -ge 8 ] && a=255 | |
388 | [ $prefix -le 0 ] && a=0 | |
389 | ;; | |
390 | esac | |
391 | ||
392 | prefix="$(( $prefix - 8))" | |
393 | if [ -z "$MASK" ]; then | |
394 | MASK=$a | |
395 | else | |
396 | MASK=$MASK.$a | |
397 | fi | |
398 | done | |
399 | ||
400 | echo $MASK | |
401 | return | |
5379c9d4 | 402 | } |
47dbf68e | 403 | |
dd8b6525 | 404 | # Retrievies PPPD PID and real interface name from /var/run/ppp-*.pid |
5e6dfc29 JR |
405 | get_ppp_device_and_pid () |
406 | { | |
407 | if [ -f "/var/run/ppp-$DEVNAME.pid" ] ; then | |
408 | eval `{ | |
409 | read PID ; echo "PID='$PID'" | |
410 | read REALDEVICE ; echo "REALDEVICE=$REALDEVICE" | |
411 | } < "/var/run/ppp-$DEVNAME.pid"` | |
412 | fi | |
413 | ||
414 | if [ -z "$REALDEVICE" ] ; then | |
415 | REALDEVICE=$DEVICE | |
416 | fi | |
dd8b6525 | 417 | } |
c3bd5d9f | 418 | |
e686ef49 | 419 | # following function setups advanced routing rules |
ec8b15cb | 420 | # Olgierd Pieczul <wojrus@pld-linux.org> |
5e6dfc29 JR |
421 | setup_ip_rules () |
422 | { | |
423 | typeset args prio from src | |
424 | ||
425 | if [ -f /etc/sysconfig/static-routes ] ; then | |
426 | if is_yes "$1"; then | |
427 | egrep "^(from|to|iif|tos|fwmark|dev|pref|priority|prio)[[:blank:]]" /etc/sysconfig/static-routes | while read args; do | |
428 | /sbin/ip rule add $args | |
429 | done | |
430 | elif is_no "$1"; then | |
431 | /sbin/ip rule show | egrep -v -e "from all lookup (main|default|local) \$" -e " map-to " | while read prio from src args; do | |
432 | [ "$src" == "all" ] && ip rule delete $args || ip rule delete $from $src $args | |
433 | done | |
434 | fi | |
435 | fi | |
e686ef49 | 436 | } |
6d145c04 | 437 | |
5e6dfc29 JR |
438 | is_wireless_device () |
439 | { | |
440 | if [ -x /sbin/iwconfig ]; then | |
441 | LC_ALL=C iwconfig "${1}" 2>&1 | grep -q "no wireless extensions" || return 0 | |
442 | fi | |
443 | return 1 | |
a6c22d3d AM |
444 | } |
445 | ||
5e6dfc29 JR |
446 | wireless_param () |
447 | { | |
448 | device="$1" | |
449 | if [ "$2" = "br" ]; then | |
450 | prefix="${device}_" | |
451 | else | |
452 | prefix="" | |
453 | fi | |
454 | ||
455 | if [ -z "$(eval echo \$${prefix}WLAN_NICKNAME)" ]; then | |
aa59debd | 456 | WLAN_NICKNAME="$(hostname -f 2>/dev/null || hostname 2>/dev/null || echo localhost)" |
5e6dfc29 | 457 | else |
7ac73e84 | 458 | WLAN_NICKNAME="$(eval echo \$${prefix}WLAN_NICKNAME)" |
5e6dfc29 JR |
459 | fi |
460 | ||
461 | # wlan mode needs to be first | |
462 | [ -n "$(eval echo \$${prefix}WLAN_MODE)" ] && \ | |
463 | iwconfig ${device} mode "$(eval echo \$${prefix}WLAN_MODE)" | |
cbe41687 | 464 | iwconfig ${device} nick ${WLAN_NICKNAME} |
5e6dfc29 JR |
465 | [ -n "$(eval echo \$${prefix}WLAN_NWID)" ] && \ |
466 | iwconfig ${device} nwid "$(eval echo \$${prefix}WLAN_NWID)" | |
467 | if [ -n "$(eval echo \$${prefix}WLAN_FREQ)" -a "$(eval echo \$${prefix}${WLAN_MODE})" != "Managed" ] ; then | |
468 | iwconfig ${device} freq "$(eval echo \$${prefix}WLAN_FREQ)" | |
469 | elif [ -n "$(eval echo \$${prefix}WLAN_CHANNEL)" -a "$(eval echo \$${prefix}${WLAN_MODE})" != "Managed" ]; then | |
470 | iwconfig ${device} channel "$(eval echo \$${prefix}WLAN_CHANNEL)" | |
471 | fi | |
472 | [ -n "$(eval echo \$${prefix}WLAN_SENS)" ] && \ | |
473 | iwconfig ${device} sens "$(eval echo \$${prefix}WLAN_SENS)" | |
474 | [ -n "$(eval echo \$${prefix}WLAN_AP)" ] && \ | |
475 | iwconfig ${device} ap "$(eval echo \$${prefix}WLAN_AP)" | |
476 | [ -n "$(eval echo \$${prefix}WLAN_BITRATE)" ] && \ | |
477 | iwconfig ${device} rate "$(eval echo \$${prefix}WLAN_BITRATE)" | |
478 | [ -n "$(eval echo \$${prefix}WLAN_RTS_THRESHOLD)" ] && \ | |
479 | iwconfig ${device} rts "$(eval echo \$${prefix}WLAN_RTS_THRESHOLD)" | |
480 | [ -n "$(eval echo \$${prefix}WLAN_FRAGMENTATION_THRESHOLD)" ] && \ | |
481 | iwconfig ${device} frag "$(eval echo \$${prefix}WLAN_FRAGMENTATION_THRESHOLD)" | |
482 | if [ -n "$(eval echo \$${prefix}WLAN_KEY)" ]; then | |
483 | iwconfig ${device} key "$(eval echo \$${prefix}WLAN_KEY)" | |
484 | [ -n "$(eval echo \$${prefix}WLAN_ENCRYPTION)" ] && \ | |
485 | iwconfig ${device} key "$(eval echo \$${prefix}WLAN_ENCRYPTION)" | |
486 | fi | |
487 | if is_no "$(eval echo \$${prefix}WLAN_ENCRYPTION)"; then | |
488 | iwconfig ${device} key off | |
489 | fi | |
490 | [ -n "$(eval echo \$${prefix}WLAN_POWER)" ] && \ | |
f3f7385d | 491 | iwconfig ${device} power "$(eval echo \$${prefix}WLAN_POWER)" |
5e6dfc29 | 492 | [ -n "$(eval echo \$${prefix}WLAN_TXPOWER)" ] && \ |
f3f7385d | 493 | iwconfig ${device} txpower "$(eval echo \$${prefix}WLAN_TXPOWER)" |
5e6dfc29 | 494 | [ -n "$(eval echo \$${prefix}WLAN_RETRY)" ] && \ |
f3f7385d | 495 | iwconfig ${device} retry "$(eval echo \$${prefix}WLAN_RETRY)" |
5e6dfc29 JR |
496 | [ -n "$(eval echo \$${prefix}WLAN_NWID)" ] && iwconfig ${device} \ |
497 | nwid "$(eval echo \$${prefix}WLAN_NWID)" | |
2ae29436 | 498 | |
9a0f7d04 | 499 | # essid should be last due to network rescanning by wlan devices |
5e6dfc29 JR |
500 | [ -n "$(eval echo \$${prefix}WLAN_ESSID)" ] && iwconfig ${device} \ |
501 | essid "$(eval echo \$${prefix}WLAN_ESSID)" | |
a1ac348c AM |
502 | |
503 | if is_yes "$(eval echo \$${prefix}WLAN_COMMIT)"; then | |
504 | iwconfig ${device} commit | |
9a0f7d04 | 505 | fi |
2ae29436 AM |
506 | } |
507 | ||
0336ea13 AM |
508 | check_mii_tool () |
509 | { | |
5e6dfc29 JR |
510 | [ -x /sbin/mii-tool ] || return 2 |
511 | output=$(LC_ALL=C mii-tool $1 2>&1) | |
512 | echo $output | LC_ALL=C grep -q "link ok" && return 1 | |
513 | echo $output | LC_ALL=C grep -q "no link" && return 0 || return 2 | |
0336ea13 AM |
514 | } |
515 | ||
516 | check_ethtool () | |
517 | { | |
5e6dfc29 JR |
518 | [ -x /sbin/ethtool ] || return 2 |
519 | output=$(LC_ALL=C ethtool $1 2>&1) | |
520 | echo $output | LC_ALL=C grep -q "Link detected: yes" && return 1 | |
521 | echo $output | LC_ALL=C grep -q "Link detected: no" && return 0 || return 2 | |
0336ea13 AM |
522 | } |
523 | ||
1b85f830 AM |
524 | check_iwconfig () |
525 | { | |
526 | [ -x /sbin/iwconfig ] || return 2 | |
527 | output=$(LC_ALL=C iwconfig $1 2>&1) | |
528 | echo $output | LC_ALL=C grep -q "radio off" && return 0 || return 2 | |
529 | } | |
0336ea13 AM |
530 | |
531 | check_link_down () | |
532 | { | |
1b85f830 | 533 | if [ -x /sbin/mii-tool -o -x /sbin/ethtool -o -x /sbin/iwconfig ]; then |
5e6dfc29 JR |
534 | if ! LC_ALL=C ip link show dev $1 2>/dev/null| grep -q UP ; then |
535 | ip link set dev $1 up >/dev/null 2>&1 | |
536 | timeout=0 | |
537 | while [ $timeout -le 10 ]; do | |
538 | check_mii_tool $1 | |
539 | m=$? | |
540 | check_ethtool $1 | |
541 | e=$? | |
1b85f830 AM |
542 | check_iwconfig $1 |
543 | i=$? | |
5e6dfc29 JR |
544 | if [ $m -eq 1 ] || [ $e -eq 1 ] ; then |
545 | return 1 | |
546 | fi | |
1b85f830 | 547 | if [ $m -eq 2 ] && [ $e -eq 2 ] && [ $i -eq 2 ]; then |
5e6dfc29 JR |
548 | return 1 |
549 | fi | |
550 | usleep 500000 | |
551 | timeout=$((timeout+1)) | |
552 | done | |
553 | return 0 | |
74a7f2e4 | 554 | fi |
74a7f2e4 | 555 | fi |
5e6dfc29 | 556 | return 1 |
0336ea13 | 557 | } |
2ae29436 | 558 | |
e9e86175 | 559 | # This must be last line ! |
5e6dfc29 | 560 | # vi:syntax=sh |