openvswitch: Handle NF_REPEAT in conntrack action.
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>
This commit is contained in:
parent
289f225349
commit
5b6b929376
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue