* arguments must have been initialized through a call to flow_extract().
*/
void
-dpif_flow_stats_extract(const struct flow *flow, struct ofpbuf *packet,
+dpif_flow_stats_extract(const struct flow *flow, const 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->tcp_flags = packet_get_tcp_flags(packet, flow);
stats->n_bytes = packet->size;
stats->n_packets = 1;
}
if (dpif->dpif_class->operate) {
dpif->dpif_class->operate(dpif, ops, n_ops);
+
+ for (i = 0; i < n_ops; i++) {
+ struct dpif_op *op = ops[i];
+
+ switch (op->type) {
+ case DPIF_OP_FLOW_PUT:
+ log_flow_put_message(dpif, &op->u.flow_put, op->error);
+ break;
+
+ case DPIF_OP_EXECUTE:
+ log_execute_message(dpif, &op->u.execute, op->error);
+ break;
+ }
+ }
return;
}