mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-29 01:09:33 -04:00
nfp: flower: refactor function "is_pre_ct_flow"
In the scenario of multiple ct zones, ct state key match and ct action is present in one flow rule, the flow rule is classified to post_ct_flow in design. There is no ct state key match for pre ct flow, the judging condition is added to function "is_pre_ct_flow". Chain_index is another field for judging which flows are pre ct flow If chain_index not 0, the flow is not pre ct flow. Signed-off-by: Wentao Jia <wentao.jia@corigine.com> Acked-by: Simon Horman <simon.horman@corigine.com> Signed-off-by: Louis Peens <louis.peens@corigine.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
8a8db7aeaa
commit
cee7b339d8
@@ -55,9 +55,21 @@ static void *get_hashentry(struct rhashtable *ht, void *key,
|
||||
|
||||
bool is_pre_ct_flow(struct flow_cls_offload *flow)
|
||||
{
|
||||
struct flow_rule *rule = flow_cls_offload_flow_rule(flow);
|
||||
struct flow_dissector *dissector = rule->match.dissector;
|
||||
struct flow_action_entry *act;
|
||||
struct flow_match_ct ct;
|
||||
int i;
|
||||
|
||||
if (dissector->used_keys & BIT(FLOW_DISSECTOR_KEY_CT)) {
|
||||
flow_rule_match_ct(rule, &ct);
|
||||
if (ct.key->ct_state)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (flow->common.chain_index)
|
||||
return false;
|
||||
|
||||
flow_action_for_each(i, act, &flow->rule->action) {
|
||||
if (act->id == FLOW_ACTION_CT) {
|
||||
/* The pre_ct rule only have the ct or ct nat action, cannot
|
||||
|
||||
Reference in New Issue
Block a user