openvswitch: Use inverted tuple in ovs_ct_find_existing() if NATted.
authorJarno Rajahalme <jarno@ovn.org>
Thu, 9 Feb 2017 19:21:53 +0000 (11:21 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 10 Feb 2017 03:59:34 +0000 (22:59 -0500)
commit9ff464db50e437eef131f719cc2e9902eea9c607
treeae2f2d9dc0053de452287bc0b0f00433efb59ebe
parent5e17da634a21b1200853fe82ba67d6571f2beabe
openvswitch: Use inverted tuple in ovs_ct_find_existing() if NATted.

The conntrack lookup for existing connections fails to invert the
packet 5-tuple for NATted packets, and therefore fails to find the
existing conntrack entry.  Conntrack only stores 5-tuples for incoming
packets, and there are various situations where a lookup on a packet
that has already been transformed by NAT needs to be made.  Looking up
an existing conntrack entry upon executing packet received from the
userspace is one of them.

This patch fixes ovs_ct_find_existing() to invert the packet 5-tuple
for the conntrack lookup whenever the packet has already been
transformed by conntrack from its input form as evidenced by one of
the NAT flags being set in the conntrack state metadata.

Fixes: 05752523e565 ("openvswitch: Interface with NAT.")
Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/openvswitch/conntrack.c