Author: ume
Date: Mon Jun 30 16:39:37 2014
New Revision: 268049
URL: http://svnweb.freebsd.org/changeset/base/268049

Log:
  Fix ifconfig to show pltime and vltime with -L option,
  again after usage change from time_second to time_uptime.
  
  PR:           188520
  Submitted by: Guy Yur <guyyur__at__gmail.com>
  MFC after:    1 week

Modified:
  head/sbin/ifconfig/af_inet6.c

Modified: head/sbin/ifconfig/af_inet6.c
==============================================================================
--- head/sbin/ifconfig/af_inet6.c       Mon Jun 30 16:32:49 2014        
(r268048)
+++ head/sbin/ifconfig/af_inet6.c       Mon Jun 30 16:39:37 2014        
(r268049)
@@ -42,6 +42,7 @@ static const char rcsid[] =
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <time.h>
 #include <ifaddrs.h>
 
 #include <arpa/inet.h>
@@ -98,20 +99,21 @@ static void
 setip6lifetime(const char *cmd, const char *val, int s, 
     const struct afswtch *afp)
 {
-       time_t newval, t;
+       struct timespec now;
+       time_t newval;
        char *ep;
 
-       t = time(NULL);
+       clock_gettime(CLOCK_MONOTONIC_FAST, &now);
        newval = (time_t)strtoul(val, &ep, 0);
        if (val == ep)
                errx(1, "invalid %s", cmd);
        if (afp->af_af != AF_INET6)
                errx(1, "%s not allowed for the AF", cmd);
        if (strcmp(cmd, "vltime") == 0) {
-               in6_addreq.ifra_lifetime.ia6t_expire = t + newval;
+               in6_addreq.ifra_lifetime.ia6t_expire = now.tv_sec + newval;
                in6_addreq.ifra_lifetime.ia6t_vltime = newval;
        } else if (strcmp(cmd, "pltime") == 0) {
-               in6_addreq.ifra_lifetime.ia6t_preferred = t + newval;
+               in6_addreq.ifra_lifetime.ia6t_preferred = now.tv_sec + newval;
                in6_addreq.ifra_lifetime.ia6t_pltime = newval;
        }
 }
@@ -172,9 +174,11 @@ in6_status(int s __unused, const struct 
        int s6;
        u_int32_t flags6;
        struct in6_addrlifetime lifetime;
-       time_t t = time(NULL);
+       struct timespec now;
        int error;
 
+       clock_gettime(CLOCK_MONOTONIC_FAST, &now);
+
        memset(&null_sin, 0, sizeof(null_sin));
 
        sin = (struct sockaddr_in6 *)ifa->ifa_addr;
@@ -258,15 +262,15 @@ in6_status(int s __unused, const struct 
        if (ip6lifetime && (lifetime.ia6t_preferred || lifetime.ia6t_expire)) {
                printf("pltime ");
                if (lifetime.ia6t_preferred) {
-                       printf("%s ", lifetime.ia6t_preferred < t
-                               ? "0" : sec2str(lifetime.ia6t_preferred - t));
+                       printf("%s ", lifetime.ia6t_preferred < now.tv_sec
+                               ? "0" : sec2str(lifetime.ia6t_preferred - 
now.tv_sec));
                } else
                        printf("infty ");
 
                printf("vltime ");
                if (lifetime.ia6t_expire) {
-                       printf("%s ", lifetime.ia6t_expire < t
-                               ? "0" : sec2str(lifetime.ia6t_expire - t));
+                       printf("%s ", lifetime.ia6t_expire < now.tv_sec
+                               ? "0" : sec2str(lifetime.ia6t_expire - 
now.tv_sec));
                } else
                        printf("infty ");
        }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to