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