@ -22,6 +22,11 @@ function int2ip(ip,ret,x) {
return ret
}
function compl32( v) {
ret = xor( v, 0xffffffff)
return ret
}
BEGIN {
slpos = index( ARGV[ 1] ,"/" )
if ( slpos = = 0) {
@ -29,27 +34,27 @@ BEGIN {
netmask = ip2int( ARGV[ 2] )
} else {
ipaddr = ip2int( substr( ARGV[ 1] ,0,slpos-1) )
netmask = compl( 2**( 32-int( substr( ARGV[ 1] ,slpos+1) ) ) -1)
netmask = compl32 ( 2**( 32-int( substr( ARGV[ 1] ,slpos+1) ) ) -1)
ARGV[ 4] = ARGV[ 3]
ARGV[ 3] = ARGV[ 2]
}
network = and( ipaddr,netmask)
broadcast = or( network,compl( netmask) )
broadcast = or( network,compl32 ( netmask) )
start = or( network,and( ip2int( ARGV[ 3] ) ,compl( netmask) ) )
start = or( network,and( ip2int( ARGV[ 3] ) ,compl32 ( netmask) ) )
limit = network+1
if ( start<limit) start = limit
end = start+ARGV[ 4]
limit = or( network,compl( netmask) ) -1
limit = or( network,compl32 ( netmask) ) -1
if ( end>limit) end = limit
print "IP=" int2ip( ipaddr)
print "NETMASK=" int2ip( netmask)
print "BROADCAST=" int2ip( broadcast)
print "NETWORK=" int2ip( network)
print "PREFIX=" 32-bitcount( compl( netmask) )
print "PREFIX=" 32-bitcount( compl32 ( netmask) )
# range calculations:
# ipcalc <ip> <netmask> <start> <num>