diff options
Diffstat (limited to 'package')
| -rwxr-xr-x | package/base-files/files/bin/ipcalc.sh | 15 | 
1 files changed, 10 insertions, 5 deletions
| diff --git a/package/base-files/files/bin/ipcalc.sh b/package/base-files/files/bin/ipcalc.sh index d6ef16870..7463d6bdd 100755 --- a/package/base-files/files/bin/ipcalc.sh +++ b/package/base-files/files/bin/ipcalc.sh @@ -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> | 
