X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fdpif.c;h=febe8b0223cbe484459720e5a8157b3fb5239736;hb=541bc79f73add327072470c9bc3febb4195cdb3c;hp=d8134698ae7f79363b7aa25e9fcd3cf9c674ca8f;hpb=89625d1efb32461071837b5e81c1238b4ca63387;p=openvswitch diff --git a/lib/dpif.c b/lib/dpif.c index d8134698..febe8b02 100644 --- a/lib/dpif.c +++ b/lib/dpif.c @@ -675,18 +675,11 @@ dpif_port_poll_wait(const struct dpif *dpif) * 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; } @@ -992,6 +985,20 @@ dpif_operate(struct dpif *dpif, struct dpif_op **ops, size_t n_ops) 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; }