# -*-Shell-script-*- # # This file is not a stand-alone shell script; it provides functions # to network scripts that source it. # Set up a default search path. PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin" export PATH need_config() { [ -f "${CONFIG}" ] || \ CONFIG=../networking/default/${1} [ -f "${CONFIG}" ] || \ CONFIG=../networking/default/ifcfg-${1} [ -f "${CONFIG}" ] || \ CONFIG="ifcfg-${1}" } source_config () { DEVNAME=`basename $CONFIG | sed 's/^ifcfg-//g'` if basename $CONFIG | grep '[^g]-' >/dev/null 2>&1 ; then PARENTCONFIG=`echo $CONFIG | sed 's/-[^-]*$//g'` PARENTDEVNAME=`basename $PARENTCONFIG | sed 's/^ifcfg-//g'` [ -f $PARENTCONFIG ] || { echo $"Missing config file $PARENTCONFIG." >&2 exit 1 } . $PARENTCONFIG fi . $CONFIG } expand_config () { if [ -z "${NETMASK}" ]; then eval `/bin/ipcalc --netmask ${IPADDR}` fi if [ -z "${PREFIX}" ]; then eval `/bin/ipcalc --prefix ${IPADDR} ${NETMASK}` fi if [ -z "${BROADCAST}" ]; then eval `/bin/ipcalc --broadcast ${IPADDR} ${NETMASK}` fi if [ -z "${NETWORK}" ]; then eval `/bin/ipcalc --network ${IPADDR} ${NETMASK}` fi } toggle_value() { if [ -z "$2" ] then echo '' elif [ "$2" = "yes" -o "$2" = "YES" ] ; then echo "$1 on" elif [ "$2" = "no" -o "$2" = "NO" ] ; then echo "$1 off" else echo '' fi } do_netreport () { # Notify programs that have requested notification ( cd /var/run/netreport || exit for i in * ; do if [ -f $i ]; then OWNER=`ls -l $i | awk '{ print $3 }'` if [ "`id -u`" = "0" ]; then su -s /bin/bash $OWNER -c "kill -SIGIO $i >/dev/null 2>&1 || rm -f $i >/dev/null 2>&1" > /dev/null 2>&1 else kill -SIGIO $i >/dev/null 2>&1 || rm -f $i >/dev/null 2>&1 fi fi done ) } is_available () { LC_ALL= LANG= ip -o link | grep -q $1 if [ "$?" = "1" ]; then alias=`modprobe -c | awk "/^alias $1 / { print \\$3 }"` if [ -z "$alias" -o "$alias" = "off" ]; then return 2 fi modprobe $1 >/dev/null 2>&1|| { return 1 } else return 0 fi } need_hostname() { if [ "`hostname`" = "(none)" -o "`hostname`" = "localhost" -o \ "`hostname`" = "localhost.localdomain" ]; then return 0 else return 1 fi } set_hostname() { hostname $1 if ! grep search /etc/resolv.conf >/dev/null 2>&1; then domain=`echo $1 | sed 's/^[^\.]*\.//'` echo "search $domain" >> /etc/resolv.conf fi } check_device_down () { if echo $1 | grep -q ':' ; then if LC_ALL=C ifconfig -a 2>/dev/null | grep -q $1 ; then retcode=1 else retcode=0 fi else if LC_ALL=C ip -o link ls dev $1 2>/dev/null | grep ",UP" >/dev/null 2>&1 ; then retcode=1 else retcode=0 fi fi return $retcode } check_link_down () { if [ -x /sbin/mii-tool ]; then LC_ALL=C ip link show $1 2>/dev/null| grep -q UP || ip link set $1 up >/dev/null 2>&1 sleep 2 /sbin/mii-tool >/dev/null 2>&1 || return 1 output=`LC_ALL=C /sbin/mii-tool $1 2>&1` if echo $output | grep -q "Operation not supported"; then return 1 elif echo $output | grep -q "Invalid argument"; then return 1 elif echo $output | grep -q "link ok"; then return 1 elif echo $output | grep -q "No MII transceiver present"; then return 1 else return 0 fi fi return 0 } check_default_route () { LC_ALL=C ip route | grep -q default } find_gateway_dev () { . /etc/sysconfig/network if [ "${GATEWAY}" != "" -a "${GATEWAY}" != "none" ] ; then export GATEWAY networks=`LC_ALL=C /sbin/route -n|awk '{print $1, ENVIRON["GATEWAY"],$3,$8}'|awk '{system("ipcalc --silent --network "$2" "$3" 2>/dev/null")}'|sed s^NETWORK=^^g` for net in $networks; do dev=`LC_ALL=C /sbin/route -n|grep ^$net|awk '{print $NF}'` if [ "$dev" != "" ] ; then GATEWAYDEV=$dev fi done fi } add_default_route () { . /etc/sysconfig/network find_gateway_dev if [ "${GATEWAY}" != "" -a \ "${GATEWAY}" != "none" -a \ "${GATEWAYDEV}" != "" ] ; then if ! check_device_down $1; then if [ "$GATEWAY" = "0.0.0.0" ]; then /sbin/ip route add default dev ${GATEWAYDEV} else /sbin/ip route add default via ${GATEWAY} fi fi else if [ -f /etc/default-route ]; then /sbin/ip route add default via `cat /etc/default-route` rm -f /etc/default-route fi fi } is_wireless_device () { if [ -x /sbin/iwconfig ]; then LC_ALL=C iwconfig $1 2>&1 | grep -q "no wireless extensions" || return 0 fi return 1 }