1// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
2/* Copyright (c) 2019 Mellanox Technologies. */
3
4#define CREATE_TRACE_POINTS
5#include "en_tc_tracepoint.h"
6
7void put_ids_to_array(int *ids,
8		      const struct flow_action_entry *entries,
9		      unsigned int num)
10{
11	unsigned int i;
12
13	for (i = 0; i < num; i++)
14		ids[i] = entries[i].id;
15}
16
17#define NAME_SIZE 16
18
19static const char FLOWACT2STR[NUM_FLOW_ACTIONS][NAME_SIZE] = {
20	[FLOW_ACTION_ACCEPT]	= "ACCEPT",
21	[FLOW_ACTION_DROP]	= "DROP",
22	[FLOW_ACTION_TRAP]	= "TRAP",
23	[FLOW_ACTION_GOTO]	= "GOTO",
24	[FLOW_ACTION_REDIRECT]	= "REDIRECT",
25	[FLOW_ACTION_MIRRED]	= "MIRRED",
26	[FLOW_ACTION_VLAN_PUSH]	= "VLAN_PUSH",
27	[FLOW_ACTION_VLAN_POP]	= "VLAN_POP",
28	[FLOW_ACTION_VLAN_MANGLE]	= "VLAN_MANGLE",
29	[FLOW_ACTION_TUNNEL_ENCAP]	= "TUNNEL_ENCAP",
30	[FLOW_ACTION_TUNNEL_DECAP]	= "TUNNEL_DECAP",
31	[FLOW_ACTION_MANGLE]	= "MANGLE",
32	[FLOW_ACTION_ADD]	= "ADD",
33	[FLOW_ACTION_CSUM]	= "CSUM",
34	[FLOW_ACTION_MARK]	= "MARK",
35	[FLOW_ACTION_WAKE]	= "WAKE",
36	[FLOW_ACTION_QUEUE]	= "QUEUE",
37	[FLOW_ACTION_SAMPLE]	= "SAMPLE",
38	[FLOW_ACTION_POLICE]	= "POLICE",
39	[FLOW_ACTION_CT]	= "CT",
40};
41
42const char *parse_action(struct trace_seq *p,
43			 int *ids,
44			 unsigned int num)
45{
46	const char *ret = trace_seq_buffer_ptr(p);
47	unsigned int i;
48
49	for (i = 0; i < num; i++) {
50		if (ids[i] < NUM_FLOW_ACTIONS)
51			trace_seq_printf(p, "%s ", FLOWACT2STR[ids[i]]);
52		else
53			trace_seq_printf(p, "UNKNOWN ");
54	}
55
56	trace_seq_putc(p, 0);
57	return ret;
58}
59