[ovs-dev] [layering 3/3] flow: Move flow_extract_stats() to dpif.c, as dpif_flow_stats_extract().

Ben Pfaff blp at nicira.com
Thu Sep 29 22:40:23 UTC 2011


The "flow" module is concerned only with OpenFlow flows these days.  It
shouldn't have anything to do with ODP or dpifs.  However, it included
dpif.h just to implement flow_extract_stats().  This function is a better
fit for dpif.c, so this commit moves it there and removes the dpif.h
#include from flow.h and flow.c

This commit also removes a few more dpif.h #includes that weren't needed.
---
 lib/dpif.c             |   20 ++++++++++++++++++++
 lib/dpif.h             |    3 +++
 lib/flow.c             |   21 ---------------------
 lib/flow.h             |    2 --
 ofproto/in-band.c      |    1 -
 ofproto/ofproto-dpif.c |    2 +-
 6 files changed, 24 insertions(+), 25 deletions(-)

diff --git a/lib/dpif.c b/lib/dpif.c
index 2d21a9f..82b6018 100644
--- a/lib/dpif.c
+++ b/lib/dpif.c
@@ -661,6 +661,26 @@ dpif_port_poll_wait(const struct dpif *dpif)
     dpif->dpif_class->port_poll_wait(dpif);
 }
 
+/* Extracts the flow stats for a packet.  The 'flow' and 'packet'
+ * arguments must have been initialized through a call to flow_extract().
+ */
+void
+dpif_flow_stats_extract(const struct flow *flow, struct ofpbuf *packet,
+                        struct dpif_flow_stats *stats)
+{
+    memset(stats, 0, sizeof(*stats));
+
+    if ((flow->dl_type == htons(ETH_TYPE_IP)) && packet->l4) {
+        if ((flow->nw_proto == IPPROTO_TCP) && packet->l7) {
+            struct tcp_header *tcp = packet->l4;
+            stats->tcp_flags = TCP_FLAGS(tcp->tcp_ctl);
+        }
+    }
+
+    stats->n_bytes = packet->size;
+    stats->n_packets = 1;
+}
+
 /* Appends a human-readable representation of 'stats' to 's'. */
 void
 dpif_flow_stats_format(const struct dpif_flow_stats *stats, struct ds *s)
diff --git a/lib/dpif.h b/lib/dpif.h
index b572d0f..f833219 100644
--- a/lib/dpif.h
+++ b/lib/dpif.h
@@ -32,6 +32,7 @@ extern "C" {
 
 struct dpif;
 struct ds;
+struct flow;
 struct nlattr;
 struct ofpbuf;
 struct sset;
@@ -115,6 +116,8 @@ struct dpif_flow_stats {
     uint8_t tcp_flags;
 };
 
+void dpif_flow_stats_extract(const struct flow *, struct ofpbuf *packet,
+                             struct dpif_flow_stats *);
 void dpif_flow_stats_format(const struct dpif_flow_stats *, struct ds *);
 
 enum dpif_flow_put_flags {
diff --git a/lib/flow.c b/lib/flow.c
index b0131f0..2d62a12 100644
--- a/lib/flow.c
+++ b/lib/flow.c
@@ -26,7 +26,6 @@
 #include <string.h>
 #include "byte-order.h"
 #include "coverage.h"
-#include "dpif.h"
 #include "dynamic-string.h"
 #include "hash.h"
 #include "ofpbuf.h"
@@ -424,26 +423,6 @@ flow_extract(struct ofpbuf *packet, ovs_be64 tun_id, uint16_t ofp_in_port,
     return retval;
 }
 
-/* Extracts the flow stats for a packet.  The 'flow' and 'packet'
- * arguments must have been initialized through a call to flow_extract().
- */
-void
-flow_extract_stats(const struct flow *flow, struct ofpbuf *packet,
-                   struct dpif_flow_stats *stats)
-{
-    memset(stats, 0, sizeof(*stats));
-
-    if ((flow->dl_type == htons(ETH_TYPE_IP)) && packet->l4) {
-        if ((flow->nw_proto == IPPROTO_TCP) && packet->l7) {
-            struct tcp_header *tcp = packet->l4;
-            stats->tcp_flags = TCP_FLAGS(tcp->tcp_ctl);
-        }
-    }
-
-    stats->n_bytes = packet->size;
-    stats->n_packets = 1;
-}
-
 /* For every bit of a field that is wildcarded in 'wildcards', sets the
  * corresponding bit in 'flow' to zero. */
 void
diff --git a/lib/flow.h b/lib/flow.h
index a593516..3f807c5 100644
--- a/lib/flow.h
+++ b/lib/flow.h
@@ -79,8 +79,6 @@ BUILD_ASSERT_DECL(FLOW_SIG_SIZE == 116 && FLOW_WC_SEQ == 1);
 
 int flow_extract(struct ofpbuf *, ovs_be64 tun_id, uint16_t in_port,
                  struct flow *);
-void flow_extract_stats(const struct flow *flow, struct ofpbuf *packet,
-                        struct dpif_flow_stats *);
 void flow_zero_wildcards(struct flow *, const struct flow_wildcards *);
 
 char *flow_to_string(const struct flow *);
diff --git a/ofproto/in-band.c b/ofproto/in-band.c
index ec60e2e..97c29ba 100644
--- a/ofproto/in-band.c
+++ b/ofproto/in-band.c
@@ -25,7 +25,6 @@
 #include <stdlib.h>
 #include "classifier.h"
 #include "dhcp.h"
-#include "dpif.h"
 #include "flow.h"
 #include "netdev.h"
 #include "netlink.h"
diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index cb22e73..807359b 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -2258,7 +2258,7 @@ facet_execute(struct ofproto_dpif *ofproto, struct facet *facet,
 
     assert(ofpbuf_headroom(packet) >= sizeof(struct ofp_packet_in));
 
-    flow_extract_stats(&facet->flow, packet, &stats);
+    dpif_flow_stats_extract(&facet->flow, packet, &stats);
     stats.used = time_msec();
     if (execute_odp_actions(ofproto, &facet->flow,
                             facet->actions, facet->actions_len, packet)) {
-- 
1.7.4.4




More information about the dev mailing list