#!/bin/bash
IP=$1
NM=$2

function netnumber()
{ 
w=$1
i=$2
k=$((256-$i))
m=$(($w/$k))
echo $(($m*$k))
}

function broadcast()
{ 
w=$1
i=$2
k=$((256-$i))
m=$(($w/$k))
echo $(($(($((m+1))*$k))-1))
}


function k_bestimmung()
{ 
w=$1
i=$2
k=$((256-$i))
echo $k
}



function dez()
{
if [[ $1 -ge 0 && $1 -le 255 && $1  =~ ^[0-9]+$ ]]
then
return 1
else
return 0
fi
}

[[ $# -ne 2 ]] && { echo "$0 IP NM" ; exit; }
TMP=$LFS	
IFS="."
set $IP
[[ $# -ne 4 ]] && { echo "wrong IP Oktetts" ; exit; }
for I in $IP
do 
dez $I && { echo "wrong IP Oktett" ; exit; }
done
set $NM
[[ $# -ne 4 ]] && { echo "wrong NM Oktetts" ; exit; }
for I in $NM
do 
dez $I && { echo "wrong NM Oktett" ; exit; }
done


IFS=$TMP
NM0=$(echo $NM | cut -f 1 -d .)
NM1=$(echo $NM | cut -f 2 -d .)
NM2=$(echo $NM | cut -f 3 -d .)
NM3=$(echo $NM | cut -f 4 -d .)
NM_ARRAY=($NM0 $NM1 $NM2 $NM3 )

IP0=$(echo $IP | cut -f 1 -d .)
IP1=$(echo $IP | cut -f 2 -d .)
IP2=$(echo $IP | cut -f 3 -d .)
IP3=$(echo $IP | cut -f 4 -d .)
IP_ARRAY=($IP0 $IP1 $IP2 $IP3 )
HOSTS=1
FLAG=0
for((I=0;I<4;I++))
do
if [[  ${NM_ARRAY[$I]} != 0 && ${NM_ARRAY[$I]} != 255 ]]
then       	
	NN=$NN.$(netnumber ${IP_ARRAY[$I]}  ${NM_ARRAY[$I]})
	BC=$BC.$(broadcast ${IP_ARRAY[$I]}  ${NM_ARRAY[$I]})
	HOSTS=$(k_bestimmung  ${IP_ARRAY[$I]}  ${NM_ARRAY[$I]})
 	FLAG=1
else 
if [[  ${NM_ARRAY[$I]} = 0 && $FLAG = 0 ]]
then
      NN=$NN.0	
      BC=$BC.255	
      HOSTS=$(echo $HOSTS*256 | bc -l )
else	
 if [[ $FLAG = 0  ]]
    then 	  
     if [[ $I != 0 ]]
     then	     
      NN=$NN.${IP_ARRAY[$I]}	
      BC=$BC.${IP_ARRAY[$I]}
     else
      NN=${IP_ARRAY[$I]}	
      BC=${IP_ARRAY[$I]}
      fi       
    else
      NN=$NN.0
      BC=$BC.255
      HOSTS=$(echo $HOSTS*256 | bc -l )
    fi      
fi
fi
done

printf "NETNUMBER:  %s\n" $NN
printf "BROADCAST:  %s\n" $BC
printf "HOSTS:      %s\n" $(($HOSTS-2))
