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)
struct dpif;
struct ds;
+struct flow;
struct nlattr;
struct ofpbuf;
struct sset;
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 {
#include <string.h>
#include "byte-order.h"
#include "coverage.h"
-#include "dpif.h"
#include "dynamic-string.h"
#include "hash.h"
#include "ofpbuf.h"
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
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 *);
#include <stdlib.h>
#include "classifier.h"
#include "dhcp.h"
-#include "dpif.h"
#include "flow.h"
#include "netdev.h"
#include "netlink.h"
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)) {