timeval: Use monotonic time where appropriate.
[sliver-openvswitch.git] / ofproto / netflow.c
index b016663..67932f0 100644 (file)
@@ -37,8 +37,6 @@
 
 #define NETFLOW_V5_VERSION 5
 
-static const int ACTIVE_TIMEOUT_DEFAULT = 600;
-
 /* Every NetFlow v5 message contains the header that follows.  This is
  * followed by up to thirty records that describe a terminating flow.
  * We only send a single record per NetFlow message.
@@ -111,7 +109,7 @@ netflow_expire(struct netflow *nf, struct netflow_flow *nf_flow,
 {
     struct netflow_v5_header *nf_hdr;
     struct netflow_v5_record *nf_rec;
-    struct timeval now;
+    struct timespec now;
 
     nf_flow->last_expired += nf->active_timeout;
 
@@ -122,7 +120,7 @@ netflow_expire(struct netflow *nf, struct netflow_flow *nf_flow,
         return;
     }
 
-    time_timeval(&now);
+    time_wall_timespec(&now);
 
     if (!nf->packet.size) {
         nf_hdr = ofpbuf_put_zeros(&nf->packet, sizeof *nf_hdr);
@@ -130,7 +128,7 @@ netflow_expire(struct netflow *nf, struct netflow_flow *nf_flow,
         nf_hdr->count = htons(0);
         nf_hdr->sysuptime = htonl(time_msec() - nf->boot_time);
         nf_hdr->unix_secs = htonl(now.tv_sec);
-        nf_hdr->unix_nsecs = htonl(now.tv_usec * 1000);
+        nf_hdr->unix_nsecs = htonl(now.tv_nsec);
         nf_hdr->flow_seq = htonl(nf->netflow_cnt++);
         nf_hdr->engine_type = nf->engine_type;
         nf_hdr->engine_id = nf->engine_id;
@@ -210,10 +208,10 @@ netflow_set_options(struct netflow *nf,
     collectors_create(&nf_options->collectors, 0, &nf->collectors);
 
     old_timeout = nf->active_timeout;
-    if (nf_options->active_timeout > 0) {
+    if (nf_options->active_timeout >= 0) {
         nf->active_timeout = nf_options->active_timeout;
     } else {
-        nf->active_timeout = ACTIVE_TIMEOUT_DEFAULT;
+        nf->active_timeout = NF_ACTIVE_TIMEOUT_DEFAULT;
     }
     nf->active_timeout *= 1000;
     if (old_timeout != nf->active_timeout) {