ip/rip: use new parseipandmask() function
This commit is contained in:
parent
595fbddb1c
commit
168dabc142
|
@ -143,17 +143,6 @@ fatal(int syserr, char *fmt, ...)
|
||||||
exits(buf);
|
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*
|
uchar*
|
||||||
v4defmask(uchar *ip)
|
v4defmask(uchar *ip)
|
||||||
{
|
{
|
||||||
|
@ -179,6 +168,18 @@ v6tov4mask(uchar *v4, uchar *v6)
|
||||||
memmove(v4, v6+IPv4off, 4);
|
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)
|
#define equivip(a, b) (memcmp((a), (b), Pasize) == 0)
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -355,8 +356,7 @@ readifcs(void)
|
||||||
i = 0;
|
i = 0;
|
||||||
for(ifc = ifcs; ifc != nil; ifc = ifc->next){
|
for(ifc = ifcs; ifc != nil; ifc = ifc->next){
|
||||||
for(lifc = ifc->lifc; lifc != nil && i < Nifc; lifc = lifc->next){
|
for(lifc = ifc->lifc; lifc != nil && i < Nifc; lifc = lifc->next){
|
||||||
// ignore any interfaces that aren't v4
|
if(!isv4(lifc->ip))
|
||||||
if(memcmp(lifc->ip, v4prefix, IPaddrlen-IPv4addrlen) != 0)
|
|
||||||
continue;
|
continue;
|
||||||
ip = &ialloc.ifc[i++];
|
ip = &ialloc.ifc[i++];
|
||||||
v6tov4(ip->addr, lifc->ip);
|
v6tov4(ip->addr, lifc->ip);
|
||||||
|
@ -403,12 +403,11 @@ readroutes(void)
|
||||||
n = getfields(p, f, 6, 1, " \t");
|
n = getfields(p, f, 6, 1, " \t");
|
||||||
if(n < 5)
|
if(n < 5)
|
||||||
continue;
|
continue;
|
||||||
v4parseip(route.dest, f[0]);
|
if(v4parseipandmask(route.dest, route.mask, f[0], f[1]) == -1)
|
||||||
v4parseipmask(route.mask, f[1]);
|
continue;
|
||||||
v4parseip(route.gate, f[2]);
|
v4parseip(route.gate, f[2]);
|
||||||
route.metric = Infinity;
|
route.metric = Infinity;
|
||||||
if(equivip(route.dest, ralloc.def.dest)
|
if(equivip(route.dest, ralloc.def.dest) && equivip(route.mask, ralloc.def.mask))
|
||||||
&& equivip(route.mask, ralloc.def.mask))
|
|
||||||
memmove(ralloc.def.gate, route.gate, Pasize);
|
memmove(ralloc.def.gate, route.gate, Pasize);
|
||||||
else if(!equivip(route.dest, route.gate) && strchr(f[3], 'i') == 0)
|
else if(!equivip(route.dest, route.gate) && strchr(f[3], 'i') == 0)
|
||||||
considerroute(&route);
|
considerroute(&route);
|
||||||
|
|
Loading…
Reference in a new issue