All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Julius Bairaktaris <julius@bairaktaris.de>
Cc: netfilter-devel@vger.kernel.org, kadlec@netfilter.org,
	fw@strlen.de, coreteam@netfilter.org, netdev@vger.kernel.org,
	geldot@protonmail.com
Subject: Re: [PATCH nf-next 0/4] netfilter: offload a TCP flow whose reply is never seen
Date: Fri, 11 Sep 2026 13:41:56 +0200	[thread overview]
Message-ID: <aqPpBJvfTwKrxSGG@chamomile> (raw)
In-Reply-To: <20260910090052.2034970-1-julius@bairaktaris.de>

On Thu, Sep 10, 2026 at 11:00:48AM +0200, Julius Bairaktaris wrote:
> A host that forwards one direction of a TCP connection only sees the
> client's SYN and then an ACK continuing from it; the answer took another
> path. That ACK has no entry in the transition table, so it and every
> packet after it are invalid, the conntrack entry stays in SYN_SENT
> [UNREPLIED] with a single packet, and the connection reaches neither the
> stateful part of a ruleset nor a flowtable.

conntrack needs to see packets in both directions, are you assuming a
packet-based load balancer in front of it?

> Patch 1 takes such a connection over as the mid-stream pickup it is.
> Patch 2 withholds the reply direction of a flow offloaded in one
> direction until conntrack has seen a reply, and offloads it once
> conntrack has. Patch 3 offers a connection whose reply was never seen to
> the flowtable in the original direction. Patch 4 adds a selftest arm for
> the path; without patches 1 to 3 it fails, with the router forwarding the
> SYN of the connection and nothing else.
> 
> Verified on an IPQ8074 router with hardware flow offload, iperf3 -P2
> between two hosts on different subnets of one bridge with the reply
> direction bypassing the router:
> 
>                                   CPU port    switch port   throughput
>   asymmetric, without the series   81k pps       81k pps    944-947 Mbit/s
>   asymmetric, with the series      2-11 pps      81k pps    948-949 Mbit/s
>   symmetric, with the series      11-38 pps      81k pps    926-948 Mbit/s
> 
> I wrote this series with the help of an AI coding assistant, as the
> Assisted-by tags record. I have reviewed and tested it myself.
> 
> Gary Dotzler (2):
>   netfilter: conntrack: pick up a TCP flow whose SYN was never answered
>   netfilter: nft_flow_offload: offload a TCP flow that has no reply
> 
> Julius Bairaktaris (2):
>   netfilter: flowtable: promote a flow offloaded in one direction only
>   selftests: netfilter: cover a TCP flow whose reply is never seen
> 
>  include/net/netfilter/nf_conntrack_l4proto.h  |  7 ++
>  net/netfilter/nf_conntrack_proto_tcp.c        | 19 +++++
>  net/netfilter/nf_flow_table_ip.c              | 26 +++++++
>  net/netfilter/nft_flow_offload.c              |  6 +-
>  .../selftests/net/netfilter/nft_flowtable.sh  | 73 +++++++++++++++++++
>  5 files changed, 129 insertions(+), 2 deletions(-)
> 
> -- 
> 2.53.0
> 
> 

  parent reply	other threads:[~2026-09-11 11:42 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-10  9:00 [PATCH nf-next 0/4] netfilter: offload a TCP flow whose reply is never seen Julius Bairaktaris
2026-09-10  9:00 ` [PATCH nf-next 1/4] netfilter: conntrack: pick up a TCP flow whose SYN was never answered Julius Bairaktaris
2026-09-10  9:00 ` [PATCH nf-next 2/4] netfilter: flowtable: promote a flow offloaded in one direction only Julius Bairaktaris
2026-09-10  9:00 ` [PATCH nf-next 3/4] netfilter: nft_flow_offload: offload a TCP flow that has no reply Julius Bairaktaris
2026-09-10  9:00 ` [PATCH nf-next 4/4] selftests: netfilter: cover a TCP flow whose reply is never seen Julius Bairaktaris
2026-09-11 11:41 ` Pablo Neira Ayuso [this message]
2026-09-11 12:10   ` [PATCH nf-next 0/4] netfilter: offload " Julius Bairaktaris
2026-09-11 14:09     ` Pablo Neira Ayuso
2026-09-11 14:16       ` Pablo Neira Ayuso

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aqPpBJvfTwKrxSGG@chamomile \
    --to=pablo@netfilter.org \
    --cc=coreteam@netfilter.org \
    --cc=fw@strlen.de \
    --cc=geldot@protonmail.com \
    --cc=julius@bairaktaris.de \
    --cc=kadlec@netfilter.org \
    --cc=netdev@vger.kernel.org \
    --cc=netfilter-devel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.