datapath: Fix checksum calculation when modifying ICMPv6 packets.
[cascardo/ovs.git] / ofproto / netflow.c
index 8259ced..c7af010 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009, 2010, 2011, 2013 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2013, 2014 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -110,7 +110,7 @@ gen_netflow_rec(struct netflow *nf, struct netflow_flow *nf_flow,
     struct netflow_v5_header *nf_hdr;
     struct netflow_v5_record *nf_rec;
 
-    if (!nf->packet.size) {
+    if (!ofpbuf_size(&nf->packet)) {
         struct timespec now;
 
         time_wall_timespec(&now);
@@ -127,7 +127,7 @@ gen_netflow_rec(struct netflow *nf, struct netflow_flow *nf_flow,
         nf_hdr->sampling_interval = htons(0);
     }
 
-    nf_hdr = nf->packet.data;
+    nf_hdr = ofpbuf_data(&nf->packet);
     nf_hdr->count = htons(ntohs(nf_hdr->count) + 1);
 
     nf_rec = ofpbuf_put_zeros(&nf->packet, sizeof *nf_rec);
@@ -170,7 +170,7 @@ gen_netflow_rec(struct netflow *nf, struct netflow_flow *nf_flow,
 }
 
 void
-netflow_flow_update(struct netflow *nf, struct flow *flow,
+netflow_flow_update(struct netflow *nf, const struct flow *flow,
                     ofp_port_t output_iface,
                     const struct dpif_flow_stats *stats)
     OVS_EXCLUDED(mutex)
@@ -270,25 +270,11 @@ netflow_expire__(struct netflow *nf, struct netflow_flow *nf_flow)
     }
 
     /* Update flow tracking data. */
-    nf_flow->created = 0;
     nf_flow->packet_count = 0;
     nf_flow->byte_count = 0;
     nf_flow->tcp_flags = 0;
 }
 
-void
-netflow_expire(struct netflow *nf, struct flow *flow) OVS_EXCLUDED(mutex)
-{
-    struct netflow_flow *nf_flow;
-
-    ovs_mutex_lock(&mutex);
-    nf_flow = netflow_flow_lookup(nf, flow);
-    if (nf_flow) {
-        netflow_expire__(nf, nf_flow);
-    }
-    ovs_mutex_unlock(&mutex);
-}
-
 void
 netflow_flow_clear(struct netflow *nf, struct flow *flow) OVS_EXCLUDED(mutex)
 {
@@ -297,8 +283,7 @@ netflow_flow_clear(struct netflow *nf, struct flow *flow) OVS_EXCLUDED(mutex)
     ovs_mutex_lock(&mutex);
     nf_flow = netflow_flow_lookup(nf, flow);
     if (nf_flow) {
-        ovs_assert(!nf_flow->packet_count);
-        ovs_assert(!nf_flow->byte_count);
+        netflow_expire__(nf, nf_flow);
         hmap_remove(&nf->flows, &nf_flow->hmap_node);
         free(nf_flow);
     }
@@ -313,9 +298,9 @@ netflow_run__(struct netflow *nf) OVS_REQUIRES(mutex)
     long long int now = time_msec();
     struct netflow_flow *nf_flow, *next;
 
-    if (nf->packet.size) {
-        collectors_send(nf->collectors, nf->packet.data, nf->packet.size);
-        nf->packet.size = 0;
+    if (ofpbuf_size(&nf->packet)) {
+        collectors_send(nf->collectors, ofpbuf_data(&nf->packet), ofpbuf_size(&nf->packet));
+        ofpbuf_set_size(&nf->packet, 0);
     }
 
     if (!nf->active_timeout || now < nf->next_timeout) {
@@ -354,7 +339,7 @@ netflow_wait(struct netflow *nf) OVS_EXCLUDED(mutex)
     if (nf->active_timeout) {
         poll_timer_wait_until(nf->next_timeout);
     }
-    if (nf->packet.size) {
+    if (ofpbuf_size(&nf->packet)) {
         poll_immediate_wake();
     }
     ovs_mutex_unlock(&mutex);
@@ -430,7 +415,6 @@ netflow_unref(struct netflow *nf)
         atomic_sub(&netflow_count, 1, &orig);
         collectors_destroy(nf->collectors);
         ofpbuf_uninit(&nf->packet);
-        ovs_refcount_destroy(&nf->ref_cnt);
         free(nf);
     }
 }