From: Jarno Rajahalme Date: Wed, 19 Mar 2014 23:23:28 +0000 (-0700) Subject: dpif-netdev: Use packet key to parse TCP flags. X-Git-Tag: v2.1.1~23 X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=commitdiff_plain;h=9b2e03b9ff89393d326ec45d64e4ddb73e611330 dpif-netdev: Use packet key to parse TCP flags. The flow that created the netdev_flow might have wildcarded TCP flags, or it may not be a TCP flow at all. Fix this by using the freshly extracted flow key to parse TCP flags. Signed-off-by: Jarno Rajahalme Signed-off-by: Ben Pfaff --- diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index d32b1bdf1..df89fabdb 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -1249,12 +1249,13 @@ dpif_netdev_recv_purge(struct dpif *dpif) static void dp_netdev_flow_used(struct dp_netdev_flow *netdev_flow, - const struct ofpbuf *packet) + const struct ofpbuf *packet, + const struct flow *key) { netdev_flow->used = time_msec(); netdev_flow->packet_count++; netdev_flow->byte_count += packet->size; - netdev_flow->tcp_flags |= packet_get_tcp_flags(packet, &netdev_flow->flow); + netdev_flow->tcp_flags |= packet_get_tcp_flags(packet, key); } static void @@ -1272,7 +1273,7 @@ dp_netdev_port_input(struct dp_netdev *dp, struct dp_netdev_port *port, flow_extract(packet, 0, 0, NULL, &in_port_, &key); netdev_flow = dp_netdev_lookup_flow(dp, &key); if (netdev_flow) { - dp_netdev_flow_used(netdev_flow, packet); + dp_netdev_flow_used(netdev_flow, packet, &key); dp_netdev_execute_actions(dp, &key, packet, netdev_flow->actions, netdev_flow->actions_len);