Commit cee7b339 authored by Wentao Jia's avatar Wentao Jia Committed by Jakub Kicinski
Browse files

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: default avatarWentao Jia <wentao.jia@corigine.com>
Acked-by: default avatarSimon Horman <simon.horman@corigine.com>
Signed-off-by: default avatarLouis Peens <louis.peens@corigine.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 8a8db7ae
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -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