From f16654b1ec8bb59bb3cb764a3a56dc6c476d0f1f Mon Sep 17 00:00:00 2001 From: Jarno Rajahalme Date: Wed, 19 Mar 2014 16:35:04 -0700 Subject: [PATCH] dpif-netdev: Use packet key to parse TCP flags. The flow that created the dp_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 --- lib/dpif-netdev.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 46eb743aa..d1077c314 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -1124,12 +1124,13 @@ dpif_netdev_recv_purge(struct dpif *dpif) } static void -dp_netdev_flow_used(struct dp_netdev_flow *flow, const struct ofpbuf *packet) +dp_netdev_flow_used(struct dp_netdev_flow *flow, const struct ofpbuf *packet, + const struct flow *key) { flow->used = time_msec(); flow->packet_count++; flow->byte_count += packet->size; - flow->tcp_flags |= packet_get_tcp_flags(packet, &flow->key); + flow->tcp_flags |= packet_get_tcp_flags(packet, key); } static void @@ -1148,7 +1149,7 @@ dp_netdev_port_input(struct dp_netdev *dp, struct dp_netdev_port *port, flow_extract(packet, skb_priority, pkt_mark, tnl, &in_port_, &key); flow = dp_netdev_lookup_flow(dp, &key); if (flow) { - dp_netdev_flow_used(flow, packet); + dp_netdev_flow_used(flow, packet, &key); dp_netdev_execute_actions(dp, packet, &key, flow->actions, flow->actions_len); dp->n_hit++; -- 2.20.1