Hi, Prepare the route command for using 64 bit route expire time and fix the relative expire time calculations.
ok? bluhm Index: sbin/route/route.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sbin/route/route.c,v retrieving revision 1.163 diff -u -p -u -p -r1.163 route.c --- sbin/route/route.c 19 Jul 2013 20:10:23 -0000 1.163 +++ sbin/route/route.c 28 Sep 2013 22:46:01 -0000 @@ -362,17 +362,23 @@ flushroutes(int argc, char **argv) void set_metric(char *value, int key) { - int flag = 0; - u_int noval, *valp = &noval; + long long relative_expire; const char *errstr; + int flag = 0; switch (key) { case K_MTU: - valp = &rt_metrics.rmx_mtu; + rt_metrics.rmx_mtu = strtonum(value, 0, UINT_MAX, &errstr); + if (errstr) + errx(1, "set_metric mtu: %s is %s", value, errstr); flag = RTV_MTU; break; case K_EXPIRE: - valp = &rt_metrics.rmx_expire; + relative_expire = strtonum(value, 0, INT_MAX, &errstr); + if (errstr) + errx(1, "set_metric expire: %s is %s", value, errstr); + rt_metrics.rmx_expire = relative_expire ? + relative_expire + time(NULL) : 0; flag = RTV_EXPIRE; break; case K_HOPCOUNT: @@ -391,9 +397,6 @@ set_metric(char *value, int key) rt_metrics.rmx_locks |= flag; if (locking) locking = 0; - *valp = strtonum(value, 0, UINT_MAX, &errstr); - if (errstr) - errx(1, "set_metric: %s is %s", value, errstr); } int @@ -1274,6 +1277,7 @@ get_linkstate(int mt, int link_state) void print_rtmsg(struct rt_msghdr *rtm, int msglen) { + long long relative_expire; struct if_msghdr *ifm; struct ifa_msghdr *ifam; struct if_announcemsghdr *ifan; @@ -1340,12 +1344,12 @@ print_rtmsg(struct rt_msghdr *rtm, int m bprintf(stdout, rtm->rtm_flags, routeflags); if (verbose) { #define lock(f) ((rtm->rtm_rmx.rmx_locks & __CONCAT(RTV_,f)) ? 'L' : ' ') - if (rtm->rtm_rmx.rmx_expire) - rtm->rtm_rmx.rmx_expire -= time(NULL); - printf("\nuse: %8llu mtu: %8u%c expire: %8d%c", + relative_expire = rtm->rtm_rmx.rmx_expire ? + rtm->rtm_rmx.rmx_expire - time(NULL) : 0; + printf("\nuse: %8llu mtu: %8u%c expire: %8lld%c", rtm->rtm_rmx.rmx_pksent, rtm->rtm_rmx.rmx_mtu, lock(MTU), - rtm->rtm_rmx.rmx_expire, lock(EXPIRE)); + relative_expire, lock(EXPIRE)); #undef lock } pmsg_common(rtm); @@ -1380,6 +1384,7 @@ priorityname(u_int8_t prio) void print_getmsg(struct rt_msghdr *rtm, int msglen) { + long long relative_expire; struct sockaddr *dst = NULL, *gate = NULL, *mask = NULL, *ifa = NULL; struct sockaddr_dl *ifp = NULL; struct sockaddr_rtlabel *sa_rl = NULL; @@ -1465,12 +1470,13 @@ print_getmsg(struct rt_msghdr *rtm, int printf(" label: %s\n", sa_rl->sr_label); #define lock(f) ((rtm->rtm_rmx.rmx_locks & __CONCAT(RTV_,f)) ? 'L' : ' ') - printf("%s\n", " use mtu expire"); - printf("%8llu ", rtm->rtm_rmx.rmx_pksent); - printf("%8u%c ", rtm->rtm_rmx.rmx_mtu, lock(MTU)); - if (rtm->rtm_rmx.rmx_expire) - rtm->rtm_rmx.rmx_expire -= time(NULL); - printf("%8d%c\n", rtm->rtm_rmx.rmx_expire, lock(EXPIRE)); + relative_expire = rtm->rtm_rmx.rmx_expire ? + rtm->rtm_rmx.rmx_expire - time(NULL) : 0; + printf(" use mtu expire\n"); + printf("%8llu %8u%c %8lld%c\n", + rtm->rtm_rmx.rmx_pksent, + rtm->rtm_rmx.rmx_mtu, lock(MTU), + relative_expire, lock(EXPIRE)); #undef lock #define RTA_IGN (RTA_DST|RTA_GATEWAY|RTA_NETMASK|RTA_IFP|RTA_IFA|RTA_BRD) if (verbose)