xref: /freebsd-src/sys/compat/linuxkpi/common/include/linux/if_ether.h (revision 273cf7d36336eeed5fc2ad42e5e12a36e36650a0)
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