18d59ecb2SHans Petter Selasky /*- 28d59ecb2SHans Petter Selasky * Copyright (c) 2010 Isilon Systems, Inc. 38d59ecb2SHans Petter Selasky * Copyright (c) 2010 iX Systems, Inc. 48d59ecb2SHans Petter Selasky * Copyright (c) 2010 Panasas, Inc. 58d59ecb2SHans Petter Selasky * Copyright (c) 2013 Mellanox Technologies, Ltd. 68d59ecb2SHans Petter Selasky * All rights reserved. 78e30f492SBjoern A. Zeeb * Copyright (c) 2021-2022 The FreeBSD Foundation 88e30f492SBjoern A. Zeeb * 98e30f492SBjoern A. Zeeb * Portions of this software were developed by Björn Zeeb 108e30f492SBjoern A. Zeeb * under sponsorship from the FreeBSD Foundation. 118d59ecb2SHans Petter Selasky * 128d59ecb2SHans Petter Selasky * Redistribution and use in source and binary forms, with or without 138d59ecb2SHans Petter Selasky * modification, are permitted provided that the following conditions 148d59ecb2SHans Petter Selasky * are met: 158d59ecb2SHans Petter Selasky * 1. Redistributions of source code must retain the above copyright 168d59ecb2SHans Petter Selasky * notice unmodified, this list of conditions, and the following 178d59ecb2SHans Petter Selasky * disclaimer. 188d59ecb2SHans Petter Selasky * 2. Redistributions in binary form must reproduce the above copyright 198d59ecb2SHans Petter Selasky * notice, this list of conditions and the following disclaimer in the 208d59ecb2SHans Petter Selasky * documentation and/or other materials provided with the distribution. 218d59ecb2SHans Petter Selasky * 228d59ecb2SHans Petter Selasky * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 238d59ecb2SHans Petter Selasky * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 248d59ecb2SHans Petter Selasky * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 258d59ecb2SHans Petter Selasky * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 268d59ecb2SHans Petter Selasky * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 278d59ecb2SHans Petter Selasky * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 288d59ecb2SHans Petter Selasky * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 298d59ecb2SHans Petter Selasky * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 308d59ecb2SHans Petter Selasky * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 318d59ecb2SHans Petter Selasky * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 328d59ecb2SHans Petter Selasky */ 33307f78f3SVladimir Kondratyev #ifndef _LINUXKPI_LINUX_IF_ETHER_H_ 34307f78f3SVladimir Kondratyev #define _LINUXKPI_LINUX_IF_ETHER_H_ 358d59ecb2SHans Petter Selasky 368d59ecb2SHans Petter Selasky #include <linux/types.h> 37*273cf7d3SBjoern A. Zeeb #include <linux/skbuff.h> 388d59ecb2SHans Petter Selasky 398d59ecb2SHans Petter Selasky #include <net/ethernet.h> 408d59ecb2SHans Petter Selasky 418d59ecb2SHans Petter Selasky #define ETH_HLEN ETHER_HDR_LEN /* Total octets in header. */ 428d59ecb2SHans Petter Selasky #ifndef ETH_ALEN 438d59ecb2SHans Petter Selasky #define ETH_ALEN ETHER_ADDR_LEN 448d59ecb2SHans Petter Selasky #endif 453cce818cSBjoern A. Zeeb #define ETH_FRAME_LEN (ETHER_MAX_LEN - ETHER_CRC_LEN) 468d59ecb2SHans Petter Selasky #define ETH_FCS_LEN 4 /* Octets in the FCS */ 478d59ecb2SHans Petter Selasky #define VLAN_HLEN 4 /* The additional bytes (on top of the Ethernet header) 488d59ecb2SHans Petter Selasky * that VLAN requires. */ 498d59ecb2SHans Petter Selasky /* 508d59ecb2SHans Petter Selasky * defined Ethernet Protocol ID's. 518d59ecb2SHans Petter Selasky */ 523cce818cSBjoern A. Zeeb #define ETH_P_ARP ETHERTYPE_ARP 53c2a5dc6cSAndrey V. Elsukov #define ETH_P_IP ETHERTYPE_IP 54c2a5dc6cSAndrey V. Elsukov #define ETH_P_IPV6 ETHERTYPE_IPV6 55c2a5dc6cSAndrey V. Elsukov #define ETH_P_MPLS_UC ETHERTYPE_MPLS 56c2a5dc6cSAndrey V. Elsukov #define ETH_P_MPLS_MC ETHERTYPE_MPLS_MCAST 57c2a5dc6cSAndrey V. Elsukov #define ETH_P_8021Q ETHERTYPE_VLAN 58c2a5dc6cSAndrey V. Elsukov #define ETH_P_8021AD ETHERTYPE_QINQ 593cce818cSBjoern A. Zeeb #define ETH_P_PAE ETHERTYPE_PAE 603cce818cSBjoern A. Zeeb #define ETH_P_802_2 ETHERTYPE_8023 618e30f492SBjoern A. Zeeb #define ETH_P_IPX ETHERTYPE_IPX 628e30f492SBjoern A. Zeeb #define ETH_P_AARP ETHERTYPE_AARP 638e30f492SBjoern A. Zeeb #define ETH_P_802_3_MIN 0x05DD /* See comment in sys/net/ethernet.h */ 643cce818cSBjoern A. Zeeb #define ETH_P_LINK_CTL 0x886C /* ITU-T G.989.2 */ 653cce818cSBjoern A. Zeeb #define ETH_P_TDLS 0x890D /* 802.11z-2010, see wpa. */ 663cce818cSBjoern A. Zeeb 673cce818cSBjoern A. Zeeb struct ethhdr { 683cce818cSBjoern A. Zeeb uint8_t h_dest[ETH_ALEN]; 693cce818cSBjoern A. Zeeb uint8_t h_source[ETH_ALEN]; 703cce818cSBjoern A. Zeeb uint16_t h_proto; 713cce818cSBjoern A. Zeeb } __packed; 728d59ecb2SHans Petter Selasky 73*273cf7d3SBjoern A. Zeeb static inline struct ethhdr * 74*273cf7d3SBjoern A. Zeeb eth_hdr(const struct sk_buff *skb) 75*273cf7d3SBjoern A. Zeeb { 76*273cf7d3SBjoern A. Zeeb struct ethhdr *hdr; 77*273cf7d3SBjoern A. Zeeb 78*273cf7d3SBjoern A. Zeeb hdr = (struct ethhdr *)skb_mac_header(skb); 79*273cf7d3SBjoern A. Zeeb return (hdr); 80*273cf7d3SBjoern A. Zeeb } 81*273cf7d3SBjoern A. Zeeb 82307f78f3SVladimir Kondratyev #endif /* _LINUXKPI_LINUX_IF_ETHER_H_ */ 83