config: add some ipv4 helper shell functions
authorStefan Metzmacher <metze@samba.org>
Fri, 11 Dec 2009 18:56:36 +0000 (19:56 +0100)
committerStefan Metzmacher <metze@samba.org>
Wed, 20 Jan 2010 10:10:57 +0000 (11:10 +0100)
Many thanks to Michael Adam <obnox@samba.org>
for the basic work.

metze

config/functions

index 115794ec101ce8ba44b5dfc953f9f937857bfd6a..32d6d98ac54941dda4989272c668741f7145dd5d 100644 (file)
@@ -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
 ########################################################