svn commit: r256695 - head/sbin/route

Hiroki Sato hrs at FreeBSD.org
Thu Oct 17 19:04:06 UTC 2013


Author: hrs
Date: Thu Oct 17 19:04:05 2013
New Revision: 256695
URL: http://svnweb.freebsd.org/changeset/base/256695

Log:
  - Add relative specification in expiration time.
  - Add proto3 option for RTF_PROTO3.
  - Use %lu for members of struct rt_metrics.

Modified:
  head/sbin/route/keywords
  head/sbin/route/route.8
  head/sbin/route/route.c

Modified: head/sbin/route/keywords
==============================================================================
--- head/sbin/route/keywords	Thu Oct 17 18:37:25 2013	(r256694)
+++ head/sbin/route/keywords	Thu Oct 17 19:04:05 2013	(r256695)
@@ -39,6 +39,7 @@ osi
 prefixlen
 proto1
 proto2
+proto3
 proxy
 recvpipe
 reject

Modified: head/sbin/route/route.8
==============================================================================
--- head/sbin/route/route.8	Thu Oct 17 18:37:25 2013	(r256694)
+++ head/sbin/route/route.8	Thu Oct 17 19:04:05 2013	(r256695)
@@ -28,7 +28,7 @@
 .\"     @(#)route.8	8.3 (Berkeley) 3/19/94
 .\" $FreeBSD$
 .\"
-.Dd November 17, 2012
+.Dd October 17, 2013
 .Dt ROUTE 8
 .Os
 .Sh NAME
@@ -301,6 +301,7 @@ by indicating the following correspondin
 -blackhole RTF_BLACKHOLE  - silently discard pkts (during updates)
 -proto1    RTF_PROTO1     - set protocol specific routing flag #1
 -proto2    RTF_PROTO2     - set protocol specific routing flag #2
+-proto3    RTF_PROTO3     - set protocol specific routing flag #3
 .Ed
 .Pp
 The optional modifiers
@@ -324,6 +325,17 @@ specify that all ensuing metrics may be 
 .Fl lockrest
 meta-modifier.
 .Pp
+Note that
+.Fl expire
+accepts expiration time of the route as the number of seconds since the
+Epoch
+.Pq see Xr time 3 .
+When the first character of the number is
+.Dq +
+or
+.Dq - ,
+it is interpreted as a value relative to the current time.
+.Pp
 The optional modifier
 .Fl fib Ar number
 specifies that the command will be applied to a non-default FIB.

Modified: head/sbin/route/route.c
==============================================================================
--- head/sbin/route/route.c	Thu Oct 17 18:37:25 2013	(r256694)
+++ head/sbin/route/route.c	Thu Oct 17 19:04:05 2013	(r256695)
@@ -67,6 +67,7 @@ __FBSDID("$FreeBSD$");
 #include <stdlib.h>
 #include <string.h>
 #include <sysexits.h>
+#include <time.h>
 #include <unistd.h>
 #include <ifaddrs.h>
 
@@ -723,6 +724,7 @@ static void
 set_metric(char *value, int key)
 {
 	int flag = 0;
+	char *endptr;
 	u_long noval, *valp = &noval;
 
 	switch (key) {
@@ -742,7 +744,18 @@ set_metric(char *value, int key)
 		rt_metrics.rmx_locks |= flag;
 	if (locking)
 		locking = 0;
-	*valp = atoi(value);
+	errno = 0;
+	*valp = strtol(value, &endptr, 0);
+	if (errno == 0 && *endptr != '\0')
+		errno = EINVAL;
+	if (errno)
+		err(EX_USAGE, "%s", value);
+	if (flag & RTV_EXPIRE && (value[0] == '+' || value[0] == '-')) {
+		struct timespec ts;
+
+		clock_gettime(CLOCK_REALTIME_FAST, &ts);
+		*valp += ts.tv_sec;
+	}
 }
 
 #define	F_ISHOST	0x01
@@ -827,6 +840,9 @@ newroute(int argc, char **argv)
 			case K_PROTO2:
 				flags |= RTF_PROTO2;
 				break;
+			case K_PROTO3:
+				flags |= RTF_PROTO3;
+				break;
 			case K_PROXY:
 				nrflags |= F_PROXY;
 				break;
@@ -1681,6 +1697,7 @@ static void
 print_getmsg(struct rt_msghdr *rtm, int msglen, int fib)
 {
 	struct sockaddr *sp[RTAX_MAX];
+	struct timespec ts;
 	char *cp;
 	int i;
 
@@ -1733,15 +1750,17 @@ print_getmsg(struct rt_msghdr *rtm, int 
 #define msec(u)	(((u) + 500) / 1000)		/* usec to msec */
 	printf("\n%9s %9s %9s %9s %9s %10s %9s\n", "recvpipe",
 	    "sendpipe", "ssthresh", "rtt,msec", "mtu   ", "weight", "expire");
-	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_rtt), lock(RTT));
-	printf("%8ld%c ", rtm->rtm_rmx.rmx_mtu, lock(MTU));
-	printf("%8ld%c ", rtm->rtm_rmx.rmx_weight, lock(WEIGHT));
-	if (rtm->rtm_rmx.rmx_expire)
-		rtm->rtm_rmx.rmx_expire -= time(0);
-	printf("%8ld%c\n", rtm->rtm_rmx.rmx_expire, lock(EXPIRE));
+	printf("%8lu%c ", rtm->rtm_rmx.rmx_recvpipe, lock(RPIPE));
+	printf("%8lu%c ", rtm->rtm_rmx.rmx_sendpipe, lock(SPIPE));
+	printf("%8lu%c ", rtm->rtm_rmx.rmx_ssthresh, lock(SSTHRESH));
+	printf("%8lu%c ", msec(rtm->rtm_rmx.rmx_rtt), lock(RTT));
+	printf("%8lu%c ", rtm->rtm_rmx.rmx_mtu, lock(MTU));
+	printf("%8lu%c ", rtm->rtm_rmx.rmx_weight, lock(WEIGHT));
+	if (rtm->rtm_rmx.rmx_expire > 0)
+		clock_gettime(CLOCK_REALTIME_FAST, &ts);
+	else
+		ts.tv_sec = 0;
+	printf("%8ld%c\n", rtm->rtm_rmx.rmx_expire - ts.tv_sec, lock(EXPIRE));
 #undef lock
 #undef msec
 #define	RTA_IGN	(RTA_DST|RTA_GATEWAY|RTA_NETMASK|RTA_IFP|RTA_IFA|RTA_BRD)


More information about the svn-src-head mailing list