X-Git-Url: https://gitweb.dragonflybsd.org/~tuxillo/dragonfly.git/blobdiff_plain/deeabf4d862ca1e554c71943019c077fb230d02e..4ff4d99fc851da1a09ed7e6a9fe054d2dd3d6013:/sbin/route/route.c diff --git a/sbin/route/route.c b/sbin/route/route.c index 629725722e..924c7646c6 100644 --- a/sbin/route/route.c +++ b/sbin/route/route.c @@ -10,11 +10,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -126,10 +122,6 @@ usage(const char *cp) /* NOTREACHED */ } -#define ROUNDUP(a) \ - ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long)) -#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len)) - int main(int argc, char **argv) { @@ -303,7 +295,7 @@ bad: usage(*argv); printf("%-20.20s ", rtm->rtm_flags & RTF_HOST ? routename(sa) : netname(sa)); } - sa = (struct sockaddr *)(ROUNDUP(sa->sa_len) + + sa = (struct sockaddr *)(RT_ROUNDUP(sa->sa_len) + (char *)sa); if (wflag) { printf("%-20s ", routename(sa)); @@ -462,7 +454,7 @@ netname(struct sockaddr *sa) * width subnet fields. */ while (in.s_addr &~ mask) - mask = (long)mask >> subnetshift; + mask |= mask >> subnetshift; net = in.s_addr & mask; while ((mask & 1) == 0) mask >>= 1, net >>= 1; @@ -563,6 +555,8 @@ set_metric(char *value, int key) caseof(K_RTT, RTV_RTT, rmx_rtt); caseof(K_RTTVAR, RTV_RTTVAR, rmx_rttvar); caseof(K_MSL, RTV_MSL, rmx_msl); + caseof(K_IWMAX, RTV_IWMAXSEGS, rmx_iwmaxsegs); + caseof(K_IW, RTV_IWCAPSEGS, rmx_iwcapsegs); } rtm_inits |= flag; if (lockrest || locking) @@ -763,6 +757,8 @@ newroute(int argc, char **argv) case K_RTT: case K_RTTVAR: case K_MSL: + case K_IWMAX: + case K_IW: if (--argc == 0) usage(NULL); set_metric(*++argv, key); @@ -1262,7 +1258,7 @@ rtmsg(int cmd, int flags) #define NEXTADDR(w, u) \ if (rtm_addrs & (w)) {\ - l = ROUNDUP(u.sa.sa_len); memmove(cp, &(u), l); cp += l;\ + l = RT_ROUNDUP(u.sa.sa_len); memmove(cp, &(u), l); cp += l;\ if (verbose) sodump(&(u),"u");\ } @@ -1376,8 +1372,8 @@ const char *msgtypes[] = { }; char metricnames[] = -"\011msl\010rttvar\7rtt\6ssthresh\5sendpipe\4recvpipe\3expire\2hopcount" -"\1mtu"; +"\013iw\012iwmax\011msl\010rttvar\7rtt\6ssthresh\5sendpipe\4recvpipe\3expire" +"\2hopcount\1mtu"; char routeflags[] = "\1UP\2GATEWAY\3HOST\4REJECT\5DYNAMIC\6MODIFIED\7DONE\010MASK_PRESENT" "\011CLONING\012XRESOLVE\013LLINFO\014STATIC\015BLACKHOLE\016b016" @@ -1504,7 +1500,7 @@ print_getmsg(struct rt_msghdr *rtm, int msglen) ifp = (struct sockaddr_dl *)sa; break; } - ADVANCE(cp, sa); + RT_ADVANCE(cp, sa); } if (dst != NULL && mask != NULL) mask->sa_family = dst->sa_family; /* XXX */ @@ -1529,7 +1525,7 @@ print_getmsg(struct rt_msghdr *rtm, int msglen) #define msec(u) (((u) + 500) / 1000) /* usec to msec */ printf("\n%s\n", "\ - recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire msl,msec"); + recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire msl,msec iwmax iw"); printf("%8ld%c ", rtm->rtm_rmx.rmx_recvpipe, lock(RPIPE)); printf("%8ld%c ", rtm->rtm_rmx.rmx_sendpipe, lock(SPIPE)); printf("%8ld%c ", rtm->rtm_rmx.rmx_ssthresh, lock(SSTHRESH)); @@ -1537,10 +1533,15 @@ print_getmsg(struct rt_msghdr *rtm, int msglen) printf("%8ld%c ", msec(rtm->rtm_rmx.rmx_rttvar), lock(RTTVAR)); printf("%8ld%c ", rtm->rtm_rmx.rmx_hopcount, lock(HOPCOUNT)); printf("%8ld%c ", rtm->rtm_rmx.rmx_mtu, lock(MTU)); - if (rtm->rtm_rmx.rmx_expire != 0) - rtm->rtm_rmx.rmx_expire -= time(0); + if (rtm->rtm_rmx.rmx_expire != 0) { + struct timespec sp; + clock_gettime(CLOCK_MONOTONIC, &sp); + rtm->rtm_rmx.rmx_expire -= sp.tv_sec; + } printf("%8ld%c ", rtm->rtm_rmx.rmx_expire, lock(EXPIRE)); - printf("%8ld\n", rtm->rtm_rmx.rmx_msl); + printf("%8ld ", rtm->rtm_rmx.rmx_msl); + printf("%5ld ", rtm->rtm_rmx.rmx_iwmaxsegs); + printf("%3ld\n", rtm->rtm_rmx.rmx_iwcapsegs); #undef lock #undef msec #define RTA_IGN (RTA_DST|RTA_GATEWAY|RTA_NETMASK|RTA_IFP|RTA_IFA|RTA_BRD) @@ -1581,7 +1582,7 @@ pmsg_addrs(char *cp, int addrs) if (i & addrs) { sa = (struct sockaddr *)cp; printf(" %s", routename(sa)); - ADVANCE(cp, sa); + RT_ADVANCE(cp, sa); } putchar('\n'); fflush(stdout);