diff --git a/sbin/route/route.8 b/sbin/route/route.8 index 5e67f44078fc..a6d8b72706e3 100644 --- a/sbin/route/route.8 +++ b/sbin/route/route.8 @@ -168,7 +168,7 @@ route to a host. Optionally, the .Ar destination could also be specified in the -.Ar host Ns / Ns Ar bits +.Ar net Ns / Ns Ar bits format. .Pp For example, @@ -185,9 +185,9 @@ is interpreted as is interpreted as .Li 128.32.130.0; and -.Li 192.168.0.0/16 +.Li 192.168.64/20 is interpreted as -.Li 192.168.0.0 Fl netmask Li 255.255.0.0 . +.Fl net Li 192.168.64 Fl netmask Li 255.255.240.0 . .Pp A .Ar destination diff --git a/sbin/route/route.c b/sbin/route/route.c index 77aa720e97db..467dbe18d4d6 100644 --- a/sbin/route/route.c +++ b/sbin/route/route.c @@ -759,10 +759,7 @@ inet_makenetandmask(net, sin, bits) register char *cp; rtm_addrs |= RTA_NETMASK; - if (bits) { - addr = net; - mask = 0xffffffff << (32 - bits); - } else if (net == 0) + if (net == 0) mask = addr = 0; else if (net < 128) { addr = net << IN_CLASSA_NSHIFT; @@ -784,6 +781,8 @@ inet_makenetandmask(net, sin, bits) else mask = -1; } + if (bits) + mask = 0xffffffff << (32 - bits); sin->sin_addr.s_addr = htonl(addr); sin = &so_mask.sin; sin->sin_addr.s_addr = htonl(mask); @@ -976,9 +975,9 @@ getaddr(which, s, hpp) q = strchr(s,'/'); if (q && which == RTA_DST) { *q = '\0'; - if ((val = inet_addr(s)) != INADDR_NONE) { + if ((val = inet_network(s)) != INADDR_NONE) { inet_makenetandmask( - ntohl(val), &su->sin, strtoul(q+1, 0, 0)); + val, &su->sin, strtoul(q+1, 0, 0)); return (0); } *q = '/';