From ee4b21b73a51233003fbbe3d8acd68c9398f6dd9 Mon Sep 17 00:00:00 2001 From: Damir Dzeko Date: Mon, 21 Mar 2005 06:28:18 +0000 Subject: [PATCH] r7: cp_get_ifdefault: (new) - added function to return default interface or it's address, takes an argument: dev or addr cp_get_cidr: - memoizing CP_ECHO_RETURN and using it only for our return value not for our calls - made awk processing more efficient - added verbosity control through CP_VEROBOSE - handled netmask 255.255.255.255 as separate case --- functions.sh | 55 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/functions.sh b/functions.sh index 495409d..8c2ec00 100644 --- a/functions.sh +++ b/functions.sh @@ -46,38 +46,67 @@ cp_get_ifmask() { [ -z "$CP_ECHO_RETURN" ] || echo $RET } +# by ddzeko, Mon, 21 Mar 2005 07:00:22 +0100 +cp_get_ifdefault() { + [ "$CP_SCRIPT_DEBUG" ] && set -vx + RET="" + case $1 in + dev) RET=`route -n | awk '/^0.0.0.0/{print $8}'` ;; + addr) RET=`route -n | awk '/^0.0.0.0/{print $2}'` ;; + *) echo "cp_get_ifdefault: Argument required (dev or addr)" >&2 ;; + esac + [ -z "$RET" -a "$1" -a "$CP_VERBOSE" ] && echo "cp_get_ifdefault: No default route" >&2 + [ -z "$CP_ECHO_RETURN" ] || echo $RET + [ -z "$RET" ] && return 1 +} # by ico, Tue, 15 Mar 2005 14:04:21 +0100 cp_get_cidr() { [ "$CP_SCRIPT_DEBUG" ] && set -vx - local netmask ipaddress interface cidr + local netmask ipaddress interface cidr echo_return + echo_return="$CP_ECHO_RETURN" # since we're making our own calls + # in our own way we need to set CP_ECHO_RETURN the way we want it + # but preserving initial state so it could be used afterwards + CP_ECHO_RETURN="" interface="$1" if [ -z "$interface" ]; then - interface="`route | awk '/^default/{print $8}'`" + cp_get_ifdefault dev + interface="$RET" [ -z "$interface" ] && interface=lo fi if ! ifconfig $interface 2> /dev/null >> /dev/null; then - [ -z "$CP_ECHO_RETURN" ] || echo "cp_get_cidr: $interface: No such interface" - return 1 + [ "$CP_VERBOSE" ] || echo "cp_get_cidr: $interface: No such interface" + goto return1 fi - ipaddress="`cp_get_ifaddr $interface`" + cp_get_ifaddr "$interface" + ipaddress="$RET" if [ -z $ipaddress ]; then - [ -z "$CP_ECHO_RETURN" ] || echo "cp_get_cidr: $interface: No such ipaddress" - return 1 + [ "$CP_VERBOSE" ] || echo "cp_get_cidr: $interface: No such ipaddress" + goto return1 fi - netmask="`cp_get_ifmask $interface`" + cp_get_ifmask "$interface" + netmask="$RET" if [ -z $netmask ]; then - [ -z "$CP_ECHO_RETURN" ] || echo "cp_get_cidr: $interface: No such netmask" - return 1 + [ "$CP_VERBOSE" ] || echo "cp_get_cidr: $interface: No such netmask" fi - cidr="`ipcalc -n $ipaddress $netmask | grep Network: | awk '{print $2}'`" - + if [ "$netmask" = "255.255.255.255" ]; then + cidr="$ipaddress/32" + else + cidr="`ipcalc -ncb $ipaddress $netmask | awk '/^Network:/{print $2}'`" + fi + RET="$cidr" - [ -z "$CP_ECHO_RETURN" ] || echo $RET + [ -z "$echo_return" ] || echo $RET + CP_ECHO_RETURN="$echo_return" + return 0 + + return1: + CP_ECHO_RETURN="$echo_return" + return 1 } # by ico, Tue, 15 Mar 2005 14:04:21 +0100 -- 1.7.10.4