Skip to content

Commit

Permalink
flow: Move flow_extract_stats() to dpif.c, as dpif_flow_stats_extract().
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
blp committed Sep 30, 2011
1 parent a946b63 commit 572b706
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 25 deletions.
20 changes: 20 additions & 0 deletions lib/dpif.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 3 additions & 0 deletions lib/dpif.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ extern "C" {

struct dpif;
struct ds;
struct flow;
struct nlattr;
struct ofpbuf;
struct sset;
Expand Down Expand Up @@ -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 {
Expand Down
21 changes: 0 additions & 21 deletions lib/flow.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down
2 changes: 0 additions & 2 deletions lib/flow.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 *);
Expand Down
1 change: 0 additions & 1 deletion ofproto/in-band.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion ofproto/ofproto-dpif.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
Expand Down

0 comments on commit 572b706

Please sign in to comment.