From ff9c641763702ae99632bbf4d0825d578440c074 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 11 Dec 2009 19:56:36 +0100 Subject: [PATCH] config: add some ipv4 helper shell functions Many thanks to Michael Adam for the basic work. metze --- config/functions | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/config/functions b/config/functions index 115794ec..32d6d98a 100644 --- a/config/functions +++ b/config/functions @@ -658,6 +658,70 @@ ctdb_standard_event_handler () esac } +ipv4_host_addr_to_net_addr() +{ + local HOST=$1 + local MASKBITS=$2 + + local HOST0=$(echo $HOST | awk -F . '{print $4}') + local HOST1=$(echo $HOST | awk -F . '{print $3}') + local HOST2=$(echo $HOST | awk -F . '{print $2}') + local HOST3=$(echo $HOST | awk -F . '{print $1}') + + local HOST_NUM=$(( $HOST0 + $HOST1 * 256 + $HOST2 * (256 ** 2) + $HOST3 * (256 ** 3) )) + + local MASK_NUM=$(( ( (2**32 - 1) * (2**(32 - $MASKBITS)) ) & (2**32 - 1) )) + + local NET_NUM=$(( $HOST_NUM & $MASK_NUM)) + + local NET0=$(( $NET_NUM & 255 )) + local NET1=$(( ($NET_NUM & (255 * 256)) / 256 )) + local NET2=$(( ($NET_NUM & (255 * 256**2)) / 256**2 )) + local NET3=$(( ($NET_NUM & (255 * 256**3)) / 256**3 )) + + echo "$NET3.$NET2.$NET1.$NET0" +} + +ipv4_maskbits_to_net_mask() +{ + local MASKBITS=$1 + + local MASK_NUM=$(( ( (2**32 - 1) * (2**(32 - $MASKBITS)) ) & (2**32 - 1) )) + + local MASK0=$(( $MASK_NUM & 255 )) + local MASK1=$(( ($MASK_NUM & (255 * 256)) / 256 )) + local MASK2=$(( ($MASK_NUM & (255 * 256**2)) / 256**2 )) + local MASK3=$(( ($MASK_NUM & (255 * 256**3)) / 256**3 )) + + echo "$MASK3.$MASK2.$MASK1.$MASK0" +} + +ipv4_is_valid_addr() +{ + local ADDR=$1 + local fail=0 + + local N=`echo $ADDR | sed -e 's/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*//'` + test -n "$N" && fail=1 + + local ADDR0=$(echo $ADDR | awk -F . '{print $4}') + local ADDR1=$(echo $ADDR | awk -F . '{print $3}') + local ADDR2=$(echo $ADDR | awk -F . '{print $2}') + local ADDR3=$(echo $ADDR | awk -F . '{print $1}') + + test "$ADDR0" -gt 255 && fail=1 + test "$ADDR1" -gt 255 && fail=1 + test "$ADDR2" -gt 255 && fail=1 + test "$ADDR3" -gt 255 && fail=1 + + test x"$fail" != x"0" && { + #echo "IPv4: '$ADDR' is not a valid address" + return 1; + } + + return 0; +} + ######################################################## # load a site local config file ######################################################## -- 2.34.1