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