mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-19 21:58:04 +00:00
ipcalc.sh CIDR notation Hi,
the attached patch makes ipcalc.sh accept IP/Netmask combinations in CIDR notation. Before you could only do: # sh ipcalc.sh 192.168.0.0 255.255.255.0 1 10 IP=192.168.0.0 NETMASK=255.255.255.0 BROADCAST=192.168.0.255 NETWORK=192.168.0.0 PREFIX=24 START=192.168.0.1 END=192.168.0.11 with this patch you can also execute it with: sh ipcalc.sh 192.168.0.0/24 1 10 IP=192.168.0.0 NETMASK=255.255.255.0 BROADCAST=192.168.0.255 NETWORK=192.168.0.0 PREFIX=24 START=192.168.0.1 END=192.168.0.11 The patch is based on #1260 [1], i just changed one line to calculate the START end END ips right. I wonder why that never got included. If there is no reason not to do i would like to ask you to commit that patch, because its a functionality i (and probably others) miss quite often. Btw, i also fixed 4 useless tabs, that might look a bit strange in the patch. Regards, Manuel SVN-Revision: 26930
This commit is contained in:
parent
e35822050b
commit
ed8f726dab
@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
include $(INCLUDE_DIR)/kernel.mk
|
include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
PKG_NAME:=base-files
|
PKG_NAME:=base-files
|
||||||
PKG_RELEASE:=69
|
PKG_RELEASE:=70
|
||||||
|
|
||||||
PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
|
PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
|
||||||
PKG_BUILD_DEPENDS:=opkg/host
|
PKG_BUILD_DEPENDS:=opkg/host
|
||||||
|
@ -23,15 +23,24 @@ function int2ip(ip,ret,x) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BEGIN {
|
BEGIN {
|
||||||
ipaddr=ip2int(ARGV[1])
|
slpos=index(ARGV[1],"/")
|
||||||
netmask=ip2int(ARGV[2])
|
if (slpos == 0) {
|
||||||
|
ipaddr=ip2int(ARGV[1])
|
||||||
|
netmask=ip2int(ARGV[2])
|
||||||
|
} else {
|
||||||
|
ipaddr=ip2int(substr(ARGV[1],0,slpos-1))
|
||||||
|
netmask=compl(2**(32-int(substr(ARGV[1],slpos+1)))-1)
|
||||||
|
ARGV[4]=ARGV[3]
|
||||||
|
ARGV[3]=ARGV[2]
|
||||||
|
}
|
||||||
|
|
||||||
network=and(ipaddr,netmask)
|
network=and(ipaddr,netmask)
|
||||||
broadcast=or(network,compl(netmask))
|
broadcast=or(network,compl(netmask))
|
||||||
|
|
||||||
start=or(network,and(ip2int(ARGV[3]),compl(netmask)))
|
start=or(network,and(ip2int(ARGV[3]),compl(netmask)))
|
||||||
limit=network+1
|
limit=network+1
|
||||||
if (start<limit) start=limit
|
if (start<limit) start=limit
|
||||||
|
|
||||||
end=start+ARGV[4]
|
end=start+ARGV[4]
|
||||||
limit=or(network,compl(netmask))-1
|
limit=or(network,compl(netmask))-1
|
||||||
if (end>limit) end=limit
|
if (end>limit) end=limit
|
||||||
@ -41,10 +50,10 @@ BEGIN {
|
|||||||
print "BROADCAST="int2ip(broadcast)
|
print "BROADCAST="int2ip(broadcast)
|
||||||
print "NETWORK="int2ip(network)
|
print "NETWORK="int2ip(network)
|
||||||
print "PREFIX="32-bitcount(compl(netmask))
|
print "PREFIX="32-bitcount(compl(netmask))
|
||||||
|
|
||||||
# range calculations:
|
# range calculations:
|
||||||
# ipcalc <ip> <netmask> <start> <num>
|
# ipcalc <ip> <netmask> <start> <num>
|
||||||
|
|
||||||
if (ARGC > 3) {
|
if (ARGC > 3) {
|
||||||
print "START="int2ip(start)
|
print "START="int2ip(start)
|
||||||
print "END="int2ip(end)
|
print "END="int2ip(end)
|
||||||
|
Loading…
Reference in New Issue
Block a user