diff options
author | Vlad Buslov <vladbu@nvidia.com> | 2023-02-01 17:30:58 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2023-02-03 09:31:24 +0000 |
commit | d5774cb6c55c8721c2daf57cc5e5345e3af286ea (patch) | |
tree | 0cd0643ee3fea90f1f027befb70cf6b14b5a4758 /net/sched/act_ct.c | |
parent | 1a441a9b8be8849957a01413a144f84932c324cb (diff) |
net/sched: act_ct: set ctinfo in meta action depending on ct state
Currently tcf_ct_flow_table_fill_actions() function assumes that only
established connections can be offloaded and always sets ctinfo to either
IP_CT_ESTABLISHED or IP_CT_ESTABLISHED_REPLY strictly based on direction
without checking actual connection state. To enable UDP NEW connection
offload set the ctinfo, metadata cookie and NF_FLOW_HW_ESTABLISHED
flow_offload flags bit based on ct->status value.
Signed-off-by: Vlad Buslov <vladbu@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/act_ct.c')
-rw-r--r-- | net/sched/act_ct.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/sched/act_ct.c b/net/sched/act_ct.c index b9d3e338f72d..2cee3f9f83de 100644 --- a/net/sched/act_ct.c +++ b/net/sched/act_ct.c @@ -249,8 +249,10 @@ static int tcf_ct_flow_table_fill_actions(struct net *net, switch (tdir) { case FLOW_OFFLOAD_DIR_ORIGINAL: dir = IP_CT_DIR_ORIGINAL; - ctinfo = IP_CT_ESTABLISHED; - set_bit(NF_FLOW_HW_ESTABLISHED, &flow->flags); + ctinfo = test_bit(IPS_SEEN_REPLY_BIT, &ct->status) ? + IP_CT_ESTABLISHED : IP_CT_NEW; + if (ctinfo == IP_CT_ESTABLISHED) + set_bit(NF_FLOW_HW_ESTABLISHED, &flow->flags); break; case FLOW_OFFLOAD_DIR_REPLY: dir = IP_CT_DIR_REPLY; |