lkml.org 
[lkml]   [2021]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.12 022/161] net/sched: act_ct: Offload connections with commit action
    Date
    From: Paul Blakey <paulb@nvidia.com>

    [ Upstream commit 0cc254e5aa37cf05f65bcdcdc0ac5c58010feb33 ]

    Currently established connections are not offloaded if the filter has a
    "ct commit" action. This behavior will not offload connections of the
    following scenario:

    $ tc_filter add dev $DEV ingress protocol ip prio 1 flower \
    ct_state -trk \
    action ct commit action goto chain 1

    $ tc_filter add dev $DEV ingress protocol ip chain 1 prio 1 flower \
    action mirred egress redirect dev $DEV2

    $ tc_filter add dev $DEV2 ingress protocol ip prio 1 flower \
    action ct commit action goto chain 1

    $ tc_filter add dev $DEV2 ingress protocol ip prio 1 chain 1 flower \
    ct_state +trk+est \
    action mirred egress redirect dev $DEV

    Offload established connections, regardless of the commit flag.

    Fixes: 46475bb20f4b ("net/sched: act_ct: Software offload of established flows")
    Reviewed-by: Oz Shlomo <ozsh@nvidia.com>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Signed-off-by: Paul Blakey <paulb@nvidia.com>
    Link: https://lore.kernel.org/r/1622029449-27060-1-git-send-email-paulb@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/sched/act_ct.c | 7 ++++---
    1 file changed, 4 insertions(+), 3 deletions(-)

    diff --git a/net/sched/act_ct.c b/net/sched/act_ct.c
    index 48fdf7293dea..371fd64638d2 100644
    --- a/net/sched/act_ct.c
    +++ b/net/sched/act_ct.c
    @@ -984,7 +984,7 @@ static int tcf_ct_act(struct sk_buff *skb, const struct tc_action *a,
    */
    cached = tcf_ct_skb_nfct_cached(net, skb, p->zone, force);
    if (!cached) {
    - if (!commit && tcf_ct_flow_table_lookup(p, skb, family)) {
    + if (tcf_ct_flow_table_lookup(p, skb, family)) {
    skip_add = true;
    goto do_nat;
    }
    @@ -1024,10 +1024,11 @@ do_nat:
    * even if the connection is already confirmed.
    */
    nf_conntrack_confirm(skb);
    - } else if (!skip_add) {
    - tcf_ct_flow_table_process_conn(p->ct_ft, ct, ctinfo);
    }

    + if (!skip_add)
    + tcf_ct_flow_table_process_conn(p->ct_ft, ct, ctinfo);
    +
    out_push:
    skb_push_rcsum(skb, nh_ofs);

    --
    2.30.2


    \
     
     \ /
      Last update: 2021-06-08 21:14    [W:4.058 / U:0.592 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site