diff options
author | Thorsten Lockert <tholo@cvs.openbsd.org> | 1997-01-25 23:26:43 +0000 |
---|---|---|
committer | Thorsten Lockert <tholo@cvs.openbsd.org> | 1997-01-25 23:26:43 +0000 |
commit | 0abadb8cc9b60023b9d8d54ebc2e36909bdd52fc (patch) | |
tree | 8f5562872e59df8f99b24ebe130eaeebdf966eca /usr.bin/netstat | |
parent | 92c3cc45c111638fc87b4a4cc63df68efd43356c (diff) |
Attempt to give the entire passed address to getnetbyaddr() before starting
to try various network masks
Diffstat (limited to 'usr.bin/netstat')
-rw-r--r-- | usr.bin/netstat/route.c | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/usr.bin/netstat/route.c b/usr.bin/netstat/route.c index e0645de89fc..5a0438156e4 100644 --- a/usr.bin/netstat/route.c +++ b/usr.bin/netstat/route.c @@ -1,4 +1,4 @@ -/* $OpenBSD: route.c,v 1.7 1997/01/17 07:13:00 millert Exp $ */ +/* $OpenBSD: route.c,v 1.8 1997/01/25 23:26:42 tholo Exp $ */ /* $NetBSD: route.c,v 1.15 1996/05/07 02:55:06 thorpej Exp $ */ /* @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "from: @(#)route.c 8.3 (Berkeley) 3/9/94"; #else -static char *rcsid = "$OpenBSD: route.c,v 1.7 1997/01/17 07:13:00 millert Exp $"; +static char *rcsid = "$OpenBSD: route.c,v 1.8 1997/01/25 23:26:42 tholo Exp $"; #endif #endif /* not lint */ @@ -541,30 +541,33 @@ netname(in, mask) in = ntohl(in); mask = ntohl(mask); if (!nflag && in != INADDR_ANY) { - if (mask == INADDR_ANY) { - if (IN_CLASSA(in)) { - mask = IN_CLASSA_NET; - subnetshift = 8; - } else if (IN_CLASSB(in)) { - mask = IN_CLASSB_NET; - subnetshift = 8; - } else { - mask = IN_CLASSC_NET; - subnetshift = 4; + np = getnetbyaddr(in, AF_INET); + if (np == NULL) { + if (mask == INADDR_ANY) { + if (IN_CLASSA(in)) { + mask = IN_CLASSA_NET; + subnetshift = 8; + } else if (IN_CLASSB(in)) { + mask = IN_CLASSB_NET; + subnetshift = 8; + } else { + mask = IN_CLASSC_NET; + subnetshift = 4; + } + /* + * If there are more bits than the standard mask + * would suggest, subnets must be in use. + * Guess at the subnet mask, assuming reasonable + * width subnet fields. + */ + while (in &~ mask) + mask = (long)mask >> subnetshift; } - /* - * If there are more bits than the standard mask - * would suggest, subnets must be in use. - * Guess at the subnet mask, assuming reasonable - * width subnet fields. - */ - while (in &~ mask) - mask = (long)mask >> subnetshift; + net = in & mask; + while ((mask & 1) == 0) + mask >>= 1, net >>= 1; + np = getnetbyaddr(net, AF_INET); } - net = in & mask; - while ((mask & 1) == 0) - mask >>= 1, net >>= 1; - np = getnetbyaddr(net, AF_INET); if (np) cp = np->n_name; } |