1 #ifndef __LINUX_TC_PED_H
2 #define __LINUX_TC_PED_H
3 
4 #include <linux/types.h>
5 #include <linux/pkt_cls.h>
6 
7 #define TCA_ACT_PEDIT 7
8 
9 enum {
10 	TCA_PEDIT_UNSPEC,
11 	TCA_PEDIT_TM,
12 	TCA_PEDIT_PARMS,
13 	TCA_PEDIT_PAD,
14 	TCA_PEDIT_PARMS_EX,
15 	TCA_PEDIT_KEYS_EX,
16 	TCA_PEDIT_KEY_EX,
17 	__TCA_PEDIT_MAX
18 };
19 #define TCA_PEDIT_MAX (__TCA_PEDIT_MAX - 1)
20 
21 enum {
22 	TCA_PEDIT_KEY_EX_HTYPE = 1,
23 	TCA_PEDIT_KEY_EX_CMD = 2,
24 	__TCA_PEDIT_KEY_EX_MAX
25 };
26 #define TCA_PEDIT_KEY_EX_MAX (__TCA_PEDIT_KEY_EX_MAX - 1)
27 
28  /* TCA_PEDIT_KEY_EX_HDR_TYPE_NETWROK is a special case for legacy users. It
29   * means no specific header type - offset is relative to the network layer
30   */
31 enum pedit_header_type {
32 	TCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,
33 	TCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,
34 	TCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,
35 	TCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,
36 	TCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,
37 	TCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,
38 	__PEDIT_HDR_TYPE_MAX,
39 };
40 #define TCA_PEDIT_HDR_TYPE_MAX (__PEDIT_HDR_TYPE_MAX - 1)
41 
42 enum pedit_cmd {
43 	TCA_PEDIT_KEY_EX_CMD_SET = 0,
44 	TCA_PEDIT_KEY_EX_CMD_ADD = 1,
45 	__PEDIT_CMD_MAX,
46 };
47 #define TCA_PEDIT_CMD_MAX (__PEDIT_CMD_MAX - 1)
48 
49 struct tc_pedit_key {
50 	__u32           mask;  /* AND */
51 	__u32           val;   /*XOR */
52 	__u32           off;  /*offset */
53 	__u32           at;
54 	__u32           offmask;
55 	__u32           shift;
56 };
57 
58 struct tc_pedit_sel {
59 	tc_gen;
60 	unsigned char           nkeys;
61 	unsigned char           flags;
62 	struct tc_pedit_key     keys[0];
63 };
64 #define tc_pedit tc_pedit_sel
65 
66 #endif
67