From: Jarno Rajahalme Date: Wed, 19 Mar 2014 23:13:32 +0000 (-0700) Subject: dpif-netdev: Use packet key to parse TCP flags. X-Git-Tag: sliver-openvswitch-2.2.90-1~6^2~73 X-Git-Url: http://git.onelab.eu/?p=sliver-openvswitch.git;a=commitdiff_plain;h=855dd13c9a459c3dac41043c4d5bb7ecc7eaba72 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 d6bf59d58..9305b3620 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -1710,9 +1710,10 @@ dp_netdev_flow_stats_new_cb(void) static void dp_netdev_flow_used(struct dp_netdev_flow *netdev_flow, - const struct ofpbuf *packet) + const struct ofpbuf *packet, + const struct flow *key) { - uint16_t tcp_flags = packet_get_tcp_flags(packet, &netdev_flow->flow); + uint16_t tcp_flags = packet_get_tcp_flags(packet, key); long long int now = time_msec(); struct dp_netdev_flow_stats *bucket; @@ -1762,7 +1763,7 @@ dp_netdev_port_input(struct dp_netdev *dp, struct ofpbuf *packet, if (netdev_flow) { struct dp_netdev_actions *actions; - dp_netdev_flow_used(netdev_flow, packet); + dp_netdev_flow_used(netdev_flow, packet, &key); actions = dp_netdev_flow_get_actions(netdev_flow); dp_netdev_execute_actions(dp, &key, packet, md,