logo

oasis-root

Compiled tree of Oasis Linux based on own branch at <https://hacktivis.me/git/oasis/> git clone https://anongit.hacktivis.me/git/oasis-root.git

pkt_cls.h (19462B)


  1. /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
  2. #ifndef __LINUX_PKT_CLS_H
  3. #define __LINUX_PKT_CLS_H
  4. #include <linux/types.h>
  5. #include <linux/pkt_sched.h>
  6. #define TC_COOKIE_MAX_SIZE 16
  7. /* Action attributes */
  8. enum {
  9. TCA_ACT_UNSPEC,
  10. TCA_ACT_KIND,
  11. TCA_ACT_OPTIONS,
  12. TCA_ACT_INDEX,
  13. TCA_ACT_STATS,
  14. TCA_ACT_PAD,
  15. TCA_ACT_COOKIE,
  16. TCA_ACT_FLAGS,
  17. TCA_ACT_HW_STATS,
  18. TCA_ACT_USED_HW_STATS,
  19. TCA_ACT_IN_HW_COUNT,
  20. __TCA_ACT_MAX
  21. };
  22. /* See other TCA_ACT_FLAGS_ * flags in include/net/act_api.h. */
  23. #define TCA_ACT_FLAGS_NO_PERCPU_STATS (1 << 0) /* Don't use percpu allocator for
  24. * actions stats.
  25. */
  26. #define TCA_ACT_FLAGS_SKIP_HW (1 << 1) /* don't offload action to HW */
  27. #define TCA_ACT_FLAGS_SKIP_SW (1 << 2) /* don't use action in SW */
  28. /* tca HW stats type
  29. * When user does not pass the attribute, he does not care.
  30. * It is the same as if he would pass the attribute with
  31. * all supported bits set.
  32. * In case no bits are set, user is not interested in getting any HW statistics.
  33. */
  34. #define TCA_ACT_HW_STATS_IMMEDIATE (1 << 0) /* Means that in dump, user
  35. * gets the current HW stats
  36. * state from the device
  37. * queried at the dump time.
  38. */
  39. #define TCA_ACT_HW_STATS_DELAYED (1 << 1) /* Means that in dump, user gets
  40. * HW stats that might be out of date
  41. * for some time, maybe couple of
  42. * seconds. This is the case when
  43. * driver polls stats updates
  44. * periodically or when it gets async
  45. * stats update from the device.
  46. */
  47. #define TCA_ACT_MAX __TCA_ACT_MAX
  48. #define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
  49. #define TCA_ACT_MAX_PRIO 32
  50. #define TCA_ACT_BIND 1
  51. #define TCA_ACT_NOBIND 0
  52. #define TCA_ACT_UNBIND 1
  53. #define TCA_ACT_NOUNBIND 0
  54. #define TCA_ACT_REPLACE 1
  55. #define TCA_ACT_NOREPLACE 0
  56. #define TC_ACT_UNSPEC (-1)
  57. #define TC_ACT_OK 0
  58. #define TC_ACT_RECLASSIFY 1
  59. #define TC_ACT_SHOT 2
  60. #define TC_ACT_PIPE 3
  61. #define TC_ACT_STOLEN 4
  62. #define TC_ACT_QUEUED 5
  63. #define TC_ACT_REPEAT 6
  64. #define TC_ACT_REDIRECT 7
  65. #define TC_ACT_TRAP 8 /* For hw path, this means "trap to cpu"
  66. * and don't further process the frame
  67. * in hardware. For sw path, this is
  68. * equivalent of TC_ACT_STOLEN - drop
  69. * the skb and act like everything
  70. * is alright.
  71. */
  72. #define TC_ACT_VALUE_MAX TC_ACT_TRAP
  73. /* There is a special kind of actions called "extended actions",
  74. * which need a value parameter. These have a local opcode located in
  75. * the highest nibble, starting from 1. The rest of the bits
  76. * are used to carry the value. These two parts together make
  77. * a combined opcode.
  78. */
  79. #define __TC_ACT_EXT_SHIFT 28
  80. #define __TC_ACT_EXT(local) ((local) << __TC_ACT_EXT_SHIFT)
  81. #define TC_ACT_EXT_VAL_MASK ((1 << __TC_ACT_EXT_SHIFT) - 1)
  82. #define TC_ACT_EXT_OPCODE(combined) ((combined) & (~TC_ACT_EXT_VAL_MASK))
  83. #define TC_ACT_EXT_CMP(combined, opcode) (TC_ACT_EXT_OPCODE(combined) == opcode)
  84. #define TC_ACT_JUMP __TC_ACT_EXT(1)
  85. #define TC_ACT_GOTO_CHAIN __TC_ACT_EXT(2)
  86. #define TC_ACT_EXT_OPCODE_MAX TC_ACT_GOTO_CHAIN
  87. /* These macros are put here for binary compatibility with userspace apps that
  88. * make use of them. For kernel code and new userspace apps, use the TCA_ID_*
  89. * versions.
  90. */
  91. #define TCA_ACT_GACT 5
  92. #define TCA_ACT_IPT 6 /* obsoleted, can be reused */
  93. #define TCA_ACT_PEDIT 7
  94. #define TCA_ACT_MIRRED 8
  95. #define TCA_ACT_NAT 9
  96. #define TCA_ACT_XT 10
  97. #define TCA_ACT_SKBEDIT 11
  98. #define TCA_ACT_VLAN 12
  99. #define TCA_ACT_BPF 13
  100. #define TCA_ACT_CONNMARK 14
  101. #define TCA_ACT_SKBMOD 15
  102. #define TCA_ACT_CSUM 16
  103. #define TCA_ACT_TUNNEL_KEY 17
  104. #define TCA_ACT_SIMP 22
  105. #define TCA_ACT_IFE 25
  106. #define TCA_ACT_SAMPLE 26
  107. /* Action type identifiers*/
  108. enum tca_id {
  109. TCA_ID_UNSPEC = 0,
  110. TCA_ID_POLICE = 1,
  111. TCA_ID_GACT = TCA_ACT_GACT,
  112. TCA_ID_IPT = TCA_ACT_IPT, /* Obsoleted, can be reused */
  113. TCA_ID_PEDIT = TCA_ACT_PEDIT,
  114. TCA_ID_MIRRED = TCA_ACT_MIRRED,
  115. TCA_ID_NAT = TCA_ACT_NAT,
  116. TCA_ID_XT = TCA_ACT_XT,
  117. TCA_ID_SKBEDIT = TCA_ACT_SKBEDIT,
  118. TCA_ID_VLAN = TCA_ACT_VLAN,
  119. TCA_ID_BPF = TCA_ACT_BPF,
  120. TCA_ID_CONNMARK = TCA_ACT_CONNMARK,
  121. TCA_ID_SKBMOD = TCA_ACT_SKBMOD,
  122. TCA_ID_CSUM = TCA_ACT_CSUM,
  123. TCA_ID_TUNNEL_KEY = TCA_ACT_TUNNEL_KEY,
  124. TCA_ID_SIMP = TCA_ACT_SIMP,
  125. TCA_ID_IFE = TCA_ACT_IFE,
  126. TCA_ID_SAMPLE = TCA_ACT_SAMPLE,
  127. TCA_ID_CTINFO,
  128. TCA_ID_MPLS,
  129. TCA_ID_CT,
  130. TCA_ID_GATE,
  131. /* other actions go here */
  132. __TCA_ID_MAX = 255
  133. };
  134. #define TCA_ID_MAX __TCA_ID_MAX
  135. struct tc_police {
  136. __u32 index;
  137. int action;
  138. #define TC_POLICE_UNSPEC TC_ACT_UNSPEC
  139. #define TC_POLICE_OK TC_ACT_OK
  140. #define TC_POLICE_RECLASSIFY TC_ACT_RECLASSIFY
  141. #define TC_POLICE_SHOT TC_ACT_SHOT
  142. #define TC_POLICE_PIPE TC_ACT_PIPE
  143. __u32 limit;
  144. __u32 burst;
  145. __u32 mtu;
  146. struct tc_ratespec rate;
  147. struct tc_ratespec peakrate;
  148. int refcnt;
  149. int bindcnt;
  150. __u32 capab;
  151. };
  152. struct tcf_t {
  153. __u64 install;
  154. __u64 lastuse;
  155. __u64 expires;
  156. __u64 firstuse;
  157. };
  158. struct tc_cnt {
  159. int refcnt;
  160. int bindcnt;
  161. };
  162. #define tc_gen \
  163. __u32 index; \
  164. __u32 capab; \
  165. int action; \
  166. int refcnt; \
  167. int bindcnt
  168. enum {
  169. TCA_POLICE_UNSPEC,
  170. TCA_POLICE_TBF,
  171. TCA_POLICE_RATE,
  172. TCA_POLICE_PEAKRATE,
  173. TCA_POLICE_AVRATE,
  174. TCA_POLICE_RESULT,
  175. TCA_POLICE_TM,
  176. TCA_POLICE_PAD,
  177. TCA_POLICE_RATE64,
  178. TCA_POLICE_PEAKRATE64,
  179. TCA_POLICE_PKTRATE64,
  180. TCA_POLICE_PKTBURST64,
  181. __TCA_POLICE_MAX
  182. #define TCA_POLICE_RESULT TCA_POLICE_RESULT
  183. };
  184. #define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1)
  185. /* tca flags definitions */
  186. #define TCA_CLS_FLAGS_SKIP_HW (1 << 0) /* don't offload filter to HW */
  187. #define TCA_CLS_FLAGS_SKIP_SW (1 << 1) /* don't use filter in SW */
  188. #define TCA_CLS_FLAGS_IN_HW (1 << 2) /* filter is offloaded to HW */
  189. #define TCA_CLS_FLAGS_NOT_IN_HW (1 << 3) /* filter isn't offloaded to HW */
  190. #define TCA_CLS_FLAGS_VERBOSE (1 << 4) /* verbose logging */
  191. /* U32 filters */
  192. #define TC_U32_HTID(h) ((h)&0xFFF00000)
  193. #define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20)
  194. #define TC_U32_HASH(h) (((h)>>12)&0xFF)
  195. #define TC_U32_NODE(h) ((h)&0xFFF)
  196. #define TC_U32_KEY(h) ((h)&0xFFFFF)
  197. #define TC_U32_UNSPEC 0
  198. #define TC_U32_ROOT (0xFFF00000)
  199. enum {
  200. TCA_U32_UNSPEC,
  201. TCA_U32_CLASSID,
  202. TCA_U32_HASH,
  203. TCA_U32_LINK,
  204. TCA_U32_DIVISOR,
  205. TCA_U32_SEL,
  206. TCA_U32_POLICE,
  207. TCA_U32_ACT,
  208. TCA_U32_INDEV,
  209. TCA_U32_PCNT,
  210. TCA_U32_MARK,
  211. TCA_U32_FLAGS,
  212. TCA_U32_PAD,
  213. __TCA_U32_MAX
  214. };
  215. #define TCA_U32_MAX (__TCA_U32_MAX - 1)
  216. struct tc_u32_key {
  217. __be32 mask;
  218. __be32 val;
  219. int off;
  220. int offmask;
  221. };
  222. struct tc_u32_sel {
  223. /* New members MUST be added within the __struct_group() macro below. */
  224. __struct_group(tc_u32_sel_hdr, hdr, /* no attrs */,
  225. unsigned char flags;
  226. unsigned char offshift;
  227. unsigned char nkeys;
  228. __be16 offmask;
  229. __u16 off;
  230. short offoff;
  231. short hoff;
  232. __be32 hmask;
  233. );
  234. struct tc_u32_key keys[];
  235. };
  236. struct tc_u32_mark {
  237. __u32 val;
  238. __u32 mask;
  239. __u32 success;
  240. };
  241. struct tc_u32_pcnt {
  242. __u64 rcnt;
  243. __u64 rhit;
  244. __u64 kcnts[];
  245. };
  246. /* Flags */
  247. #define TC_U32_TERMINAL 1
  248. #define TC_U32_OFFSET 2
  249. #define TC_U32_VAROFFSET 4
  250. #define TC_U32_EAT 8
  251. #define TC_U32_MAXDEPTH 8
  252. /* ROUTE filter */
  253. enum {
  254. TCA_ROUTE4_UNSPEC,
  255. TCA_ROUTE4_CLASSID,
  256. TCA_ROUTE4_TO,
  257. TCA_ROUTE4_FROM,
  258. TCA_ROUTE4_IIF,
  259. TCA_ROUTE4_POLICE,
  260. TCA_ROUTE4_ACT,
  261. __TCA_ROUTE4_MAX
  262. };
  263. #define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1)
  264. /* FW filter */
  265. enum {
  266. TCA_FW_UNSPEC,
  267. TCA_FW_CLASSID,
  268. TCA_FW_POLICE,
  269. TCA_FW_INDEV,
  270. TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */
  271. TCA_FW_MASK,
  272. __TCA_FW_MAX
  273. };
  274. #define TCA_FW_MAX (__TCA_FW_MAX - 1)
  275. /* Flow filter */
  276. enum {
  277. FLOW_KEY_SRC,
  278. FLOW_KEY_DST,
  279. FLOW_KEY_PROTO,
  280. FLOW_KEY_PROTO_SRC,
  281. FLOW_KEY_PROTO_DST,
  282. FLOW_KEY_IIF,
  283. FLOW_KEY_PRIORITY,
  284. FLOW_KEY_MARK,
  285. FLOW_KEY_NFCT,
  286. FLOW_KEY_NFCT_SRC,
  287. FLOW_KEY_NFCT_DST,
  288. FLOW_KEY_NFCT_PROTO_SRC,
  289. FLOW_KEY_NFCT_PROTO_DST,
  290. FLOW_KEY_RTCLASSID,
  291. FLOW_KEY_SKUID,
  292. FLOW_KEY_SKGID,
  293. FLOW_KEY_VLAN_TAG,
  294. FLOW_KEY_RXHASH,
  295. __FLOW_KEY_MAX,
  296. };
  297. #define FLOW_KEY_MAX (__FLOW_KEY_MAX - 1)
  298. enum {
  299. FLOW_MODE_MAP,
  300. FLOW_MODE_HASH,
  301. };
  302. enum {
  303. TCA_FLOW_UNSPEC,
  304. TCA_FLOW_KEYS,
  305. TCA_FLOW_MODE,
  306. TCA_FLOW_BASECLASS,
  307. TCA_FLOW_RSHIFT,
  308. TCA_FLOW_ADDEND,
  309. TCA_FLOW_MASK,
  310. TCA_FLOW_XOR,
  311. TCA_FLOW_DIVISOR,
  312. TCA_FLOW_ACT,
  313. TCA_FLOW_POLICE,
  314. TCA_FLOW_EMATCHES,
  315. TCA_FLOW_PERTURB,
  316. __TCA_FLOW_MAX
  317. };
  318. #define TCA_FLOW_MAX (__TCA_FLOW_MAX - 1)
  319. /* Basic filter */
  320. struct tc_basic_pcnt {
  321. __u64 rcnt;
  322. __u64 rhit;
  323. };
  324. enum {
  325. TCA_BASIC_UNSPEC,
  326. TCA_BASIC_CLASSID,
  327. TCA_BASIC_EMATCHES,
  328. TCA_BASIC_ACT,
  329. TCA_BASIC_POLICE,
  330. TCA_BASIC_PCNT,
  331. TCA_BASIC_PAD,
  332. __TCA_BASIC_MAX
  333. };
  334. #define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1)
  335. /* Cgroup classifier */
  336. enum {
  337. TCA_CGROUP_UNSPEC,
  338. TCA_CGROUP_ACT,
  339. TCA_CGROUP_POLICE,
  340. TCA_CGROUP_EMATCHES,
  341. __TCA_CGROUP_MAX,
  342. };
  343. #define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1)
  344. /* BPF classifier */
  345. #define TCA_BPF_FLAG_ACT_DIRECT (1 << 0)
  346. enum {
  347. TCA_BPF_UNSPEC,
  348. TCA_BPF_ACT,
  349. TCA_BPF_POLICE,
  350. TCA_BPF_CLASSID,
  351. TCA_BPF_OPS_LEN,
  352. TCA_BPF_OPS,
  353. TCA_BPF_FD,
  354. TCA_BPF_NAME,
  355. TCA_BPF_FLAGS,
  356. TCA_BPF_FLAGS_GEN,
  357. TCA_BPF_TAG,
  358. TCA_BPF_ID,
  359. __TCA_BPF_MAX,
  360. };
  361. #define TCA_BPF_MAX (__TCA_BPF_MAX - 1)
  362. /* Flower classifier */
  363. enum {
  364. TCA_FLOWER_UNSPEC,
  365. TCA_FLOWER_CLASSID,
  366. TCA_FLOWER_INDEV,
  367. TCA_FLOWER_ACT,
  368. TCA_FLOWER_KEY_ETH_DST, /* ETH_ALEN */
  369. TCA_FLOWER_KEY_ETH_DST_MASK, /* ETH_ALEN */
  370. TCA_FLOWER_KEY_ETH_SRC, /* ETH_ALEN */
  371. TCA_FLOWER_KEY_ETH_SRC_MASK, /* ETH_ALEN */
  372. TCA_FLOWER_KEY_ETH_TYPE, /* be16 */
  373. TCA_FLOWER_KEY_IP_PROTO, /* u8 */
  374. TCA_FLOWER_KEY_IPV4_SRC, /* be32 */
  375. TCA_FLOWER_KEY_IPV4_SRC_MASK, /* be32 */
  376. TCA_FLOWER_KEY_IPV4_DST, /* be32 */
  377. TCA_FLOWER_KEY_IPV4_DST_MASK, /* be32 */
  378. TCA_FLOWER_KEY_IPV6_SRC, /* struct in6_addr */
  379. TCA_FLOWER_KEY_IPV6_SRC_MASK, /* struct in6_addr */
  380. TCA_FLOWER_KEY_IPV6_DST, /* struct in6_addr */
  381. TCA_FLOWER_KEY_IPV6_DST_MASK, /* struct in6_addr */
  382. TCA_FLOWER_KEY_TCP_SRC, /* be16 */
  383. TCA_FLOWER_KEY_TCP_DST, /* be16 */
  384. TCA_FLOWER_KEY_UDP_SRC, /* be16 */
  385. TCA_FLOWER_KEY_UDP_DST, /* be16 */
  386. TCA_FLOWER_FLAGS,
  387. TCA_FLOWER_KEY_VLAN_ID, /* be16 */
  388. TCA_FLOWER_KEY_VLAN_PRIO, /* u8 */
  389. TCA_FLOWER_KEY_VLAN_ETH_TYPE, /* be16 */
  390. TCA_FLOWER_KEY_ENC_KEY_ID, /* be32 */
  391. TCA_FLOWER_KEY_ENC_IPV4_SRC, /* be32 */
  392. TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,/* be32 */
  393. TCA_FLOWER_KEY_ENC_IPV4_DST, /* be32 */
  394. TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,/* be32 */
  395. TCA_FLOWER_KEY_ENC_IPV6_SRC, /* struct in6_addr */
  396. TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,/* struct in6_addr */
  397. TCA_FLOWER_KEY_ENC_IPV6_DST, /* struct in6_addr */
  398. TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,/* struct in6_addr */
  399. TCA_FLOWER_KEY_TCP_SRC_MASK, /* be16 */
  400. TCA_FLOWER_KEY_TCP_DST_MASK, /* be16 */
  401. TCA_FLOWER_KEY_UDP_SRC_MASK, /* be16 */
  402. TCA_FLOWER_KEY_UDP_DST_MASK, /* be16 */
  403. TCA_FLOWER_KEY_SCTP_SRC_MASK, /* be16 */
  404. TCA_FLOWER_KEY_SCTP_DST_MASK, /* be16 */
  405. TCA_FLOWER_KEY_SCTP_SRC, /* be16 */
  406. TCA_FLOWER_KEY_SCTP_DST, /* be16 */
  407. TCA_FLOWER_KEY_ENC_UDP_SRC_PORT, /* be16 */
  408. TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK, /* be16 */
  409. TCA_FLOWER_KEY_ENC_UDP_DST_PORT, /* be16 */
  410. TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK, /* be16 */
  411. TCA_FLOWER_KEY_FLAGS, /* be32 */
  412. TCA_FLOWER_KEY_FLAGS_MASK, /* be32 */
  413. TCA_FLOWER_KEY_ICMPV4_CODE, /* u8 */
  414. TCA_FLOWER_KEY_ICMPV4_CODE_MASK,/* u8 */
  415. TCA_FLOWER_KEY_ICMPV4_TYPE, /* u8 */
  416. TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,/* u8 */
  417. TCA_FLOWER_KEY_ICMPV6_CODE, /* u8 */
  418. TCA_FLOWER_KEY_ICMPV6_CODE_MASK,/* u8 */
  419. TCA_FLOWER_KEY_ICMPV6_TYPE, /* u8 */
  420. TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,/* u8 */
  421. TCA_FLOWER_KEY_ARP_SIP, /* be32 */
  422. TCA_FLOWER_KEY_ARP_SIP_MASK, /* be32 */
  423. TCA_FLOWER_KEY_ARP_TIP, /* be32 */
  424. TCA_FLOWER_KEY_ARP_TIP_MASK, /* be32 */
  425. TCA_FLOWER_KEY_ARP_OP, /* u8 */
  426. TCA_FLOWER_KEY_ARP_OP_MASK, /* u8 */
  427. TCA_FLOWER_KEY_ARP_SHA, /* ETH_ALEN */
  428. TCA_FLOWER_KEY_ARP_SHA_MASK, /* ETH_ALEN */
  429. TCA_FLOWER_KEY_ARP_THA, /* ETH_ALEN */
  430. TCA_FLOWER_KEY_ARP_THA_MASK, /* ETH_ALEN */
  431. TCA_FLOWER_KEY_MPLS_TTL, /* u8 - 8 bits */
  432. TCA_FLOWER_KEY_MPLS_BOS, /* u8 - 1 bit */
  433. TCA_FLOWER_KEY_MPLS_TC, /* u8 - 3 bits */
  434. TCA_FLOWER_KEY_MPLS_LABEL, /* be32 - 20 bits */
  435. TCA_FLOWER_KEY_TCP_FLAGS, /* be16 */
  436. TCA_FLOWER_KEY_TCP_FLAGS_MASK, /* be16 */
  437. TCA_FLOWER_KEY_IP_TOS, /* u8 */
  438. TCA_FLOWER_KEY_IP_TOS_MASK, /* u8 */
  439. TCA_FLOWER_KEY_IP_TTL, /* u8 */
  440. TCA_FLOWER_KEY_IP_TTL_MASK, /* u8 */
  441. TCA_FLOWER_KEY_CVLAN_ID, /* be16 */
  442. TCA_FLOWER_KEY_CVLAN_PRIO, /* u8 */
  443. TCA_FLOWER_KEY_CVLAN_ETH_TYPE, /* be16 */
  444. TCA_FLOWER_KEY_ENC_IP_TOS, /* u8 */
  445. TCA_FLOWER_KEY_ENC_IP_TOS_MASK, /* u8 */
  446. TCA_FLOWER_KEY_ENC_IP_TTL, /* u8 */
  447. TCA_FLOWER_KEY_ENC_IP_TTL_MASK, /* u8 */
  448. TCA_FLOWER_KEY_ENC_OPTS,
  449. TCA_FLOWER_KEY_ENC_OPTS_MASK,
  450. TCA_FLOWER_IN_HW_COUNT,
  451. TCA_FLOWER_KEY_PORT_SRC_MIN, /* be16 */
  452. TCA_FLOWER_KEY_PORT_SRC_MAX, /* be16 */
  453. TCA_FLOWER_KEY_PORT_DST_MIN, /* be16 */
  454. TCA_FLOWER_KEY_PORT_DST_MAX, /* be16 */
  455. TCA_FLOWER_KEY_CT_STATE, /* u16 */
  456. TCA_FLOWER_KEY_CT_STATE_MASK, /* u16 */
  457. TCA_FLOWER_KEY_CT_ZONE, /* u16 */
  458. TCA_FLOWER_KEY_CT_ZONE_MASK, /* u16 */
  459. TCA_FLOWER_KEY_CT_MARK, /* u32 */
  460. TCA_FLOWER_KEY_CT_MARK_MASK, /* u32 */
  461. TCA_FLOWER_KEY_CT_LABELS, /* u128 */
  462. TCA_FLOWER_KEY_CT_LABELS_MASK, /* u128 */
  463. TCA_FLOWER_KEY_MPLS_OPTS,
  464. TCA_FLOWER_KEY_HASH, /* u32 */
  465. TCA_FLOWER_KEY_HASH_MASK, /* u32 */
  466. TCA_FLOWER_KEY_NUM_OF_VLANS, /* u8 */
  467. TCA_FLOWER_KEY_PPPOE_SID, /* be16 */
  468. TCA_FLOWER_KEY_PPP_PROTO, /* be16 */
  469. TCA_FLOWER_KEY_L2TPV3_SID, /* be32 */
  470. TCA_FLOWER_L2_MISS, /* u8 */
  471. TCA_FLOWER_KEY_CFM, /* nested */
  472. TCA_FLOWER_KEY_SPI, /* be32 */
  473. TCA_FLOWER_KEY_SPI_MASK, /* be32 */
  474. TCA_FLOWER_KEY_ENC_FLAGS, /* be32 */
  475. TCA_FLOWER_KEY_ENC_FLAGS_MASK, /* be32 */
  476. __TCA_FLOWER_MAX,
  477. };
  478. #define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
  479. enum {
  480. TCA_FLOWER_KEY_CT_FLAGS_NEW = 1 << 0, /* Beginning of a new connection. */
  481. TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED = 1 << 1, /* Part of an existing connection. */
  482. TCA_FLOWER_KEY_CT_FLAGS_RELATED = 1 << 2, /* Related to an established connection. */
  483. TCA_FLOWER_KEY_CT_FLAGS_TRACKED = 1 << 3, /* Conntrack has occurred. */
  484. TCA_FLOWER_KEY_CT_FLAGS_INVALID = 1 << 4, /* Conntrack is invalid. */
  485. TCA_FLOWER_KEY_CT_FLAGS_REPLY = 1 << 5, /* Packet is in the reply direction. */
  486. __TCA_FLOWER_KEY_CT_FLAGS_MAX,
  487. };
  488. enum {
  489. TCA_FLOWER_KEY_ENC_OPTS_UNSPEC,
  490. TCA_FLOWER_KEY_ENC_OPTS_GENEVE, /* Nested
  491. * TCA_FLOWER_KEY_ENC_OPT_GENEVE_
  492. * attributes
  493. */
  494. TCA_FLOWER_KEY_ENC_OPTS_VXLAN, /* Nested
  495. * TCA_FLOWER_KEY_ENC_OPT_VXLAN_
  496. * attributes
  497. */
  498. TCA_FLOWER_KEY_ENC_OPTS_ERSPAN, /* Nested
  499. * TCA_FLOWER_KEY_ENC_OPT_ERSPAN_
  500. * attributes
  501. */
  502. TCA_FLOWER_KEY_ENC_OPTS_GTP, /* Nested
  503. * TCA_FLOWER_KEY_ENC_OPT_GTP_
  504. * attributes
  505. */
  506. TCA_FLOWER_KEY_ENC_OPTS_PFCP, /* Nested
  507. * TCA_FLOWER_KEY_ENC_IPT_PFCP
  508. * attributes
  509. */
  510. __TCA_FLOWER_KEY_ENC_OPTS_MAX,
  511. };
  512. #define TCA_FLOWER_KEY_ENC_OPTS_MAX (__TCA_FLOWER_KEY_ENC_OPTS_MAX - 1)
  513. enum {
  514. TCA_FLOWER_KEY_ENC_OPT_GENEVE_UNSPEC,
  515. TCA_FLOWER_KEY_ENC_OPT_GENEVE_CLASS, /* u16 */
  516. TCA_FLOWER_KEY_ENC_OPT_GENEVE_TYPE, /* u8 */
  517. TCA_FLOWER_KEY_ENC_OPT_GENEVE_DATA, /* 4 to 128 bytes */
  518. __TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX,
  519. };
  520. #define TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX \
  521. (__TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX - 1)
  522. enum {
  523. TCA_FLOWER_KEY_ENC_OPT_VXLAN_UNSPEC,
  524. TCA_FLOWER_KEY_ENC_OPT_VXLAN_GBP, /* u32 */
  525. __TCA_FLOWER_KEY_ENC_OPT_VXLAN_MAX,
  526. };
  527. #define TCA_FLOWER_KEY_ENC_OPT_VXLAN_MAX \
  528. (__TCA_FLOWER_KEY_ENC_OPT_VXLAN_MAX - 1)
  529. enum {
  530. TCA_FLOWER_KEY_ENC_OPT_ERSPAN_UNSPEC,
  531. TCA_FLOWER_KEY_ENC_OPT_ERSPAN_VER, /* u8 */
  532. TCA_FLOWER_KEY_ENC_OPT_ERSPAN_INDEX, /* be32 */
  533. TCA_FLOWER_KEY_ENC_OPT_ERSPAN_DIR, /* u8 */
  534. TCA_FLOWER_KEY_ENC_OPT_ERSPAN_HWID, /* u8 */
  535. __TCA_FLOWER_KEY_ENC_OPT_ERSPAN_MAX,
  536. };
  537. #define TCA_FLOWER_KEY_ENC_OPT_ERSPAN_MAX \
  538. (__TCA_FLOWER_KEY_ENC_OPT_ERSPAN_MAX - 1)
  539. enum {
  540. TCA_FLOWER_KEY_ENC_OPT_GTP_UNSPEC,
  541. TCA_FLOWER_KEY_ENC_OPT_GTP_PDU_TYPE, /* u8 */
  542. TCA_FLOWER_KEY_ENC_OPT_GTP_QFI, /* u8 */
  543. __TCA_FLOWER_KEY_ENC_OPT_GTP_MAX,
  544. };
  545. #define TCA_FLOWER_KEY_ENC_OPT_GTP_MAX \
  546. (__TCA_FLOWER_KEY_ENC_OPT_GTP_MAX - 1)
  547. enum {
  548. TCA_FLOWER_KEY_ENC_OPT_PFCP_UNSPEC,
  549. TCA_FLOWER_KEY_ENC_OPT_PFCP_TYPE, /* u8 */
  550. TCA_FLOWER_KEY_ENC_OPT_PFCP_SEID, /* be64 */
  551. __TCA_FLOWER_KEY_ENC_OPT_PFCP_MAX,
  552. };
  553. #define TCA_FLOWER_KEY_ENC_OPT_PFCP_MAX \
  554. (__TCA_FLOWER_KEY_ENC_OPT_PFCP_MAX - 1)
  555. enum {
  556. TCA_FLOWER_KEY_MPLS_OPTS_UNSPEC,
  557. TCA_FLOWER_KEY_MPLS_OPTS_LSE,
  558. __TCA_FLOWER_KEY_MPLS_OPTS_MAX,
  559. };
  560. #define TCA_FLOWER_KEY_MPLS_OPTS_MAX (__TCA_FLOWER_KEY_MPLS_OPTS_MAX - 1)
  561. enum {
  562. TCA_FLOWER_KEY_MPLS_OPT_LSE_UNSPEC,
  563. TCA_FLOWER_KEY_MPLS_OPT_LSE_DEPTH,
  564. TCA_FLOWER_KEY_MPLS_OPT_LSE_TTL,
  565. TCA_FLOWER_KEY_MPLS_OPT_LSE_BOS,
  566. TCA_FLOWER_KEY_MPLS_OPT_LSE_TC,
  567. TCA_FLOWER_KEY_MPLS_OPT_LSE_LABEL,
  568. __TCA_FLOWER_KEY_MPLS_OPT_LSE_MAX,
  569. };
  570. #define TCA_FLOWER_KEY_MPLS_OPT_LSE_MAX \
  571. (__TCA_FLOWER_KEY_MPLS_OPT_LSE_MAX - 1)
  572. enum {
  573. TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT = (1 << 0),
  574. TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST = (1 << 1),
  575. TCA_FLOWER_KEY_FLAGS_TUNNEL_CSUM = (1 << 2),
  576. TCA_FLOWER_KEY_FLAGS_TUNNEL_DONT_FRAGMENT = (1 << 3),
  577. TCA_FLOWER_KEY_FLAGS_TUNNEL_OAM = (1 << 4),
  578. TCA_FLOWER_KEY_FLAGS_TUNNEL_CRIT_OPT = (1 << 5),
  579. __TCA_FLOWER_KEY_FLAGS_MAX,
  580. };
  581. #define TCA_FLOWER_KEY_FLAGS_MAX (__TCA_FLOWER_KEY_FLAGS_MAX - 1)
  582. enum {
  583. TCA_FLOWER_KEY_CFM_OPT_UNSPEC,
  584. TCA_FLOWER_KEY_CFM_MD_LEVEL,
  585. TCA_FLOWER_KEY_CFM_OPCODE,
  586. __TCA_FLOWER_KEY_CFM_OPT_MAX,
  587. };
  588. #define TCA_FLOWER_KEY_CFM_OPT_MAX (__TCA_FLOWER_KEY_CFM_OPT_MAX - 1)
  589. #define TCA_FLOWER_MASK_FLAGS_RANGE (1 << 0) /* Range-based match */
  590. /* Match-all classifier */
  591. struct tc_matchall_pcnt {
  592. __u64 rhit;
  593. };
  594. enum {
  595. TCA_MATCHALL_UNSPEC,
  596. TCA_MATCHALL_CLASSID,
  597. TCA_MATCHALL_ACT,
  598. TCA_MATCHALL_FLAGS,
  599. TCA_MATCHALL_PCNT,
  600. TCA_MATCHALL_PAD,
  601. __TCA_MATCHALL_MAX,
  602. };
  603. #define TCA_MATCHALL_MAX (__TCA_MATCHALL_MAX - 1)
  604. /* Extended Matches */
  605. struct tcf_ematch_tree_hdr {
  606. __u16 nmatches;
  607. __u16 progid;
  608. };
  609. enum {
  610. TCA_EMATCH_TREE_UNSPEC,
  611. TCA_EMATCH_TREE_HDR,
  612. TCA_EMATCH_TREE_LIST,
  613. __TCA_EMATCH_TREE_MAX
  614. };
  615. #define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1)
  616. struct tcf_ematch_hdr {
  617. __u16 matchid;
  618. __u16 kind;
  619. __u16 flags;
  620. __u16 pad; /* currently unused */
  621. };
  622. /* 0 1
  623. * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
  624. * +-----------------------+-+-+---+
  625. * | Unused |S|I| R |
  626. * +-----------------------+-+-+---+
  627. *
  628. * R(2) ::= relation to next ematch
  629. * where: 0 0 END (last ematch)
  630. * 0 1 AND
  631. * 1 0 OR
  632. * 1 1 Unused (invalid)
  633. * I(1) ::= invert result
  634. * S(1) ::= simple payload
  635. */
  636. #define TCF_EM_REL_END 0
  637. #define TCF_EM_REL_AND (1<<0)
  638. #define TCF_EM_REL_OR (1<<1)
  639. #define TCF_EM_INVERT (1<<2)
  640. #define TCF_EM_SIMPLE (1<<3)
  641. #define TCF_EM_REL_MASK 3
  642. #define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK)
  643. enum {
  644. TCF_LAYER_LINK,
  645. TCF_LAYER_NETWORK,
  646. TCF_LAYER_TRANSPORT,
  647. __TCF_LAYER_MAX
  648. };
  649. #define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1)
  650. /* Ematch type assignments
  651. * 1..32767 Reserved for ematches inside kernel tree
  652. * 32768..65535 Free to use, not reliable
  653. */
  654. #define TCF_EM_CONTAINER 0
  655. #define TCF_EM_CMP 1
  656. #define TCF_EM_NBYTE 2
  657. #define TCF_EM_U32 3
  658. #define TCF_EM_META 4
  659. #define TCF_EM_TEXT 5
  660. #define TCF_EM_VLAN 6
  661. #define TCF_EM_CANID 7
  662. #define TCF_EM_IPSET 8
  663. #define TCF_EM_IPT 9
  664. #define TCF_EM_MAX 9
  665. enum {
  666. TCF_EM_PROG_TC
  667. };
  668. enum {
  669. TCF_EM_OPND_EQ,
  670. TCF_EM_OPND_GT,
  671. TCF_EM_OPND_LT
  672. };
  673. #endif