* 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.
*
/* 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)
{
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));
* 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;
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)
case K_RTT:
case K_RTTVAR:
case K_MSL:
+ case K_IWMAX:
+ case K_IW:
if (--argc == 0)
usage(NULL);
set_metric(*++argv, key);
#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");\
}
};
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"
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 */
#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));
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)
if (i & addrs) {
sa = (struct sockaddr *)cp;
printf(" %s", routename(sa));
- ADVANCE(cp, sa);
+ RT_ADVANCE(cp, sa);
}
putchar('\n');
fflush(stdout);