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
########################################################