diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-02-11 23:36:29 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-02-11 23:36:29 +0100 |
commit | 168dabc142d40a1cdce87e836806a9913bb6534e (patch) | |
tree | ab00baddb02d25f86bd2b61d6e36a3b2db0843c5 /sys | |
parent | 595fbddb1c9e152d9080d7b0faa301709fa6466d (diff) |
ip/rip: use new parseipandmask() function
Diffstat (limited to 'sys')
-rw-r--r-- | sys/src/cmd/ip/rip.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/sys/src/cmd/ip/rip.c b/sys/src/cmd/ip/rip.c index 5ee37f9f2..dd8a4ab1c 100644 --- a/sys/src/cmd/ip/rip.c +++ b/sys/src/cmd/ip/rip.c @@ -143,17 +143,6 @@ fatal(int syserr, char *fmt, ...) exits(buf); } -ulong -v4parseipmask(uchar *ip, char *p) -{ - ulong x; - uchar v6ip[IPaddrlen]; - - x = parseipmask(v6ip, p); - memmove(ip, v6ip+IPv4off, 4); - return x; -} - uchar* v4defmask(uchar *ip) { @@ -179,6 +168,18 @@ v6tov4mask(uchar *v4, uchar *v6) memmove(v4, v6+IPv4off, 4); } +int +v4parseipandmask(uchar *ip, uchar *mask, char *p, char *m) +{ + uchar v6ip[IPaddrlen], v6mask[IPaddrlen]; + + if(parseipandmask(v6ip, v6mask, p, m) == -1) + return -1; + v6tov4mask(mask, v6mask); + return v6tov4(ip, v6ip); +} + + #define equivip(a, b) (memcmp((a), (b), Pasize) == 0) void @@ -355,8 +356,7 @@ readifcs(void) i = 0; for(ifc = ifcs; ifc != nil; ifc = ifc->next){ for(lifc = ifc->lifc; lifc != nil && i < Nifc; lifc = lifc->next){ - // ignore any interfaces that aren't v4 - if(memcmp(lifc->ip, v4prefix, IPaddrlen-IPv4addrlen) != 0) + if(!isv4(lifc->ip)) continue; ip = &ialloc.ifc[i++]; v6tov4(ip->addr, lifc->ip); @@ -403,12 +403,11 @@ readroutes(void) n = getfields(p, f, 6, 1, " \t"); if(n < 5) continue; - v4parseip(route.dest, f[0]); - v4parseipmask(route.mask, f[1]); + if(v4parseipandmask(route.dest, route.mask, f[0], f[1]) == -1) + continue; v4parseip(route.gate, f[2]); route.metric = Infinity; - if(equivip(route.dest, ralloc.def.dest) - && equivip(route.mask, ralloc.def.mask)) + if(equivip(route.dest, ralloc.def.dest) && equivip(route.mask, ralloc.def.mask)) memmove(ralloc.def.gate, route.gate, Pasize); else if(!equivip(route.dest, route.gate) && strchr(f[3], 'i') == 0) considerroute(&route); |