1 /*- 2 * This file is provided under a dual BSD/GPLv2 license. When using or 3 * redistributing this file, you may do so under either license. 4 * 5 * BSD LICENSE 6 * 7 * Copyright 2013-2015 Freescale Semiconductor Inc. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions are met: 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * * Neither the name of the above-listed copyright holders nor the 17 * names of any contributors may be used to endorse or promote products 18 * derived from this software without specific prior written permission. 19 * 20 * GPL LICENSE SUMMARY 21 * 22 * ALTERNATIVELY, this software may be distributed under the terms of the 23 * GNU General Public License ("GPL") as published by the Free Software 24 * Foundation, either version 2 of that License or (at your option) any 25 * later version. 26 * 27 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 28 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 31 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 32 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 33 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 34 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 35 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 36 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 * POSSIBILITY OF SUCH DAMAGE. 38 */ 39 #ifndef __FSL_NET_H 40 #define __FSL_NET_H 41 42 #define LAST_HDR_INDEX 0xFFFFFFFF 43 44 /*****************************************************************************/ 45 /* Protocol fields */ 46 /*****************************************************************************/ 47 48 /************************* Ethernet fields *********************************/ 49 #define NH_FLD_ETH_DA (1) 50 #define NH_FLD_ETH_SA (NH_FLD_ETH_DA << 1) 51 #define NH_FLD_ETH_LENGTH (NH_FLD_ETH_DA << 2) 52 #define NH_FLD_ETH_TYPE (NH_FLD_ETH_DA << 3) 53 #define NH_FLD_ETH_FINAL_CKSUM (NH_FLD_ETH_DA << 4) 54 #define NH_FLD_ETH_PADDING (NH_FLD_ETH_DA << 5) 55 #define NH_FLD_ETH_ALL_FIELDS ((NH_FLD_ETH_DA << 6) - 1) 56 57 #define NH_FLD_ETH_ADDR_SIZE 6 58 59 /*************************** VLAN fields ***********************************/ 60 #define NH_FLD_VLAN_VPRI (1) 61 #define NH_FLD_VLAN_CFI (NH_FLD_VLAN_VPRI << 1) 62 #define NH_FLD_VLAN_VID (NH_FLD_VLAN_VPRI << 2) 63 #define NH_FLD_VLAN_LENGTH (NH_FLD_VLAN_VPRI << 3) 64 #define NH_FLD_VLAN_TYPE (NH_FLD_VLAN_VPRI << 4) 65 #define NH_FLD_VLAN_ALL_FIELDS ((NH_FLD_VLAN_VPRI << 5) - 1) 66 67 #define NH_FLD_VLAN_TCI (NH_FLD_VLAN_VPRI | \ 68 NH_FLD_VLAN_CFI | \ 69 NH_FLD_VLAN_VID) 70 71 /************************ IP (generic) fields ******************************/ 72 #define NH_FLD_IP_VER (1) 73 #define NH_FLD_IP_DSCP (NH_FLD_IP_VER << 2) 74 #define NH_FLD_IP_ECN (NH_FLD_IP_VER << 3) 75 #define NH_FLD_IP_PROTO (NH_FLD_IP_VER << 4) 76 #define NH_FLD_IP_SRC (NH_FLD_IP_VER << 5) 77 #define NH_FLD_IP_DST (NH_FLD_IP_VER << 6) 78 #define NH_FLD_IP_TOS_TC (NH_FLD_IP_VER << 7) 79 #define NH_FLD_IP_ID (NH_FLD_IP_VER << 8) 80 #define NH_FLD_IP_ALL_FIELDS ((NH_FLD_IP_VER << 9) - 1) 81 82 #define NH_FLD_IP_PROTO_SIZE 1 83 84 /***************************** IPV4 fields *********************************/ 85 #define NH_FLD_IPV4_VER (1) 86 #define NH_FLD_IPV4_HDR_LEN (NH_FLD_IPV4_VER << 1) 87 #define NH_FLD_IPV4_TOS (NH_FLD_IPV4_VER << 2) 88 #define NH_FLD_IPV4_TOTAL_LEN (NH_FLD_IPV4_VER << 3) 89 #define NH_FLD_IPV4_ID (NH_FLD_IPV4_VER << 4) 90 #define NH_FLD_IPV4_FLAG_D (NH_FLD_IPV4_VER << 5) 91 #define NH_FLD_IPV4_FLAG_M (NH_FLD_IPV4_VER << 6) 92 #define NH_FLD_IPV4_OFFSET (NH_FLD_IPV4_VER << 7) 93 #define NH_FLD_IPV4_TTL (NH_FLD_IPV4_VER << 8) 94 #define NH_FLD_IPV4_PROTO (NH_FLD_IPV4_VER << 9) 95 #define NH_FLD_IPV4_CKSUM (NH_FLD_IPV4_VER << 10) 96 #define NH_FLD_IPV4_SRC_IP (NH_FLD_IPV4_VER << 11) 97 #define NH_FLD_IPV4_DST_IP (NH_FLD_IPV4_VER << 12) 98 #define NH_FLD_IPV4_OPTS (NH_FLD_IPV4_VER << 13) 99 #define NH_FLD_IPV4_OPTS_COUNT (NH_FLD_IPV4_VER << 14) 100 #define NH_FLD_IPV4_ALL_FIELDS ((NH_FLD_IPV4_VER << 15) - 1) 101 102 #define NH_FLD_IPV4_ADDR_SIZE 4 103 #define NH_FLD_IPV4_PROTO_SIZE 1 104 105 /***************************** IPV6 fields *********************************/ 106 #define NH_FLD_IPV6_VER (1) 107 #define NH_FLD_IPV6_TC (NH_FLD_IPV6_VER << 1) 108 #define NH_FLD_IPV6_SRC_IP (NH_FLD_IPV6_VER << 2) 109 #define NH_FLD_IPV6_DST_IP (NH_FLD_IPV6_VER << 3) 110 #define NH_FLD_IPV6_NEXT_HDR (NH_FLD_IPV6_VER << 4) 111 #define NH_FLD_IPV6_FL (NH_FLD_IPV6_VER << 5) 112 #define NH_FLD_IPV6_HOP_LIMIT (NH_FLD_IPV6_VER << 6) 113 #define NH_FLD_IPV6_ID (NH_FLD_IPV6_VER << 7) 114 #define NH_FLD_IPV6_ALL_FIELDS ((NH_FLD_IPV6_VER << 8) - 1) 115 116 #define NH_FLD_IPV6_ADDR_SIZE 16 117 #define NH_FLD_IPV6_NEXT_HDR_SIZE 1 118 119 /***************************** ICMP fields *********************************/ 120 #define NH_FLD_ICMP_TYPE (1) 121 #define NH_FLD_ICMP_CODE (NH_FLD_ICMP_TYPE << 1) 122 #define NH_FLD_ICMP_CKSUM (NH_FLD_ICMP_TYPE << 2) 123 #define NH_FLD_ICMP_ID (NH_FLD_ICMP_TYPE << 3) 124 #define NH_FLD_ICMP_SQ_NUM (NH_FLD_ICMP_TYPE << 4) 125 #define NH_FLD_ICMP_ALL_FIELDS ((NH_FLD_ICMP_TYPE << 5) - 1) 126 127 #define NH_FLD_ICMP_CODE_SIZE 1 128 #define NH_FLD_ICMP_TYPE_SIZE 1 129 130 /***************************** IGMP fields *********************************/ 131 #define NH_FLD_IGMP_VERSION (1) 132 #define NH_FLD_IGMP_TYPE (NH_FLD_IGMP_VERSION << 1) 133 #define NH_FLD_IGMP_CKSUM (NH_FLD_IGMP_VERSION << 2) 134 #define NH_FLD_IGMP_DATA (NH_FLD_IGMP_VERSION << 3) 135 #define NH_FLD_IGMP_ALL_FIELDS ((NH_FLD_IGMP_VERSION << 4) - 1) 136 137 /***************************** TCP fields **********************************/ 138 #define NH_FLD_TCP_PORT_SRC (1) 139 #define NH_FLD_TCP_PORT_DST (NH_FLD_TCP_PORT_SRC << 1) 140 #define NH_FLD_TCP_SEQ (NH_FLD_TCP_PORT_SRC << 2) 141 #define NH_FLD_TCP_ACK (NH_FLD_TCP_PORT_SRC << 3) 142 #define NH_FLD_TCP_OFFSET (NH_FLD_TCP_PORT_SRC << 4) 143 #define NH_FLD_TCP_FLAGS (NH_FLD_TCP_PORT_SRC << 5) 144 #define NH_FLD_TCP_WINDOW (NH_FLD_TCP_PORT_SRC << 6) 145 #define NH_FLD_TCP_CKSUM (NH_FLD_TCP_PORT_SRC << 7) 146 #define NH_FLD_TCP_URGPTR (NH_FLD_TCP_PORT_SRC << 8) 147 #define NH_FLD_TCP_OPTS (NH_FLD_TCP_PORT_SRC << 9) 148 #define NH_FLD_TCP_OPTS_COUNT (NH_FLD_TCP_PORT_SRC << 10) 149 #define NH_FLD_TCP_ALL_FIELDS ((NH_FLD_TCP_PORT_SRC << 11) - 1) 150 151 #define NH_FLD_TCP_PORT_SIZE 2 152 153 /***************************** UDP fields **********************************/ 154 #define NH_FLD_UDP_PORT_SRC (1) 155 #define NH_FLD_UDP_PORT_DST (NH_FLD_UDP_PORT_SRC << 1) 156 #define NH_FLD_UDP_LEN (NH_FLD_UDP_PORT_SRC << 2) 157 #define NH_FLD_UDP_CKSUM (NH_FLD_UDP_PORT_SRC << 3) 158 #define NH_FLD_UDP_ALL_FIELDS ((NH_FLD_UDP_PORT_SRC << 4) - 1) 159 160 #define NH_FLD_UDP_PORT_SIZE 2 161 162 /*************************** UDP-lite fields *******************************/ 163 #define NH_FLD_UDP_LITE_PORT_SRC (1) 164 #define NH_FLD_UDP_LITE_PORT_DST (NH_FLD_UDP_LITE_PORT_SRC << 1) 165 #define NH_FLD_UDP_LITE_ALL_FIELDS \ 166 ((NH_FLD_UDP_LITE_PORT_SRC << 2) - 1) 167 168 #define NH_FLD_UDP_LITE_PORT_SIZE 2 169 170 /*************************** UDP-encap-ESP fields **************************/ 171 #define NH_FLD_UDP_ENC_ESP_PORT_SRC (1) 172 #define NH_FLD_UDP_ENC_ESP_PORT_DST (NH_FLD_UDP_ENC_ESP_PORT_SRC << 1) 173 #define NH_FLD_UDP_ENC_ESP_LEN (NH_FLD_UDP_ENC_ESP_PORT_SRC << 2) 174 #define NH_FLD_UDP_ENC_ESP_CKSUM (NH_FLD_UDP_ENC_ESP_PORT_SRC << 3) 175 #define NH_FLD_UDP_ENC_ESP_SPI (NH_FLD_UDP_ENC_ESP_PORT_SRC << 4) 176 #define NH_FLD_UDP_ENC_ESP_SEQUENCE_NUM (NH_FLD_UDP_ENC_ESP_PORT_SRC << 5) 177 #define NH_FLD_UDP_ENC_ESP_ALL_FIELDS \ 178 ((NH_FLD_UDP_ENC_ESP_PORT_SRC << 6) - 1) 179 180 #define NH_FLD_UDP_ENC_ESP_PORT_SIZE 2 181 #define NH_FLD_UDP_ENC_ESP_SPI_SIZE 4 182 183 /***************************** SCTP fields *********************************/ 184 #define NH_FLD_SCTP_PORT_SRC (1) 185 #define NH_FLD_SCTP_PORT_DST (NH_FLD_SCTP_PORT_SRC << 1) 186 #define NH_FLD_SCTP_VER_TAG (NH_FLD_SCTP_PORT_SRC << 2) 187 #define NH_FLD_SCTP_CKSUM (NH_FLD_SCTP_PORT_SRC << 3) 188 #define NH_FLD_SCTP_ALL_FIELDS ((NH_FLD_SCTP_PORT_SRC << 4) - 1) 189 190 #define NH_FLD_SCTP_PORT_SIZE 2 191 192 /***************************** DCCP fields *********************************/ 193 #define NH_FLD_DCCP_PORT_SRC (1) 194 #define NH_FLD_DCCP_PORT_DST (NH_FLD_DCCP_PORT_SRC << 1) 195 #define NH_FLD_DCCP_ALL_FIELDS ((NH_FLD_DCCP_PORT_SRC << 2) - 1) 196 197 #define NH_FLD_DCCP_PORT_SIZE 2 198 199 /***************************** IPHC fields *********************************/ 200 #define NH_FLD_IPHC_CID (1) 201 #define NH_FLD_IPHC_CID_TYPE (NH_FLD_IPHC_CID << 1) 202 #define NH_FLD_IPHC_HCINDEX (NH_FLD_IPHC_CID << 2) 203 #define NH_FLD_IPHC_GEN (NH_FLD_IPHC_CID << 3) 204 #define NH_FLD_IPHC_D_BIT (NH_FLD_IPHC_CID << 4) 205 #define NH_FLD_IPHC_ALL_FIELDS ((NH_FLD_IPHC_CID << 5) - 1) 206 207 /***************************** SCTP fields *********************************/ 208 #define NH_FLD_SCTP_CHUNK_DATA_TYPE (1) 209 #define NH_FLD_SCTP_CHUNK_DATA_FLAGS (NH_FLD_SCTP_CHUNK_DATA_TYPE << 1) 210 #define NH_FLD_SCTP_CHUNK_DATA_LENGTH (NH_FLD_SCTP_CHUNK_DATA_TYPE << 2) 211 #define NH_FLD_SCTP_CHUNK_DATA_TSN (NH_FLD_SCTP_CHUNK_DATA_TYPE << 3) 212 #define NH_FLD_SCTP_CHUNK_DATA_STREAM_ID (NH_FLD_SCTP_CHUNK_DATA_TYPE << 4) 213 #define NH_FLD_SCTP_CHUNK_DATA_STREAM_SQN (NH_FLD_SCTP_CHUNK_DATA_TYPE << 5) 214 #define NH_FLD_SCTP_CHUNK_DATA_PAYLOAD_PID (NH_FLD_SCTP_CHUNK_DATA_TYPE << 6) 215 #define NH_FLD_SCTP_CHUNK_DATA_UNORDERED (NH_FLD_SCTP_CHUNK_DATA_TYPE << 7) 216 #define NH_FLD_SCTP_CHUNK_DATA_BEGGINNING (NH_FLD_SCTP_CHUNK_DATA_TYPE << 8) 217 #define NH_FLD_SCTP_CHUNK_DATA_END (NH_FLD_SCTP_CHUNK_DATA_TYPE << 9) 218 #define NH_FLD_SCTP_CHUNK_DATA_ALL_FIELDS \ 219 ((NH_FLD_SCTP_CHUNK_DATA_TYPE << 10) - 1) 220 221 /*************************** L2TPV2 fields *********************************/ 222 #define NH_FLD_L2TPV2_TYPE_BIT (1) 223 #define NH_FLD_L2TPV2_LENGTH_BIT (NH_FLD_L2TPV2_TYPE_BIT << 1) 224 #define NH_FLD_L2TPV2_SEQUENCE_BIT (NH_FLD_L2TPV2_TYPE_BIT << 2) 225 #define NH_FLD_L2TPV2_OFFSET_BIT (NH_FLD_L2TPV2_TYPE_BIT << 3) 226 #define NH_FLD_L2TPV2_PRIORITY_BIT (NH_FLD_L2TPV2_TYPE_BIT << 4) 227 #define NH_FLD_L2TPV2_VERSION (NH_FLD_L2TPV2_TYPE_BIT << 5) 228 #define NH_FLD_L2TPV2_LEN (NH_FLD_L2TPV2_TYPE_BIT << 6) 229 #define NH_FLD_L2TPV2_TUNNEL_ID (NH_FLD_L2TPV2_TYPE_BIT << 7) 230 #define NH_FLD_L2TPV2_SESSION_ID (NH_FLD_L2TPV2_TYPE_BIT << 8) 231 #define NH_FLD_L2TPV2_NS (NH_FLD_L2TPV2_TYPE_BIT << 9) 232 #define NH_FLD_L2TPV2_NR (NH_FLD_L2TPV2_TYPE_BIT << 10) 233 #define NH_FLD_L2TPV2_OFFSET_SIZE (NH_FLD_L2TPV2_TYPE_BIT << 11) 234 #define NH_FLD_L2TPV2_FIRST_BYTE (NH_FLD_L2TPV2_TYPE_BIT << 12) 235 #define NH_FLD_L2TPV2_ALL_FIELDS \ 236 ((NH_FLD_L2TPV2_TYPE_BIT << 13) - 1) 237 238 /*************************** L2TPV3 fields *********************************/ 239 #define NH_FLD_L2TPV3_CTRL_TYPE_BIT (1) 240 #define NH_FLD_L2TPV3_CTRL_LENGTH_BIT (NH_FLD_L2TPV3_CTRL_TYPE_BIT << 1) 241 #define NH_FLD_L2TPV3_CTRL_SEQUENCE_BIT (NH_FLD_L2TPV3_CTRL_TYPE_BIT << 2) 242 #define NH_FLD_L2TPV3_CTRL_VERSION (NH_FLD_L2TPV3_CTRL_TYPE_BIT << 3) 243 #define NH_FLD_L2TPV3_CTRL_LENGTH (NH_FLD_L2TPV3_CTRL_TYPE_BIT << 4) 244 #define NH_FLD_L2TPV3_CTRL_CONTROL (NH_FLD_L2TPV3_CTRL_TYPE_BIT << 5) 245 #define NH_FLD_L2TPV3_CTRL_SENT (NH_FLD_L2TPV3_CTRL_TYPE_BIT << 6) 246 #define NH_FLD_L2TPV3_CTRL_RECV (NH_FLD_L2TPV3_CTRL_TYPE_BIT << 7) 247 #define NH_FLD_L2TPV3_CTRL_FIRST_BYTE (NH_FLD_L2TPV3_CTRL_TYPE_BIT << 8) 248 #define NH_FLD_L2TPV3_CTRL_ALL_FIELDS \ 249 ((NH_FLD_L2TPV3_CTRL_TYPE_BIT << 9) - 1) 250 251 #define NH_FLD_L2TPV3_SESS_TYPE_BIT (1) 252 #define NH_FLD_L2TPV3_SESS_VERSION (NH_FLD_L2TPV3_SESS_TYPE_BIT << 1) 253 #define NH_FLD_L2TPV3_SESS_ID (NH_FLD_L2TPV3_SESS_TYPE_BIT << 2) 254 #define NH_FLD_L2TPV3_SESS_COOKIE (NH_FLD_L2TPV3_SESS_TYPE_BIT << 3) 255 #define NH_FLD_L2TPV3_SESS_ALL_FIELDS \ 256 ((NH_FLD_L2TPV3_SESS_TYPE_BIT << 4) - 1) 257 258 /**************************** PPP fields ***********************************/ 259 #define NH_FLD_PPP_PID (1) 260 #define NH_FLD_PPP_COMPRESSED (NH_FLD_PPP_PID << 1) 261 #define NH_FLD_PPP_ALL_FIELDS ((NH_FLD_PPP_PID << 2) - 1) 262 263 /************************** PPPoE fields ***********************************/ 264 #define NH_FLD_PPPOE_VER (1) 265 #define NH_FLD_PPPOE_TYPE (NH_FLD_PPPOE_VER << 1) 266 #define NH_FLD_PPPOE_CODE (NH_FLD_PPPOE_VER << 2) 267 #define NH_FLD_PPPOE_SID (NH_FLD_PPPOE_VER << 3) 268 #define NH_FLD_PPPOE_LEN (NH_FLD_PPPOE_VER << 4) 269 #define NH_FLD_PPPOE_SESSION (NH_FLD_PPPOE_VER << 5) 270 #define NH_FLD_PPPOE_PID (NH_FLD_PPPOE_VER << 6) 271 #define NH_FLD_PPPOE_ALL_FIELDS ((NH_FLD_PPPOE_VER << 7) - 1) 272 273 /************************* PPP-Mux fields **********************************/ 274 #define NH_FLD_PPPMUX_PID (1) 275 #define NH_FLD_PPPMUX_CKSUM (NH_FLD_PPPMUX_PID << 1) 276 #define NH_FLD_PPPMUX_COMPRESSED (NH_FLD_PPPMUX_PID << 2) 277 #define NH_FLD_PPPMUX_ALL_FIELDS ((NH_FLD_PPPMUX_PID << 3) - 1) 278 279 /*********************** PPP-Mux sub-frame fields **************************/ 280 #define NH_FLD_PPPMUX_SUBFRM_PFF (1) 281 #define NH_FLD_PPPMUX_SUBFRM_LXT (NH_FLD_PPPMUX_SUBFRM_PFF << 1) 282 #define NH_FLD_PPPMUX_SUBFRM_LEN (NH_FLD_PPPMUX_SUBFRM_PFF << 2) 283 #define NH_FLD_PPPMUX_SUBFRM_PID (NH_FLD_PPPMUX_SUBFRM_PFF << 3) 284 #define NH_FLD_PPPMUX_SUBFRM_USE_PID (NH_FLD_PPPMUX_SUBFRM_PFF << 4) 285 #define NH_FLD_PPPMUX_SUBFRM_ALL_FIELDS \ 286 ((NH_FLD_PPPMUX_SUBFRM_PFF << 5) - 1) 287 288 /*************************** LLC fields ************************************/ 289 #define NH_FLD_LLC_DSAP (1) 290 #define NH_FLD_LLC_SSAP (NH_FLD_LLC_DSAP << 1) 291 #define NH_FLD_LLC_CTRL (NH_FLD_LLC_DSAP << 2) 292 #define NH_FLD_LLC_ALL_FIELDS ((NH_FLD_LLC_DSAP << 3) - 1) 293 294 /*************************** NLPID fields **********************************/ 295 #define NH_FLD_NLPID_NLPID (1) 296 #define NH_FLD_NLPID_ALL_FIELDS ((NH_FLD_NLPID_NLPID << 1) - 1) 297 298 /*************************** SNAP fields ***********************************/ 299 #define NH_FLD_SNAP_OUI (1) 300 #define NH_FLD_SNAP_PID (NH_FLD_SNAP_OUI << 1) 301 #define NH_FLD_SNAP_ALL_FIELDS ((NH_FLD_SNAP_OUI << 2) - 1) 302 303 /*************************** LLC SNAP fields *******************************/ 304 #define NH_FLD_LLC_SNAP_TYPE (1) 305 #define NH_FLD_LLC_SNAP_ALL_FIELDS ((NH_FLD_LLC_SNAP_TYPE << 1) - 1) 306 307 #define NH_FLD_ARP_HTYPE (1) 308 #define NH_FLD_ARP_PTYPE (NH_FLD_ARP_HTYPE << 1) 309 #define NH_FLD_ARP_HLEN (NH_FLD_ARP_HTYPE << 2) 310 #define NH_FLD_ARP_PLEN (NH_FLD_ARP_HTYPE << 3) 311 #define NH_FLD_ARP_OPER (NH_FLD_ARP_HTYPE << 4) 312 #define NH_FLD_ARP_SHA (NH_FLD_ARP_HTYPE << 5) 313 #define NH_FLD_ARP_SPA (NH_FLD_ARP_HTYPE << 6) 314 #define NH_FLD_ARP_THA (NH_FLD_ARP_HTYPE << 7) 315 #define NH_FLD_ARP_TPA (NH_FLD_ARP_HTYPE << 8) 316 #define NH_FLD_ARP_ALL_FIELDS ((NH_FLD_ARP_HTYPE << 9) - 1) 317 318 /*************************** RFC2684 fields ********************************/ 319 #define NH_FLD_RFC2684_LLC (1) 320 #define NH_FLD_RFC2684_NLPID (NH_FLD_RFC2684_LLC << 1) 321 #define NH_FLD_RFC2684_OUI (NH_FLD_RFC2684_LLC << 2) 322 #define NH_FLD_RFC2684_PID (NH_FLD_RFC2684_LLC << 3) 323 #define NH_FLD_RFC2684_VPN_OUI (NH_FLD_RFC2684_LLC << 4) 324 #define NH_FLD_RFC2684_VPN_IDX (NH_FLD_RFC2684_LLC << 5) 325 #define NH_FLD_RFC2684_ALL_FIELDS ((NH_FLD_RFC2684_LLC << 6) - 1) 326 327 /*************************** User defined fields ***************************/ 328 #define NH_FLD_USER_DEFINED_SRCPORT (1) 329 #define NH_FLD_USER_DEFINED_PCDID (NH_FLD_USER_DEFINED_SRCPORT << 1) 330 #define NH_FLD_USER_DEFINED_ALL_FIELDS \ 331 ((NH_FLD_USER_DEFINED_SRCPORT << 2) - 1) 332 333 /*************************** Payload fields ********************************/ 334 #define NH_FLD_PAYLOAD_BUFFER (1) 335 #define NH_FLD_PAYLOAD_SIZE (NH_FLD_PAYLOAD_BUFFER << 1) 336 #define NH_FLD_MAX_FRM_SIZE (NH_FLD_PAYLOAD_BUFFER << 2) 337 #define NH_FLD_MIN_FRM_SIZE (NH_FLD_PAYLOAD_BUFFER << 3) 338 #define NH_FLD_PAYLOAD_TYPE (NH_FLD_PAYLOAD_BUFFER << 4) 339 #define NH_FLD_FRAME_SIZE (NH_FLD_PAYLOAD_BUFFER << 5) 340 #define NH_FLD_PAYLOAD_ALL_FIELDS ((NH_FLD_PAYLOAD_BUFFER << 6) - 1) 341 342 /*************************** GRE fields ************************************/ 343 #define NH_FLD_GRE_TYPE (1) 344 #define NH_FLD_GRE_ALL_FIELDS ((NH_FLD_GRE_TYPE << 1) - 1) 345 346 /*************************** MINENCAP fields *******************************/ 347 #define NH_FLD_MINENCAP_SRC_IP (1) 348 #define NH_FLD_MINENCAP_DST_IP (NH_FLD_MINENCAP_SRC_IP << 1) 349 #define NH_FLD_MINENCAP_TYPE (NH_FLD_MINENCAP_SRC_IP << 2) 350 #define NH_FLD_MINENCAP_ALL_FIELDS \ 351 ((NH_FLD_MINENCAP_SRC_IP << 3) - 1) 352 353 /*************************** IPSEC AH fields *******************************/ 354 #define NH_FLD_IPSEC_AH_SPI (1) 355 #define NH_FLD_IPSEC_AH_NH (NH_FLD_IPSEC_AH_SPI << 1) 356 #define NH_FLD_IPSEC_AH_ALL_FIELDS ((NH_FLD_IPSEC_AH_SPI << 2) - 1) 357 358 /*************************** IPSEC ESP fields ******************************/ 359 #define NH_FLD_IPSEC_ESP_SPI (1) 360 #define NH_FLD_IPSEC_ESP_SEQUENCE_NUM (NH_FLD_IPSEC_ESP_SPI << 1) 361 #define NH_FLD_IPSEC_ESP_ALL_FIELDS ((NH_FLD_IPSEC_ESP_SPI << 2) - 1) 362 363 #define NH_FLD_IPSEC_ESP_SPI_SIZE 4 364 365 /*************************** MPLS fields ***********************************/ 366 #define NH_FLD_MPLS_LABEL_STACK (1) 367 #define NH_FLD_MPLS_LABEL_STACK_ALL_FIELDS \ 368 ((NH_FLD_MPLS_LABEL_STACK << 1) - 1) 369 370 /*************************** MACSEC fields *********************************/ 371 #define NH_FLD_MACSEC_SECTAG (1) 372 #define NH_FLD_MACSEC_ALL_FIELDS ((NH_FLD_MACSEC_SECTAG << 1) - 1) 373 374 /*************************** GTP fields ************************************/ 375 #define NH_FLD_GTP_TEID (1) 376 377 /* Protocol options */ 378 379 /* Ethernet options */ 380 #define NH_OPT_ETH_BROADCAST 1 381 #define NH_OPT_ETH_MULTICAST 2 382 #define NH_OPT_ETH_UNICAST 3 383 #define NH_OPT_ETH_BPDU 4 384 385 #define NH_ETH_IS_MULTICAST_ADDR(addr) (addr[0] & 0x01) 386 /* also applicable for broadcast */ 387 388 /* VLAN options */ 389 #define NH_OPT_VLAN_CFI 1 390 391 /* IPV4 options */ 392 #define NH_OPT_IPV4_UNICAST 1 393 #define NH_OPT_IPV4_MULTICAST 2 394 #define NH_OPT_IPV4_BROADCAST 3 395 #define NH_OPT_IPV4_OPTION 4 396 #define NH_OPT_IPV4_FRAG 5 397 #define NH_OPT_IPV4_INITIAL_FRAG 6 398 399 /* IPV6 options */ 400 #define NH_OPT_IPV6_UNICAST 1 401 #define NH_OPT_IPV6_MULTICAST 2 402 #define NH_OPT_IPV6_OPTION 3 403 #define NH_OPT_IPV6_FRAG 4 404 #define NH_OPT_IPV6_INITIAL_FRAG 5 405 406 /* General IP options (may be used for any version) */ 407 #define NH_OPT_IP_FRAG 1 408 #define NH_OPT_IP_INITIAL_FRAG 2 409 #define NH_OPT_IP_OPTION 3 410 411 /* Minenc. options */ 412 #define NH_OPT_MINENCAP_SRC_ADDR_PRESENT 1 413 414 /* GRE. options */ 415 #define NH_OPT_GRE_ROUTING_PRESENT 1 416 417 /* TCP options */ 418 #define NH_OPT_TCP_OPTIONS 1 419 #define NH_OPT_TCP_CONTROL_HIGH_BITS 2 420 #define NH_OPT_TCP_CONTROL_LOW_BITS 3 421 422 /* CAPWAP options */ 423 #define NH_OPT_CAPWAP_DTLS 1 424 425 enum net_prot { 426 NET_PROT_NONE = 0, 427 NET_PROT_PAYLOAD, 428 NET_PROT_ETH, 429 NET_PROT_VLAN, 430 NET_PROT_IPV4, 431 NET_PROT_IPV6, 432 NET_PROT_IP, 433 NET_PROT_TCP, 434 NET_PROT_UDP, 435 NET_PROT_UDP_LITE, 436 NET_PROT_IPHC, 437 NET_PROT_SCTP, 438 NET_PROT_SCTP_CHUNK_DATA, 439 NET_PROT_PPPOE, 440 NET_PROT_PPP, 441 NET_PROT_PPPMUX, 442 NET_PROT_PPPMUX_SUBFRM, 443 NET_PROT_L2TPV2, 444 NET_PROT_L2TPV3_CTRL, 445 NET_PROT_L2TPV3_SESS, 446 NET_PROT_LLC, 447 NET_PROT_LLC_SNAP, 448 NET_PROT_NLPID, 449 NET_PROT_SNAP, 450 NET_PROT_MPLS, 451 NET_PROT_IPSEC_AH, 452 NET_PROT_IPSEC_ESP, 453 NET_PROT_UDP_ENC_ESP, /* RFC 3948 */ 454 NET_PROT_MACSEC, 455 NET_PROT_GRE, 456 NET_PROT_MINENCAP, 457 NET_PROT_DCCP, 458 NET_PROT_ICMP, 459 NET_PROT_IGMP, 460 NET_PROT_ARP, 461 NET_PROT_CAPWAP_DATA, 462 NET_PROT_CAPWAP_CTRL, 463 NET_PROT_RFC2684, 464 NET_PROT_ICMPV6, 465 NET_PROT_FCOE, 466 NET_PROT_FIP, 467 NET_PROT_ISCSI, 468 NET_PROT_GTP, 469 NET_PROT_USER_DEFINED_L2, 470 NET_PROT_USER_DEFINED_L3, 471 NET_PROT_USER_DEFINED_L4, 472 NET_PROT_USER_DEFINED_L5, 473 NET_PROT_USER_DEFINED_SHIM1, 474 NET_PROT_USER_DEFINED_SHIM2, 475 476 NET_PROT_DUMMY_LAST 477 }; 478 479 /*! IEEE8021.Q */ 480 #define NH_IEEE8021Q_ETYPE 0x8100 481 #define NH_IEEE8021Q_HDR(etype, pcp, dei, vlan_id) \ 482 ((((uint32_t)(etype & 0xFFFF)) << 16) | \ 483 (((uint32_t)(pcp & 0x07)) << 13) | \ 484 (((uint32_t)(dei & 0x01)) << 12) | \ 485 (((uint32_t)(vlan_id & 0xFFF)))) 486 487 #endif /* __FSL_NET_H */ 488