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)