Skip to content

Commit

Permalink
openvswitch: Handle NF_REPEAT in conntrack action.
Browse files Browse the repository at this point in the history
Repeat the nf_conntrack_in() call when it returns NF_REPEAT.  This
avoids dropping a SYN packet re-opening an existing TCP connection.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
  • Loading branch information
Jarno Rajahalme authored and Pablo Neira Ayuso committed Mar 14, 2016
1 parent 289f225 commit 5b6b929
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions net/openvswitch/conntrack.c
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,7 @@ static int __ovs_ct_lookup(struct net *net, struct sw_flow_key *key,
*/
if (!skb_nfct_cached(net, key, info, skb)) {
struct nf_conn *tmpl = info->ct;
int err;

/* Associate skb with specified zone. */
if (tmpl) {
Expand All @@ -495,8 +496,13 @@ static int __ovs_ct_lookup(struct net *net, struct sw_flow_key *key,
skb->nfctinfo = IP_CT_NEW;
}

if (nf_conntrack_in(net, info->family, NF_INET_PRE_ROUTING,
skb) != NF_ACCEPT)
/* Repeat if requested, see nf_iterate(). */
do {
err = nf_conntrack_in(net, info->family,
NF_INET_PRE_ROUTING, skb);
} while (err == NF_REPEAT);

if (err != NF_ACCEPT)
return -ENOENT;

ovs_ct_update_key(skb, info, key, true);
Expand Down

0 comments on commit 5b6b929

Please sign in to comment.