aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrodri <rgl@antares-labs.eu>2020-08-30 13:47:07 +0000
committerrodri <rgl@antares-labs.eu>2020-08-30 13:47:07 +0000
commit0e0598ccdd92079cf31f914d4e14749769cb8ba1 (patch)
treef88782bd29c3dd0d7322f3abf6033a5af2e9937e
parentd65c1d05d062eb91824c9c376063ca6a51c0e369 (diff)
downloadipcalc-0e0598ccdd92079cf31f914d4e14749769cb8ba1.tar.gz
ipcalc-0e0598ccdd92079cf31f914d4e14749769cb8ba1.tar.bz2
ipcalc-0e0598ccdd92079cf31f914d4e14749769cb8ba1.zip
allow the cidr to be used in place of an ip mask
-rw-r--r--main.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/main.c b/main.c
index af10edb..6cfd203 100644
--- a/main.c
+++ b/main.c
@@ -74,6 +74,7 @@ main(int argc, char *argv[])
IPNet net;
u32int addr, mask;
char *a, *m;
+ int cidr;
fmtinstall('I', Ifmt);
fmtinstall('N', Nfmt);
@@ -89,10 +90,15 @@ main(int argc, char *argv[])
addr |= strtoul(++a, &a, 10) << 8;
addr |= strtoul(++a, &a, 10);
m = argv[1];
- mask = strtoul(m, &m, 10) << 24;
- mask |= strtoul(++m, &m, 10) << 16;
- mask |= strtoul(++m, &m, 10) << 8;
- mask |= strtoul(++m, &m, 10);
+ if(strlen(m) <= 2){
+ cidr = strtol(m, nil, 10);
+ mask = ~0 << (32-cidr);
+ }else{
+ mask = strtoul(m, &m, 10) << 24;
+ mask |= strtoul(++m, &m, 10) << 16;
+ mask |= strtoul(++m, &m, 10) << 8;
+ mask |= strtoul(++m, &m, 10);
+ }
net.addr = addr&mask;
net.mask = mask;