base-files: ipcalc.sh: Should take netmask or prefix after slash
authorPhilip Prindeville <philipp@redfish-solutions.com>
Sun, 19 Nov 2023 19:26:15 +0000 (12:26 -0700)
committerKevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Sun, 19 Nov 2023 20:36:40 +0000 (20:36 +0000)
dnmasq.init now invokes ipcalc.sh as either:

ipcalc.sh address/netmask ...

or:

ipcalc.sh address/prefix

but the existing version doesn't accept the 2nd notation.  We're
trying to rationalize the usage of ipcalc.sh, and here we add
support for the 2nd format.

Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
package/base-files/files/bin/ipcalc.sh

index 827cb5dc2ead717d9258dbba9e93841ffbdc5462..9b5e5accdca8ca1c4198ae573240eb57e7e70448 100755 (executable)
@@ -34,19 +34,19 @@ function compl32(v) {
 
 BEGIN {
        slpos=index(ARGV[1],"/")
-       if (slpos == 0) {
-               ipaddr=ip2int(ARGV[1])
-               dotpos=index(ARGV[2],".")
-               if (dotpos == 0)
-                       netmask=compl32(2**(32-int(ARGV[2]))-1)
-               else
-                       netmask=ip2int(ARGV[2])
-       } else {
-               ipaddr=ip2int(substr(ARGV[1],0,slpos-1))
-               netmask=compl32(2**(32-int(substr(ARGV[1],slpos+1)))-1)
+       if (slpos != 0) {
+               # rearrange arguments to not use compound notation
                ARGV[4]=ARGV[3]
                ARGV[3]=ARGV[2]
+               ARGV[2]=substr(ARGV[1],slpos+1)
+               ARGV[1]=substr(ARGV[1],0,slpos-1)
        }
+       ipaddr=ip2int(ARGV[1])
+       dotpos=index(ARGV[2],".")
+       if (dotpos == 0)
+               netmask=compl32(2**(32-int(ARGV[2]))-1)
+       else
+               netmask=ip2int(ARGV[2])
 
        network=and(ipaddr,netmask)
        prefix=32-bitcount(compl32(netmask))