drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.c

Source file repositories/reference/linux-study-clean/drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.c

File Facts

System
Linux kernel
Corpus path
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.c
Extension
.c
Size
4192 bytes
Lines
140
Domain
Driver Families
Bucket
drivers/net
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
// Copyright (c) 2021, NVIDIA CORPORATION & AFFILIATES. All rights reserved.

#include "act.h"
#include "en/tc/post_act.h"
#include "en/tc_priv.h"
#include "mlx5_core.h"

static struct mlx5e_tc_act *tc_acts_fdb[NUM_FLOW_ACTIONS] = {
	[FLOW_ACTION_ACCEPT] = &mlx5e_tc_act_accept,
	[FLOW_ACTION_DROP] = &mlx5e_tc_act_drop,
	[FLOW_ACTION_TRAP] = &mlx5e_tc_act_trap,
	[FLOW_ACTION_GOTO] = &mlx5e_tc_act_goto,
	[FLOW_ACTION_REDIRECT] = &mlx5e_tc_act_redirect,
	[FLOW_ACTION_MIRRED] = &mlx5e_tc_act_mirred,
	[FLOW_ACTION_REDIRECT_INGRESS] = &mlx5e_tc_act_redirect_ingress,
	[FLOW_ACTION_VLAN_PUSH] = &mlx5e_tc_act_vlan,
	[FLOW_ACTION_VLAN_POP] = &mlx5e_tc_act_vlan,
	[FLOW_ACTION_VLAN_MANGLE] = &mlx5e_tc_act_vlan_mangle,
	[FLOW_ACTION_TUNNEL_ENCAP] = &mlx5e_tc_act_tun_encap,
	[FLOW_ACTION_TUNNEL_DECAP] = &mlx5e_tc_act_tun_decap,
	[FLOW_ACTION_MANGLE] = &mlx5e_tc_act_pedit,
	[FLOW_ACTION_ADD] = &mlx5e_tc_act_pedit,
	[FLOW_ACTION_CSUM] = &mlx5e_tc_act_csum,
	[FLOW_ACTION_PTYPE] = &mlx5e_tc_act_ptype,
	[FLOW_ACTION_SAMPLE] = &mlx5e_tc_act_sample,
	[FLOW_ACTION_POLICE] = &mlx5e_tc_act_police,
	[FLOW_ACTION_CT] = &mlx5e_tc_act_ct,
	[FLOW_ACTION_MPLS_PUSH] = &mlx5e_tc_act_mpls_push,
	[FLOW_ACTION_MPLS_POP] = &mlx5e_tc_act_mpls_pop,
	[FLOW_ACTION_VLAN_PUSH_ETH] = &mlx5e_tc_act_vlan,
	[FLOW_ACTION_VLAN_POP_ETH] = &mlx5e_tc_act_vlan,
};

static struct mlx5e_tc_act *tc_acts_nic[NUM_FLOW_ACTIONS] = {
	[FLOW_ACTION_ACCEPT] = &mlx5e_tc_act_accept,
	[FLOW_ACTION_DROP] = &mlx5e_tc_act_drop,
	[FLOW_ACTION_GOTO] = &mlx5e_tc_act_goto,
	[FLOW_ACTION_REDIRECT] = &mlx5e_tc_act_mirred_nic,
	[FLOW_ACTION_MANGLE] = &mlx5e_tc_act_pedit,
	[FLOW_ACTION_ADD] = &mlx5e_tc_act_pedit,
	[FLOW_ACTION_CSUM] = &mlx5e_tc_act_csum,
	[FLOW_ACTION_MARK] = &mlx5e_tc_act_mark,
	[FLOW_ACTION_CT] = &mlx5e_tc_act_ct,
};

/**
 * mlx5e_tc_act_get() - Get an action parser for an action id.
 * @act_id: Flow action id.
 * @ns_type: flow namespace type.
 */
struct mlx5e_tc_act *
mlx5e_tc_act_get(enum flow_action_id act_id,
		 enum mlx5_flow_namespace_type ns_type)
{
	struct mlx5e_tc_act **tc_acts;

	tc_acts = ns_type == MLX5_FLOW_NAMESPACE_FDB ? tc_acts_fdb : tc_acts_nic;

	return tc_acts[act_id];
}

/**
 * mlx5e_tc_act_init_parse_state() - Init a new parse_state.
 * @parse_state: Parsing state.
 * @flow:        mlx5e tc flow being handled.
 * @flow_action: flow action to parse.
 * @extack:      to set an error msg.
 *
 * The same parse_state should be passed to action parsers
 * for tracking the current parsing state.
 */
void
mlx5e_tc_act_init_parse_state(struct mlx5e_tc_act_parse_state *parse_state,
			      struct mlx5e_tc_flow *flow,
			      struct flow_action *flow_action,
			      struct netlink_ext_ack *extack)
{
	memset(parse_state, 0, sizeof(*parse_state));
	parse_state->flow = flow;
	parse_state->extack = extack;
	parse_state->flow_action = flow_action;
}

int
mlx5e_tc_act_post_parse(struct mlx5e_tc_act_parse_state *parse_state,
			struct flow_action *flow_action, int from, int to,
			struct mlx5_flow_attr *attr,
			enum mlx5_flow_namespace_type ns_type)
{

Annotation

Implementation Notes