134ff6846SIoana Radulescu /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
234ff6846SIoana Radulescu /* Copyright 2013-2015 Freescale Semiconductor Inc.
334ff6846SIoana Radulescu  */
434ff6846SIoana Radulescu #ifndef __FSL_DPKG_H_
534ff6846SIoana Radulescu #define __FSL_DPKG_H_
634ff6846SIoana Radulescu 
734ff6846SIoana Radulescu #include <linux/types.h>
834ff6846SIoana Radulescu 
934ff6846SIoana Radulescu /* Data Path Key Generator API
1034ff6846SIoana Radulescu  * Contains initialization APIs and runtime APIs for the Key Generator
1134ff6846SIoana Radulescu  */
1234ff6846SIoana Radulescu 
1334ff6846SIoana Radulescu /** Key Generator properties */
1434ff6846SIoana Radulescu 
1534ff6846SIoana Radulescu /**
16*4fe72de6SIoana Ciornei  * DPKG_NUM_OF_MASKS - Number of masks per key extraction
1734ff6846SIoana Radulescu  */
1834ff6846SIoana Radulescu #define DPKG_NUM_OF_MASKS		4
19*4fe72de6SIoana Ciornei 
2034ff6846SIoana Radulescu /**
21*4fe72de6SIoana Ciornei  * DPKG_MAX_NUM_OF_EXTRACTS - Number of extractions per key profile
2234ff6846SIoana Radulescu  */
2334ff6846SIoana Radulescu #define DPKG_MAX_NUM_OF_EXTRACTS	10
2434ff6846SIoana Radulescu 
2534ff6846SIoana Radulescu /**
2634ff6846SIoana Radulescu  * enum dpkg_extract_from_hdr_type - Selecting extraction by header types
2734ff6846SIoana Radulescu  * @DPKG_FROM_HDR: Extract selected bytes from header, by offset
2834ff6846SIoana Radulescu  * @DPKG_FROM_FIELD: Extract selected bytes from header, by offset from field
2934ff6846SIoana Radulescu  * @DPKG_FULL_FIELD: Extract a full field
3034ff6846SIoana Radulescu  */
3134ff6846SIoana Radulescu enum dpkg_extract_from_hdr_type {
3234ff6846SIoana Radulescu 	DPKG_FROM_HDR = 0,
3334ff6846SIoana Radulescu 	DPKG_FROM_FIELD = 1,
3434ff6846SIoana Radulescu 	DPKG_FULL_FIELD = 2
3534ff6846SIoana Radulescu };
3634ff6846SIoana Radulescu 
3734ff6846SIoana Radulescu /**
3834ff6846SIoana Radulescu  * enum dpkg_extract_type - Enumeration for selecting extraction type
3934ff6846SIoana Radulescu  * @DPKG_EXTRACT_FROM_HDR: Extract from the header
4034ff6846SIoana Radulescu  * @DPKG_EXTRACT_FROM_DATA: Extract from data not in specific header
4134ff6846SIoana Radulescu  * @DPKG_EXTRACT_FROM_PARSE: Extract from parser-result;
4234ff6846SIoana Radulescu  *	e.g. can be used to extract header existence;
4334ff6846SIoana Radulescu  *	please refer to 'Parse Result definition' section in the parser BG
4434ff6846SIoana Radulescu  */
4534ff6846SIoana Radulescu enum dpkg_extract_type {
4634ff6846SIoana Radulescu 	DPKG_EXTRACT_FROM_HDR = 0,
4734ff6846SIoana Radulescu 	DPKG_EXTRACT_FROM_DATA = 1,
4834ff6846SIoana Radulescu 	DPKG_EXTRACT_FROM_PARSE = 3
4934ff6846SIoana Radulescu };
5034ff6846SIoana Radulescu 
5134ff6846SIoana Radulescu /**
5234ff6846SIoana Radulescu  * struct dpkg_mask - A structure for defining a single extraction mask
5334ff6846SIoana Radulescu  * @mask: Byte mask for the extracted content
5434ff6846SIoana Radulescu  * @offset: Offset within the extracted content
5534ff6846SIoana Radulescu  */
5634ff6846SIoana Radulescu struct dpkg_mask {
5734ff6846SIoana Radulescu 	u8 mask;
5834ff6846SIoana Radulescu 	u8 offset;
5934ff6846SIoana Radulescu };
6034ff6846SIoana Radulescu 
6134ff6846SIoana Radulescu /* Protocol fields */
6234ff6846SIoana Radulescu 
6334ff6846SIoana Radulescu /* Ethernet fields */
6434ff6846SIoana Radulescu #define NH_FLD_ETH_DA				BIT(0)
6534ff6846SIoana Radulescu #define NH_FLD_ETH_SA				BIT(1)
6634ff6846SIoana Radulescu #define NH_FLD_ETH_LENGTH			BIT(2)
6734ff6846SIoana Radulescu #define NH_FLD_ETH_TYPE				BIT(3)
6834ff6846SIoana Radulescu #define NH_FLD_ETH_FINAL_CKSUM			BIT(4)
6934ff6846SIoana Radulescu #define NH_FLD_ETH_PADDING			BIT(5)
7034ff6846SIoana Radulescu #define NH_FLD_ETH_ALL_FIELDS			(BIT(6) - 1)
7134ff6846SIoana Radulescu 
7234ff6846SIoana Radulescu /* VLAN fields */
7334ff6846SIoana Radulescu #define NH_FLD_VLAN_VPRI			BIT(0)
7434ff6846SIoana Radulescu #define NH_FLD_VLAN_CFI				BIT(1)
7534ff6846SIoana Radulescu #define NH_FLD_VLAN_VID				BIT(2)
7634ff6846SIoana Radulescu #define NH_FLD_VLAN_LENGTH			BIT(3)
7734ff6846SIoana Radulescu #define NH_FLD_VLAN_TYPE			BIT(4)
7834ff6846SIoana Radulescu #define NH_FLD_VLAN_ALL_FIELDS			(BIT(5) - 1)
7934ff6846SIoana Radulescu 
8034ff6846SIoana Radulescu #define NH_FLD_VLAN_TCI				(NH_FLD_VLAN_VPRI | \
8134ff6846SIoana Radulescu 						 NH_FLD_VLAN_CFI | \
8234ff6846SIoana Radulescu 						 NH_FLD_VLAN_VID)
8334ff6846SIoana Radulescu 
8434ff6846SIoana Radulescu /* IP (generic) fields */
8534ff6846SIoana Radulescu #define NH_FLD_IP_VER				BIT(0)
8634ff6846SIoana Radulescu #define NH_FLD_IP_DSCP				BIT(2)
8734ff6846SIoana Radulescu #define NH_FLD_IP_ECN				BIT(3)
8834ff6846SIoana Radulescu #define NH_FLD_IP_PROTO				BIT(4)
8934ff6846SIoana Radulescu #define NH_FLD_IP_SRC				BIT(5)
9034ff6846SIoana Radulescu #define NH_FLD_IP_DST				BIT(6)
9134ff6846SIoana Radulescu #define NH_FLD_IP_TOS_TC			BIT(7)
9234ff6846SIoana Radulescu #define NH_FLD_IP_ID				BIT(8)
9334ff6846SIoana Radulescu #define NH_FLD_IP_ALL_FIELDS			(BIT(9) - 1)
9434ff6846SIoana Radulescu 
9534ff6846SIoana Radulescu /* IPV4 fields */
9634ff6846SIoana Radulescu #define NH_FLD_IPV4_VER				BIT(0)
9734ff6846SIoana Radulescu #define NH_FLD_IPV4_HDR_LEN			BIT(1)
9834ff6846SIoana Radulescu #define NH_FLD_IPV4_TOS				BIT(2)
9934ff6846SIoana Radulescu #define NH_FLD_IPV4_TOTAL_LEN			BIT(3)
10034ff6846SIoana Radulescu #define NH_FLD_IPV4_ID				BIT(4)
10134ff6846SIoana Radulescu #define NH_FLD_IPV4_FLAG_D			BIT(5)
10234ff6846SIoana Radulescu #define NH_FLD_IPV4_FLAG_M			BIT(6)
10334ff6846SIoana Radulescu #define NH_FLD_IPV4_OFFSET			BIT(7)
10434ff6846SIoana Radulescu #define NH_FLD_IPV4_TTL				BIT(8)
10534ff6846SIoana Radulescu #define NH_FLD_IPV4_PROTO			BIT(9)
10634ff6846SIoana Radulescu #define NH_FLD_IPV4_CKSUM			BIT(10)
10734ff6846SIoana Radulescu #define NH_FLD_IPV4_SRC_IP			BIT(11)
10834ff6846SIoana Radulescu #define NH_FLD_IPV4_DST_IP			BIT(12)
10934ff6846SIoana Radulescu #define NH_FLD_IPV4_OPTS			BIT(13)
11034ff6846SIoana Radulescu #define NH_FLD_IPV4_OPTS_COUNT			BIT(14)
11134ff6846SIoana Radulescu #define NH_FLD_IPV4_ALL_FIELDS			(BIT(15) - 1)
11234ff6846SIoana Radulescu 
11334ff6846SIoana Radulescu /* IPV6 fields */
11434ff6846SIoana Radulescu #define NH_FLD_IPV6_VER				BIT(0)
11534ff6846SIoana Radulescu #define NH_FLD_IPV6_TC				BIT(1)
11634ff6846SIoana Radulescu #define NH_FLD_IPV6_SRC_IP			BIT(2)
11734ff6846SIoana Radulescu #define NH_FLD_IPV6_DST_IP			BIT(3)
11834ff6846SIoana Radulescu #define NH_FLD_IPV6_NEXT_HDR			BIT(4)
11934ff6846SIoana Radulescu #define NH_FLD_IPV6_FL				BIT(5)
12034ff6846SIoana Radulescu #define NH_FLD_IPV6_HOP_LIMIT			BIT(6)
12134ff6846SIoana Radulescu #define NH_FLD_IPV6_ID				BIT(7)
12234ff6846SIoana Radulescu #define NH_FLD_IPV6_ALL_FIELDS			(BIT(8) - 1)
12334ff6846SIoana Radulescu 
12434ff6846SIoana Radulescu /* ICMP fields */
12534ff6846SIoana Radulescu #define NH_FLD_ICMP_TYPE			BIT(0)
12634ff6846SIoana Radulescu #define NH_FLD_ICMP_CODE			BIT(1)
12734ff6846SIoana Radulescu #define NH_FLD_ICMP_CKSUM			BIT(2)
12834ff6846SIoana Radulescu #define NH_FLD_ICMP_ID				BIT(3)
12934ff6846SIoana Radulescu #define NH_FLD_ICMP_SQ_NUM			BIT(4)
13034ff6846SIoana Radulescu #define NH_FLD_ICMP_ALL_FIELDS			(BIT(5) - 1)
13134ff6846SIoana Radulescu 
13234ff6846SIoana Radulescu /* IGMP fields */
13334ff6846SIoana Radulescu #define NH_FLD_IGMP_VERSION			BIT(0)
13434ff6846SIoana Radulescu #define NH_FLD_IGMP_TYPE			BIT(1)
13534ff6846SIoana Radulescu #define NH_FLD_IGMP_CKSUM			BIT(2)
13634ff6846SIoana Radulescu #define NH_FLD_IGMP_DATA			BIT(3)
13734ff6846SIoana Radulescu #define NH_FLD_IGMP_ALL_FIELDS			(BIT(4) - 1)
13834ff6846SIoana Radulescu 
13934ff6846SIoana Radulescu /* TCP fields */
14034ff6846SIoana Radulescu #define NH_FLD_TCP_PORT_SRC			BIT(0)
14134ff6846SIoana Radulescu #define NH_FLD_TCP_PORT_DST			BIT(1)
14234ff6846SIoana Radulescu #define NH_FLD_TCP_SEQ				BIT(2)
14334ff6846SIoana Radulescu #define NH_FLD_TCP_ACK				BIT(3)
14434ff6846SIoana Radulescu #define NH_FLD_TCP_OFFSET			BIT(4)
14534ff6846SIoana Radulescu #define NH_FLD_TCP_FLAGS			BIT(5)
14634ff6846SIoana Radulescu #define NH_FLD_TCP_WINDOW			BIT(6)
14734ff6846SIoana Radulescu #define NH_FLD_TCP_CKSUM			BIT(7)
14834ff6846SIoana Radulescu #define NH_FLD_TCP_URGPTR			BIT(8)
14934ff6846SIoana Radulescu #define NH_FLD_TCP_OPTS				BIT(9)
15034ff6846SIoana Radulescu #define NH_FLD_TCP_OPTS_COUNT			BIT(10)
15134ff6846SIoana Radulescu #define NH_FLD_TCP_ALL_FIELDS			(BIT(11) - 1)
15234ff6846SIoana Radulescu 
15334ff6846SIoana Radulescu /* UDP fields */
15434ff6846SIoana Radulescu #define NH_FLD_UDP_PORT_SRC			BIT(0)
15534ff6846SIoana Radulescu #define NH_FLD_UDP_PORT_DST			BIT(1)
15634ff6846SIoana Radulescu #define NH_FLD_UDP_LEN				BIT(2)
15734ff6846SIoana Radulescu #define NH_FLD_UDP_CKSUM			BIT(3)
15834ff6846SIoana Radulescu #define NH_FLD_UDP_ALL_FIELDS			(BIT(4) - 1)
15934ff6846SIoana Radulescu 
16034ff6846SIoana Radulescu /* UDP-lite fields */
16134ff6846SIoana Radulescu #define NH_FLD_UDP_LITE_PORT_SRC		BIT(0)
16234ff6846SIoana Radulescu #define NH_FLD_UDP_LITE_PORT_DST		BIT(1)
16334ff6846SIoana Radulescu #define NH_FLD_UDP_LITE_ALL_FIELDS		(BIT(2) - 1)
16434ff6846SIoana Radulescu 
16534ff6846SIoana Radulescu /* UDP-encap-ESP fields */
16634ff6846SIoana Radulescu #define NH_FLD_UDP_ENC_ESP_PORT_SRC		BIT(0)
16734ff6846SIoana Radulescu #define NH_FLD_UDP_ENC_ESP_PORT_DST		BIT(1)
16834ff6846SIoana Radulescu #define NH_FLD_UDP_ENC_ESP_LEN			BIT(2)
16934ff6846SIoana Radulescu #define NH_FLD_UDP_ENC_ESP_CKSUM		BIT(3)
17034ff6846SIoana Radulescu #define NH_FLD_UDP_ENC_ESP_SPI			BIT(4)
17134ff6846SIoana Radulescu #define NH_FLD_UDP_ENC_ESP_SEQUENCE_NUM		BIT(5)
17234ff6846SIoana Radulescu #define NH_FLD_UDP_ENC_ESP_ALL_FIELDS		(BIT(6) - 1)
17334ff6846SIoana Radulescu 
17434ff6846SIoana Radulescu /* SCTP fields */
17534ff6846SIoana Radulescu #define NH_FLD_SCTP_PORT_SRC			BIT(0)
17634ff6846SIoana Radulescu #define NH_FLD_SCTP_PORT_DST			BIT(1)
17734ff6846SIoana Radulescu #define NH_FLD_SCTP_VER_TAG			BIT(2)
17834ff6846SIoana Radulescu #define NH_FLD_SCTP_CKSUM			BIT(3)
17934ff6846SIoana Radulescu #define NH_FLD_SCTP_ALL_FIELDS			(BIT(4) - 1)
18034ff6846SIoana Radulescu 
18134ff6846SIoana Radulescu /* DCCP fields */
18234ff6846SIoana Radulescu #define NH_FLD_DCCP_PORT_SRC			BIT(0)
18334ff6846SIoana Radulescu #define NH_FLD_DCCP_PORT_DST			BIT(1)
18434ff6846SIoana Radulescu #define NH_FLD_DCCP_ALL_FIELDS			(BIT(2) - 1)
18534ff6846SIoana Radulescu 
18634ff6846SIoana Radulescu /* IPHC fields */
18734ff6846SIoana Radulescu #define NH_FLD_IPHC_CID				BIT(0)
18834ff6846SIoana Radulescu #define NH_FLD_IPHC_CID_TYPE			BIT(1)
18934ff6846SIoana Radulescu #define NH_FLD_IPHC_HCINDEX			BIT(2)
19034ff6846SIoana Radulescu #define NH_FLD_IPHC_GEN				BIT(3)
19134ff6846SIoana Radulescu #define NH_FLD_IPHC_D_BIT			BIT(4)
19234ff6846SIoana Radulescu #define NH_FLD_IPHC_ALL_FIELDS			(BIT(5) - 1)
19334ff6846SIoana Radulescu 
19434ff6846SIoana Radulescu /* SCTP fields */
19534ff6846SIoana Radulescu #define NH_FLD_SCTP_CHUNK_DATA_TYPE		BIT(0)
19634ff6846SIoana Radulescu #define NH_FLD_SCTP_CHUNK_DATA_FLAGS		BIT(1)
19734ff6846SIoana Radulescu #define NH_FLD_SCTP_CHUNK_DATA_LENGTH		BIT(2)
19834ff6846SIoana Radulescu #define NH_FLD_SCTP_CHUNK_DATA_TSN		BIT(3)
19934ff6846SIoana Radulescu #define NH_FLD_SCTP_CHUNK_DATA_STREAM_ID	BIT(4)
20034ff6846SIoana Radulescu #define NH_FLD_SCTP_CHUNK_DATA_STREAM_SQN	BIT(5)
20134ff6846SIoana Radulescu #define NH_FLD_SCTP_CHUNK_DATA_PAYLOAD_PID	BIT(6)
20234ff6846SIoana Radulescu #define NH_FLD_SCTP_CHUNK_DATA_UNORDERED	BIT(7)
20334ff6846SIoana Radulescu #define NH_FLD_SCTP_CHUNK_DATA_BEGGINING	BIT(8)
20434ff6846SIoana Radulescu #define NH_FLD_SCTP_CHUNK_DATA_END		BIT(9)
20534ff6846SIoana Radulescu #define NH_FLD_SCTP_CHUNK_DATA_ALL_FIELDS	(BIT(10) - 1)
20634ff6846SIoana Radulescu 
20734ff6846SIoana Radulescu /* L2TPV2 fields */
20834ff6846SIoana Radulescu #define NH_FLD_L2TPV2_TYPE_BIT			BIT(0)
20934ff6846SIoana Radulescu #define NH_FLD_L2TPV2_LENGTH_BIT		BIT(1)
21034ff6846SIoana Radulescu #define NH_FLD_L2TPV2_SEQUENCE_BIT		BIT(2)
21134ff6846SIoana Radulescu #define NH_FLD_L2TPV2_OFFSET_BIT		BIT(3)
21234ff6846SIoana Radulescu #define NH_FLD_L2TPV2_PRIORITY_BIT		BIT(4)
21334ff6846SIoana Radulescu #define NH_FLD_L2TPV2_VERSION			BIT(5)
21434ff6846SIoana Radulescu #define NH_FLD_L2TPV2_LEN			BIT(6)
21534ff6846SIoana Radulescu #define NH_FLD_L2TPV2_TUNNEL_ID			BIT(7)
21634ff6846SIoana Radulescu #define NH_FLD_L2TPV2_SESSION_ID		BIT(8)
21734ff6846SIoana Radulescu #define NH_FLD_L2TPV2_NS			BIT(9)
21834ff6846SIoana Radulescu #define NH_FLD_L2TPV2_NR			BIT(10)
21934ff6846SIoana Radulescu #define NH_FLD_L2TPV2_OFFSET_SIZE		BIT(11)
22034ff6846SIoana Radulescu #define NH_FLD_L2TPV2_FIRST_BYTE		BIT(12)
22134ff6846SIoana Radulescu #define NH_FLD_L2TPV2_ALL_FIELDS		(BIT(13) - 1)
22234ff6846SIoana Radulescu 
22334ff6846SIoana Radulescu /* L2TPV3 fields */
22434ff6846SIoana Radulescu #define NH_FLD_L2TPV3_CTRL_TYPE_BIT		BIT(0)
22534ff6846SIoana Radulescu #define NH_FLD_L2TPV3_CTRL_LENGTH_BIT		BIT(1)
22634ff6846SIoana Radulescu #define NH_FLD_L2TPV3_CTRL_SEQUENCE_BIT		BIT(2)
22734ff6846SIoana Radulescu #define NH_FLD_L2TPV3_CTRL_VERSION		BIT(3)
22834ff6846SIoana Radulescu #define NH_FLD_L2TPV3_CTRL_LENGTH		BIT(4)
22934ff6846SIoana Radulescu #define NH_FLD_L2TPV3_CTRL_CONTROL		BIT(5)
23034ff6846SIoana Radulescu #define NH_FLD_L2TPV3_CTRL_SENT			BIT(6)
23134ff6846SIoana Radulescu #define NH_FLD_L2TPV3_CTRL_RECV			BIT(7)
23234ff6846SIoana Radulescu #define NH_FLD_L2TPV3_CTRL_FIRST_BYTE		BIT(8)
23334ff6846SIoana Radulescu #define NH_FLD_L2TPV3_CTRL_ALL_FIELDS		(BIT(9) - 1)
23434ff6846SIoana Radulescu 
23534ff6846SIoana Radulescu #define NH_FLD_L2TPV3_SESS_TYPE_BIT		BIT(0)
23634ff6846SIoana Radulescu #define NH_FLD_L2TPV3_SESS_VERSION		BIT(1)
23734ff6846SIoana Radulescu #define NH_FLD_L2TPV3_SESS_ID			BIT(2)
23834ff6846SIoana Radulescu #define NH_FLD_L2TPV3_SESS_COOKIE		BIT(3)
23934ff6846SIoana Radulescu #define NH_FLD_L2TPV3_SESS_ALL_FIELDS		(BIT(4) - 1)
24034ff6846SIoana Radulescu 
24134ff6846SIoana Radulescu /* PPP fields */
24234ff6846SIoana Radulescu #define NH_FLD_PPP_PID				BIT(0)
24334ff6846SIoana Radulescu #define NH_FLD_PPP_COMPRESSED			BIT(1)
24434ff6846SIoana Radulescu #define NH_FLD_PPP_ALL_FIELDS			(BIT(2) - 1)
24534ff6846SIoana Radulescu 
24634ff6846SIoana Radulescu /* PPPoE fields */
24734ff6846SIoana Radulescu #define NH_FLD_PPPOE_VER			BIT(0)
24834ff6846SIoana Radulescu #define NH_FLD_PPPOE_TYPE			BIT(1)
24934ff6846SIoana Radulescu #define NH_FLD_PPPOE_CODE			BIT(2)
25034ff6846SIoana Radulescu #define NH_FLD_PPPOE_SID			BIT(3)
25134ff6846SIoana Radulescu #define NH_FLD_PPPOE_LEN			BIT(4)
25234ff6846SIoana Radulescu #define NH_FLD_PPPOE_SESSION			BIT(5)
25334ff6846SIoana Radulescu #define NH_FLD_PPPOE_PID			BIT(6)
25434ff6846SIoana Radulescu #define NH_FLD_PPPOE_ALL_FIELDS			(BIT(7) - 1)
25534ff6846SIoana Radulescu 
25634ff6846SIoana Radulescu /* PPP-Mux fields */
25734ff6846SIoana Radulescu #define NH_FLD_PPPMUX_PID			BIT(0)
25834ff6846SIoana Radulescu #define NH_FLD_PPPMUX_CKSUM			BIT(1)
25934ff6846SIoana Radulescu #define NH_FLD_PPPMUX_COMPRESSED		BIT(2)
26034ff6846SIoana Radulescu #define NH_FLD_PPPMUX_ALL_FIELDS		(BIT(3) - 1)
26134ff6846SIoana Radulescu 
26234ff6846SIoana Radulescu /* PPP-Mux sub-frame fields */
26334ff6846SIoana Radulescu #define NH_FLD_PPPMUX_SUBFRM_PFF		BIT(0)
26434ff6846SIoana Radulescu #define NH_FLD_PPPMUX_SUBFRM_LXT		BIT(1)
26534ff6846SIoana Radulescu #define NH_FLD_PPPMUX_SUBFRM_LEN		BIT(2)
26634ff6846SIoana Radulescu #define NH_FLD_PPPMUX_SUBFRM_PID		BIT(3)
26734ff6846SIoana Radulescu #define NH_FLD_PPPMUX_SUBFRM_USE_PID		BIT(4)
26834ff6846SIoana Radulescu #define NH_FLD_PPPMUX_SUBFRM_ALL_FIELDS		(BIT(5) - 1)
26934ff6846SIoana Radulescu 
27034ff6846SIoana Radulescu /* LLC fields */
27134ff6846SIoana Radulescu #define NH_FLD_LLC_DSAP				BIT(0)
27234ff6846SIoana Radulescu #define NH_FLD_LLC_SSAP				BIT(1)
27334ff6846SIoana Radulescu #define NH_FLD_LLC_CTRL				BIT(2)
27434ff6846SIoana Radulescu #define NH_FLD_LLC_ALL_FIELDS			(BIT(3) - 1)
27534ff6846SIoana Radulescu 
27634ff6846SIoana Radulescu /* NLPID fields */
27734ff6846SIoana Radulescu #define NH_FLD_NLPID_NLPID			BIT(0)
27834ff6846SIoana Radulescu #define NH_FLD_NLPID_ALL_FIELDS			(BIT(1) - 1)
27934ff6846SIoana Radulescu 
28034ff6846SIoana Radulescu /* SNAP fields */
28134ff6846SIoana Radulescu #define NH_FLD_SNAP_OUI				BIT(0)
28234ff6846SIoana Radulescu #define NH_FLD_SNAP_PID				BIT(1)
28334ff6846SIoana Radulescu #define NH_FLD_SNAP_ALL_FIELDS			(BIT(2) - 1)
28434ff6846SIoana Radulescu 
28534ff6846SIoana Radulescu /* LLC SNAP fields */
28634ff6846SIoana Radulescu #define NH_FLD_LLC_SNAP_TYPE			BIT(0)
28734ff6846SIoana Radulescu #define NH_FLD_LLC_SNAP_ALL_FIELDS		(BIT(1) - 1)
28834ff6846SIoana Radulescu 
28934ff6846SIoana Radulescu /* ARP fields */
29034ff6846SIoana Radulescu #define NH_FLD_ARP_HTYPE			BIT(0)
29134ff6846SIoana Radulescu #define NH_FLD_ARP_PTYPE			BIT(1)
29234ff6846SIoana Radulescu #define NH_FLD_ARP_HLEN				BIT(2)
29334ff6846SIoana Radulescu #define NH_FLD_ARP_PLEN				BIT(3)
29434ff6846SIoana Radulescu #define NH_FLD_ARP_OPER				BIT(4)
29534ff6846SIoana Radulescu #define NH_FLD_ARP_SHA				BIT(5)
29634ff6846SIoana Radulescu #define NH_FLD_ARP_SPA				BIT(6)
29734ff6846SIoana Radulescu #define NH_FLD_ARP_THA				BIT(7)
29834ff6846SIoana Radulescu #define NH_FLD_ARP_TPA				BIT(8)
29934ff6846SIoana Radulescu #define NH_FLD_ARP_ALL_FIELDS			(BIT(9) - 1)
30034ff6846SIoana Radulescu 
30134ff6846SIoana Radulescu /* RFC2684 fields */
30234ff6846SIoana Radulescu #define NH_FLD_RFC2684_LLC			BIT(0)
30334ff6846SIoana Radulescu #define NH_FLD_RFC2684_NLPID			BIT(1)
30434ff6846SIoana Radulescu #define NH_FLD_RFC2684_OUI			BIT(2)
30534ff6846SIoana Radulescu #define NH_FLD_RFC2684_PID			BIT(3)
30634ff6846SIoana Radulescu #define NH_FLD_RFC2684_VPN_OUI			BIT(4)
30734ff6846SIoana Radulescu #define NH_FLD_RFC2684_VPN_IDX			BIT(5)
30834ff6846SIoana Radulescu #define NH_FLD_RFC2684_ALL_FIELDS		(BIT(6) - 1)
30934ff6846SIoana Radulescu 
31034ff6846SIoana Radulescu /* User defined fields */
31134ff6846SIoana Radulescu #define NH_FLD_USER_DEFINED_SRCPORT		BIT(0)
31234ff6846SIoana Radulescu #define NH_FLD_USER_DEFINED_PCDID		BIT(1)
31334ff6846SIoana Radulescu #define NH_FLD_USER_DEFINED_ALL_FIELDS		(BIT(2) - 1)
31434ff6846SIoana Radulescu 
31534ff6846SIoana Radulescu /* Payload fields */
31634ff6846SIoana Radulescu #define NH_FLD_PAYLOAD_BUFFER			BIT(0)
31734ff6846SIoana Radulescu #define NH_FLD_PAYLOAD_SIZE			BIT(1)
31834ff6846SIoana Radulescu #define NH_FLD_MAX_FRM_SIZE			BIT(2)
31934ff6846SIoana Radulescu #define NH_FLD_MIN_FRM_SIZE			BIT(3)
32034ff6846SIoana Radulescu #define NH_FLD_PAYLOAD_TYPE			BIT(4)
32134ff6846SIoana Radulescu #define NH_FLD_FRAME_SIZE			BIT(5)
32234ff6846SIoana Radulescu #define NH_FLD_PAYLOAD_ALL_FIELDS		(BIT(6) - 1)
32334ff6846SIoana Radulescu 
32434ff6846SIoana Radulescu /* GRE fields */
32534ff6846SIoana Radulescu #define NH_FLD_GRE_TYPE				BIT(0)
32634ff6846SIoana Radulescu #define NH_FLD_GRE_ALL_FIELDS			(BIT(1) - 1)
32734ff6846SIoana Radulescu 
32834ff6846SIoana Radulescu /* MINENCAP fields */
32934ff6846SIoana Radulescu #define NH_FLD_MINENCAP_SRC_IP			BIT(0)
33034ff6846SIoana Radulescu #define NH_FLD_MINENCAP_DST_IP			BIT(1)
33134ff6846SIoana Radulescu #define NH_FLD_MINENCAP_TYPE			BIT(2)
33234ff6846SIoana Radulescu #define NH_FLD_MINENCAP_ALL_FIELDS		(BIT(3) - 1)
33334ff6846SIoana Radulescu 
33434ff6846SIoana Radulescu /* IPSEC AH fields */
33534ff6846SIoana Radulescu #define NH_FLD_IPSEC_AH_SPI			BIT(0)
33634ff6846SIoana Radulescu #define NH_FLD_IPSEC_AH_NH			BIT(1)
33734ff6846SIoana Radulescu #define NH_FLD_IPSEC_AH_ALL_FIELDS		(BIT(2) - 1)
33834ff6846SIoana Radulescu 
33934ff6846SIoana Radulescu /* IPSEC ESP fields */
34034ff6846SIoana Radulescu #define NH_FLD_IPSEC_ESP_SPI			BIT(0)
34134ff6846SIoana Radulescu #define NH_FLD_IPSEC_ESP_SEQUENCE_NUM		BIT(1)
34234ff6846SIoana Radulescu #define NH_FLD_IPSEC_ESP_ALL_FIELDS		(BIT(2) - 1)
34334ff6846SIoana Radulescu 
34434ff6846SIoana Radulescu /* MPLS fields */
34534ff6846SIoana Radulescu #define NH_FLD_MPLS_LABEL_STACK			BIT(0)
34634ff6846SIoana Radulescu #define NH_FLD_MPLS_LABEL_STACK_ALL_FIELDS	(BIT(1) - 1)
34734ff6846SIoana Radulescu 
34834ff6846SIoana Radulescu /* MACSEC fields */
34934ff6846SIoana Radulescu #define NH_FLD_MACSEC_SECTAG			BIT(0)
35034ff6846SIoana Radulescu #define NH_FLD_MACSEC_ALL_FIELDS		(BIT(1) - 1)
35134ff6846SIoana Radulescu 
35234ff6846SIoana Radulescu /* GTP fields */
35334ff6846SIoana Radulescu #define NH_FLD_GTP_TEID				BIT(0)
35434ff6846SIoana Radulescu 
35534ff6846SIoana Radulescu /* Supported protocols */
35634ff6846SIoana Radulescu enum net_prot {
35734ff6846SIoana Radulescu 	NET_PROT_NONE = 0,
35834ff6846SIoana Radulescu 	NET_PROT_PAYLOAD,
35934ff6846SIoana Radulescu 	NET_PROT_ETH,
36034ff6846SIoana Radulescu 	NET_PROT_VLAN,
36134ff6846SIoana Radulescu 	NET_PROT_IPV4,
36234ff6846SIoana Radulescu 	NET_PROT_IPV6,
36334ff6846SIoana Radulescu 	NET_PROT_IP,
36434ff6846SIoana Radulescu 	NET_PROT_TCP,
36534ff6846SIoana Radulescu 	NET_PROT_UDP,
36634ff6846SIoana Radulescu 	NET_PROT_UDP_LITE,
36734ff6846SIoana Radulescu 	NET_PROT_IPHC,
36834ff6846SIoana Radulescu 	NET_PROT_SCTP,
36934ff6846SIoana Radulescu 	NET_PROT_SCTP_CHUNK_DATA,
37034ff6846SIoana Radulescu 	NET_PROT_PPPOE,
37134ff6846SIoana Radulescu 	NET_PROT_PPP,
37234ff6846SIoana Radulescu 	NET_PROT_PPPMUX,
37334ff6846SIoana Radulescu 	NET_PROT_PPPMUX_SUBFRM,
37434ff6846SIoana Radulescu 	NET_PROT_L2TPV2,
37534ff6846SIoana Radulescu 	NET_PROT_L2TPV3_CTRL,
37634ff6846SIoana Radulescu 	NET_PROT_L2TPV3_SESS,
37734ff6846SIoana Radulescu 	NET_PROT_LLC,
37834ff6846SIoana Radulescu 	NET_PROT_LLC_SNAP,
37934ff6846SIoana Radulescu 	NET_PROT_NLPID,
38034ff6846SIoana Radulescu 	NET_PROT_SNAP,
38134ff6846SIoana Radulescu 	NET_PROT_MPLS,
38234ff6846SIoana Radulescu 	NET_PROT_IPSEC_AH,
38334ff6846SIoana Radulescu 	NET_PROT_IPSEC_ESP,
38434ff6846SIoana Radulescu 	NET_PROT_UDP_ENC_ESP, /* RFC 3948 */
38534ff6846SIoana Radulescu 	NET_PROT_MACSEC,
38634ff6846SIoana Radulescu 	NET_PROT_GRE,
38734ff6846SIoana Radulescu 	NET_PROT_MINENCAP,
38834ff6846SIoana Radulescu 	NET_PROT_DCCP,
38934ff6846SIoana Radulescu 	NET_PROT_ICMP,
39034ff6846SIoana Radulescu 	NET_PROT_IGMP,
39134ff6846SIoana Radulescu 	NET_PROT_ARP,
39234ff6846SIoana Radulescu 	NET_PROT_CAPWAP_DATA,
39334ff6846SIoana Radulescu 	NET_PROT_CAPWAP_CTRL,
39434ff6846SIoana Radulescu 	NET_PROT_RFC2684,
39534ff6846SIoana Radulescu 	NET_PROT_ICMPV6,
39634ff6846SIoana Radulescu 	NET_PROT_FCOE,
39734ff6846SIoana Radulescu 	NET_PROT_FIP,
39834ff6846SIoana Radulescu 	NET_PROT_ISCSI,
39934ff6846SIoana Radulescu 	NET_PROT_GTP,
40034ff6846SIoana Radulescu 	NET_PROT_USER_DEFINED_L2,
40134ff6846SIoana Radulescu 	NET_PROT_USER_DEFINED_L3,
40234ff6846SIoana Radulescu 	NET_PROT_USER_DEFINED_L4,
40334ff6846SIoana Radulescu 	NET_PROT_USER_DEFINED_L5,
40434ff6846SIoana Radulescu 	NET_PROT_USER_DEFINED_SHIM1,
40534ff6846SIoana Radulescu 	NET_PROT_USER_DEFINED_SHIM2,
40634ff6846SIoana Radulescu 
40734ff6846SIoana Radulescu 	NET_PROT_DUMMY_LAST
40834ff6846SIoana Radulescu };
40934ff6846SIoana Radulescu 
41034ff6846SIoana Radulescu /**
41134ff6846SIoana Radulescu  * struct dpkg_extract - A structure for defining a single extraction
41234ff6846SIoana Radulescu  * @type: Determines how the union below is interpreted:
41334ff6846SIoana Radulescu  *	DPKG_EXTRACT_FROM_HDR: selects 'from_hdr';
41434ff6846SIoana Radulescu  *	DPKG_EXTRACT_FROM_DATA: selects 'from_data';
41534ff6846SIoana Radulescu  *	DPKG_EXTRACT_FROM_PARSE: selects 'from_parse'
41634ff6846SIoana Radulescu  * @extract: Selects extraction method
41734ff6846SIoana Radulescu  * @extract.from_hdr: Used when 'type = DPKG_EXTRACT_FROM_HDR'
41834ff6846SIoana Radulescu  * @extract.from_data: Used when 'type = DPKG_EXTRACT_FROM_DATA'
41934ff6846SIoana Radulescu  * @extract.from_parse:  Used when 'type = DPKG_EXTRACT_FROM_PARSE'
42034ff6846SIoana Radulescu  * @extract.from_hdr.prot: Any of the supported headers
42134ff6846SIoana Radulescu  * @extract.from_hdr.type: Defines the type of header extraction:
42234ff6846SIoana Radulescu  *	DPKG_FROM_HDR: use size & offset below;
42334ff6846SIoana Radulescu  *	DPKG_FROM_FIELD: use field, size and offset below;
42434ff6846SIoana Radulescu  *	DPKG_FULL_FIELD: use field below
42534ff6846SIoana Radulescu  * @extract.from_hdr.field: One of the supported fields (NH_FLD_)
42634ff6846SIoana Radulescu  * @extract.from_hdr.size: Size in bytes
42734ff6846SIoana Radulescu  * @extract.from_hdr.offset: Byte offset
42834ff6846SIoana Radulescu  * @extract.from_hdr.hdr_index: Clear for cases not listed below;
42934ff6846SIoana Radulescu  *	Used for protocols that may have more than a single
43034ff6846SIoana Radulescu  *	header, 0 indicates an outer header;
43134ff6846SIoana Radulescu  *	Supported protocols (possible values):
43234ff6846SIoana Radulescu  *	NET_PROT_VLAN (0, HDR_INDEX_LAST);
43334ff6846SIoana Radulescu  *	NET_PROT_MPLS (0, 1, HDR_INDEX_LAST);
43434ff6846SIoana Radulescu  *	NET_PROT_IP(0, HDR_INDEX_LAST);
43534ff6846SIoana Radulescu  *	NET_PROT_IPv4(0, HDR_INDEX_LAST);
43634ff6846SIoana Radulescu  *	NET_PROT_IPv6(0, HDR_INDEX_LAST);
43734ff6846SIoana Radulescu  * @extract.from_data.size: Size in bytes
43834ff6846SIoana Radulescu  * @extract.from_data.offset: Byte offset
43934ff6846SIoana Radulescu  * @extract.from_parse.size: Size in bytes
44034ff6846SIoana Radulescu  * @extract.from_parse.offset: Byte offset
44134ff6846SIoana Radulescu  * @num_of_byte_masks: Defines the number of valid entries in the array below;
44234ff6846SIoana Radulescu  *		This is	also the number of bytes to be used as masks
44334ff6846SIoana Radulescu  * @masks: Masks parameters
44434ff6846SIoana Radulescu  */
44534ff6846SIoana Radulescu struct dpkg_extract {
44634ff6846SIoana Radulescu 	enum dpkg_extract_type type;
44734ff6846SIoana Radulescu 	union {
44834ff6846SIoana Radulescu 		struct {
44934ff6846SIoana Radulescu 			enum net_prot			prot;
45034ff6846SIoana Radulescu 			enum dpkg_extract_from_hdr_type type;
45134ff6846SIoana Radulescu 			u32			field;
45234ff6846SIoana Radulescu 			u8			size;
45334ff6846SIoana Radulescu 			u8			offset;
45434ff6846SIoana Radulescu 			u8			hdr_index;
45534ff6846SIoana Radulescu 		} from_hdr;
45634ff6846SIoana Radulescu 		struct {
45734ff6846SIoana Radulescu 			u8 size;
45834ff6846SIoana Radulescu 			u8 offset;
45934ff6846SIoana Radulescu 		} from_data;
46034ff6846SIoana Radulescu 		struct {
46134ff6846SIoana Radulescu 			u8 size;
46234ff6846SIoana Radulescu 			u8 offset;
46334ff6846SIoana Radulescu 		} from_parse;
46434ff6846SIoana Radulescu 	} extract;
46534ff6846SIoana Radulescu 
46634ff6846SIoana Radulescu 	u8		num_of_byte_masks;
46734ff6846SIoana Radulescu 	struct dpkg_mask	masks[DPKG_NUM_OF_MASKS];
46834ff6846SIoana Radulescu };
46934ff6846SIoana Radulescu 
47034ff6846SIoana Radulescu /**
47134ff6846SIoana Radulescu  * struct dpkg_profile_cfg - A structure for defining a full Key Generation
47234ff6846SIoana Radulescu  *				profile (rule)
47334ff6846SIoana Radulescu  * @num_extracts: Defines the number of valid entries in the array below
47434ff6846SIoana Radulescu  * @extracts: Array of required extractions
47534ff6846SIoana Radulescu  */
47634ff6846SIoana Radulescu struct dpkg_profile_cfg {
47734ff6846SIoana Radulescu 	u8 num_extracts;
47834ff6846SIoana Radulescu 	struct dpkg_extract extracts[DPKG_MAX_NUM_OF_EXTRACTS];
47934ff6846SIoana Radulescu };
48034ff6846SIoana Radulescu 
48134ff6846SIoana Radulescu #endif /* __FSL_DPKG_H_ */
482