#!/bin/sh

# Convert netmask in dot notation to CIDR

mask2cidr() {
    nbits=0
    IFS=.
    for dec in $1 ; do
        case $dec in
            255) nbits=$(expr $nbits + 8);;
            254) nbits=$(expr $nbits + 7);;
            252) nbits=$(expr $nbits + 6);;
            248) nbits=$(expr $nbits + 5);;
            240) nbits=$(expr $nbits + 4);;
            224) nbits=$(expr $nbits + 3);;
            192) nbits=$(expr $nbits + 2);;
            128) nbits=$(expr $nbits + 1);;
            0);;
            *) return 1;;
        esac
    done
    echo "$nbits"
    return 0
}

#cidr2mask() {
#  local i mask=""
#  local full_octets=$(($1/8))
#  local partial_octet=$(($1%8))
#
#  for ((i=0;i<4;i+=1)); do
#    if [ $i -lt $full_octets ]; then
#      mask+=255
#    elif [ $i -eq $full_octets ]; then
#      mask+=$((256 - 2**(8-$partial_octet)))
#    else
#      mask+=0
#    fi  
#    test $i -lt 3 && mask+=.
#  done
#
#  echo $mask
#}

## main ##

if [ $# -lt 2 ]; then
	return 1
fi

# if dot notation
if [ "$1" = "-d" ]; then
	mask=$2
	numbits=$(mask2cidr $mask)
	if [ "x$numbits" != "x" ]; then
		echo "$numbits"
	fi
	exit 0

elif [ "$1" = "-c" ]; then
	echo "Under construction"
fi
