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