| 1 | /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ |
| 2 | /* |
| 3 | * INET		An implementation of the TCP/IP protocol suite for the LINUX |
| 4 | *		operating system. INET is implemented using the BSD Socket |
| 5 | *		interface as the means of communication with the user level. |
| 6 | * |
| 7 | *		Global definitions for the Ethernet IEEE 802.3 interface. |
| 8 | * |
| 9 | * Version:	@(#)if_ether.h	1.0.1a	02/08/94 |
| 10 | * |
| 11 | * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> |
| 12 | *		Donald Becker, <becker@super.org> |
| 13 | *		Alan Cox, <alan@lxorguk.ukuu.org.uk> |
| 14 | *		Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk> |
| 15 | * |
| 16 | *		This program is free software; you can redistribute it and/or |
| 17 | *		modify it under the terms of the GNU General Public License |
| 18 | *		as published by the Free Software Foundation; either version |
| 19 | *		2 of the License, or (at your option) any later version. |
| 20 | */ |
| 21 | |
| 22 | #ifndef _LINUX_IF_ETHER_H |
| 23 | #define _LINUX_IF_ETHER_H |
| 24 | |
| 25 | #include <linux/types.h> |
| 26 | |
| 27 | /* |
| 28 | *	IEEE 802.3 Ethernet magic constants. The frame sizes omit the preamble |
| 29 | *	and FCS/CRC (frame check sequence). |
| 30 | */ |
| 31 | |
| 32 | #define ETH_ALEN	6		/* Octets in one ethernet addr	 */ |
| 33 | #define ETH_TLEN	2		/* Octets in ethernet type field */ |
| 34 | #define ETH_HLEN	14		/* Total octets in header.	 */ |
| 35 | #define ETH_ZLEN	60		/* Min. octets in frame sans FCS */ |
| 36 | #define ETH_DATA_LEN	1500		/* Max. octets in payload	 */ |
| 37 | #define ETH_FRAME_LEN	1514		/* Max. octets in frame sans FCS */ |
| 38 | #define ETH_FCS_LEN	4		/* Octets in the FCS		 */ |
| 39 | |
| 40 | #define ETH_MIN_MTU	68		/* Min IPv4 MTU per RFC791	*/ |
| 41 | #define ETH_MAX_MTU	0xFFFFU		/* 65535, same as IP_MAX_MTU	*/ |
| 42 | |
| 43 | /* |
| 44 | *	These are the defined Ethernet Protocol ID's. |
| 45 | */ |
| 46 | |
| 47 | #define ETH_P_LOOP	0x0060		/* Ethernet Loopback packet	*/ |
| 48 | #define ETH_P_PUP	0x0200		/* Xerox PUP packet		*/ |
| 49 | #define ETH_P_PUPAT	0x0201		/* Xerox PUP Addr Trans packet	*/ |
| 50 | #define ETH_P_TSN	0x22F0		/* TSN (IEEE 1722) packet	*/ |
| 51 | #define ETH_P_ERSPAN2	0x22EB		/* ERSPAN version 2 (type III)	*/ |
| 52 | #define ETH_P_IP	0x0800		/* Internet Protocol packet	*/ |
| 53 | #define ETH_P_X25	0x0805		/* CCITT X.25			*/ |
| 54 | #define ETH_P_ARP	0x0806		/* Address Resolution packet	*/ |
| 55 | #define	ETH_P_BPQ	0x08FF		/* G8BPQ AX.25 Ethernet Packet	[ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 56 | #define ETH_P_IEEEPUP	0x0a00		/* Xerox IEEE802.3 PUP packet */ |
| 57 | #define ETH_P_IEEEPUPAT	0x0a01		/* Xerox IEEE802.3 PUP Addr Trans packet */ |
| 58 | #define ETH_P_BATMAN	0x4305		/* B.A.T.M.A.N.-Advanced packet [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 59 | #define ETH_P_DEC 0x6000 /* DEC Assigned proto */ |
| 60 | #define ETH_P_DNA_DL 0x6001 /* DEC DNA Dump/Load */ |
| 61 | #define ETH_P_DNA_RC 0x6002 /* DEC DNA Remote Console */ |
| 62 | #define ETH_P_DNA_RT 0x6003 /* DEC DNA Routing */ |
| 63 | #define ETH_P_LAT 0x6004 /* DEC LAT */ |
| 64 | #define ETH_P_DIAG 0x6005 /* DEC Diagnostics */ |
| 65 | #define ETH_P_CUST 0x6006 /* DEC Customer use */ |
| 66 | #define ETH_P_SCA 0x6007 /* DEC Systems Comms Arch */ |
| 67 | #define ETH_P_TEB	0x6558		/* Trans Ether Bridging		*/ |
| 68 | #define ETH_P_RARP 0x8035		/* Reverse Addr Res packet	*/ |
| 69 | #define ETH_P_ATALK	0x809B		/* Appletalk DDP		*/ |
| 70 | #define ETH_P_AARP	0x80F3		/* Appletalk AARP		*/ |
| 71 | #define ETH_P_8021Q	0x8100 /* 802.1Q VLAN Extended Header */ |
| 72 | #define ETH_P_ERSPAN	0x88BE		/* ERSPAN type II		*/ |
| 73 | #define ETH_P_IPX	0x8137		/* IPX over DIX			*/ |
| 74 | #define ETH_P_IPV6	0x86DD		/* IPv6 over bluebook		*/ |
| 75 | #define ETH_P_PAUSE	0x8808		/* IEEE Pause frames. See 802.3 31B */ |
| 76 | #define ETH_P_SLOW	0x8809		/* Slow Protocol. See 802.3ad 43B */ |
| 77 | #define ETH_P_WCCP	0x883E		/* Web-cache coordination protocol |
| 78 | 					 * defined in draft-wilson-wrec-wccp-v2-00.txt */ |
| 79 | #define ETH_P_MPLS_UC	0x8847		/* MPLS Unicast traffic		*/ |
| 80 | #define ETH_P_MPLS_MC	0x8848		/* MPLS Multicast traffic	*/ |
| 81 | #define ETH_P_ATMMPOA	0x884c		/* MultiProtocol Over ATM	*/ |
| 82 | #define ETH_P_PPP_DISC	0x8863		/* PPPoE discovery messages */ |
| 83 | #define ETH_P_PPP_SES	0x8864		/* PPPoE session messages	*/ |
| 84 | #define ETH_P_LINK_CTL	0x886c		/* HPNA, wlan link local tunnel */ |
| 85 | #define ETH_P_8021AC	0x8870		/* 802.1AC LLC > 1500 bytes */ |
| 86 | #define ETH_P_ATMFATE	0x8884		/* Frame-based ATM Transport |
| 87 | 					 * over Ethernet |
| 88 | 					 */ |
| 89 | #define ETH_P_PAE	0x888E		/* Port Access Entity (IEEE 802.1X) */ |
| 90 | #define ETH_P_PROFINET	0x8892		/* PROFINET			*/ |
| 91 | #define ETH_P_REALTEK	0x8899 /* Multiple proprietary protocols */ |
| 92 | #define ETH_P_AOE	0x88A2		/* ATA over Ethernet		*/ |
| 93 | #define ETH_P_ETHERCAT	0x88A4		/* EtherCAT			*/ |
| 94 | #define ETH_P_8021AD	0x88A8 /* 802.1ad Service VLAN		*/ |
| 95 | #define ETH_P_802_EX1	0x88B5		/* 802.1 Local Experimental 1. */ |
| 96 | #define ETH_P_MXLGSW	0x88C3		/* Infineon Technologies Corporate Research ST |
| 97 | 					 * Used by MaxLinear GSW DSA |
| 98 | 					 */ |
| 99 | #define ETH_P_PREAUTH	0x88C7		/* 802.11 Preauthentication */ |
| 100 | #define ETH_P_TIPC	0x88CA		/* TIPC 			*/ |
| 101 | #define ETH_P_LLDP	0x88CC		/* Link Layer Discovery Protocol */ |
| 102 | #define ETH_P_MRP	0x88E3		/* Media Redundancy Protocol	*/ |
| 103 | #define ETH_P_MACSEC	0x88E5		/* 802.1ae MACsec */ |
| 104 | #define ETH_P_8021AH	0x88E7 /* 802.1ah Backbone Service Tag */ |
| 105 | #define ETH_P_MVRP	0x88F5 /* 802.1Q MVRP */ |
| 106 | #define ETH_P_1588	0x88F7		/* IEEE 1588 Timesync */ |
| 107 | #define ETH_P_NCSI	0x88F8		/* NCSI protocol		*/ |
| 108 | #define ETH_P_PRP	0x88FB		/* IEC 62439-3 PRP/HSRv0	*/ |
| 109 | #define ETH_P_CFM	0x8902		/* Connectivity Fault Management */ |
| 110 | #define ETH_P_FCOE	0x8906		/* Fibre Channel over Ethernet */ |
| 111 | #define ETH_P_IBOE	0x8915		/* Infiniband over Ethernet	*/ |
| 112 | #define ETH_P_TDLS	0x890D /* TDLS */ |
| 113 | #define ETH_P_FIP	0x8914		/* FCoE Initialization Protocol */ |
| 114 | #define ETH_P_80221	0x8917		/* IEEE 802.21 Media Independent Handover Protocol */ |
| 115 | #define ETH_P_HSR	0x892F		/* IEC 62439-3 HSRv1	*/ |
| 116 | #define ETH_P_NSH	0x894F		/* Network Service Header */ |
| 117 | #define ETH_P_LOOPBACK	0x9000		/* Ethernet loopback packet, per IEEE 802.3 */ |
| 118 | #define ETH_P_QINQ1	0x9100		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 119 | #define ETH_P_QINQ2	0x9200		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 120 | #define ETH_P_QINQ3	0x9300		/* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 121 | #define ETH_P_YT921X	0x9988		/* Motorcomm YT921x DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 122 | #define ETH_P_EDSA	0xDADA		/* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 123 | #define ETH_P_DSA_8021Q	0xDADB		/* Fake VLAN Header for DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 124 | #define ETH_P_DSA_A5PSW	0xE001		/* A5PSW Tag Value [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 125 | #define ETH_P_IFE	0xED3E		/* ForCES inter-FE LFB type */ |
| 126 | #define ETH_P_AF_IUCV 0xFBFB		/* IBM af_iucv [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 127 | #define ETH_P_NXP_NETC 0xFD3A		/* NXP NETC DSA [ NOT AN OFFICIALLY REGISTERED ID ] */ |
| 128 | |
| 129 | #define ETH_P_802_3_MIN	0x0600		/* If the value in the ethernet type is more than this value |
| 130 | 					 * then the frame is Ethernet II. Else it is 802.3 */ |
| 131 | |
| 132 | /* |
| 133 | *	Non DIX types. Won't clash for 1500 types. |
| 134 | */ |
| 135 | |
| 136 | #define ETH_P_802_3	0x0001		/* Dummy type for 802.3 frames */ |
| 137 | #define ETH_P_AX25	0x0002		/* Dummy protocol id for AX.25 */ |
| 138 | #define ETH_P_ALL	0x0003		/* Every packet (be careful!!!) */ |
| 139 | #define ETH_P_802_2	0x0004		/* 802.2 frames 		*/ |
| 140 | #define ETH_P_SNAP	0x0005		/* Internal only		*/ |
| 141 | #define ETH_P_DDCMP 0x0006 /* DEC DDCMP: Internal only */ |
| 142 | #define ETH_P_WAN_PPP 0x0007 /* Dummy type for WAN PPP frames*/ |
| 143 | #define ETH_P_PPP_MP 0x0008 /* Dummy type for PPP MP frames */ |
| 144 | #define ETH_P_LOCALTALK 0x0009		/* Localtalk pseudo type 	*/ |
| 145 | #define ETH_P_CAN	0x000C		/* CAN: Controller Area Network */ |
| 146 | #define ETH_P_CANFD	0x000D		/* CANFD: CAN flexible data rate*/ |
| 147 | #define ETH_P_CANXL	0x000E		/* CANXL: eXtended frame Length */ |
| 148 | #define ETH_P_PPPTALK	0x0010		/* Dummy type for Atalk over PPP*/ |
| 149 | #define ETH_P_TR_802_2	0x0011		/* 802.2 frames 		*/ |
| 150 | #define ETH_P_MOBITEX	0x0015		/* Mobitex (kaz@cafe.net)	*/ |
| 151 | #define ETH_P_CONTROL	0x0016		/* Card specific control frames */ |
| 152 | #define ETH_P_IRDA	0x0017		/* Linux-IrDA			*/ |
| 153 | #define ETH_P_ECONET	0x0018		/* Acorn Econet			*/ |
| 154 | #define ETH_P_HDLC	0x0019		/* HDLC frames			*/ |
| 155 | #define ETH_P_ARCNET	0x001A		/* 1A for ArcNet :-) */ |
| 156 | #define ETH_P_DSA	0x001B		/* Distributed Switch Arch.	*/ |
| 157 | #define ETH_P_TRAILER	0x001C		/* Trailer switch tagging	*/ |
| 158 | #define ETH_P_PHONET	0x00F5		/* Nokia Phonet frames */ |
| 159 | #define ETH_P_IEEE802154 0x00F6		/* IEEE802.15.4 frame		*/ |
| 160 | #define ETH_P_CAIF	0x00F7		/* ST-Ericsson CAIF protocol	*/ |
| 161 | #define ETH_P_XDSA	0x00F8		/* Multiplexed DSA protocol	*/ |
| 162 | #define ETH_P_MAP	0x00F9		/* Qualcomm multiplexing and |
| 163 | 					 * aggregation protocol |
| 164 | 					 */ |
| 165 | #define ETH_P_MCTP	0x00FA		/* Management component transport |
| 166 | 					 * protocol packets |
| 167 | 					 */ |
| 168 | #define ETH_P_GRE_OSI	0x00FE		/* GRE tunnels: LLC "fe fe 03" analog, |
| 169 | 					 * used primarily for IS-IS over GRE |
| 170 | 					 * WARNING: not internal, used on wire! |
| 171 | 					 */ |
| 172 | |
| 173 | /* |
| 174 | *	This is an Ethernet frame header. |
| 175 | */ |
| 176 | |
| 177 | /* allow libcs like musl to deactivate this, glibc does not implement this. */ |
| 178 | #ifndef __UAPI_DEF_ETHHDR |
| 179 | #define __UAPI_DEF_ETHHDR		1 |
| 180 | #endif |
| 181 | |
| 182 | #if __UAPI_DEF_ETHHDR |
| 183 | struct ethhdr { |
| 184 | 	unsigned char	h_dest[ETH_ALEN];	/* destination eth addr	*/ |
| 185 | 	unsigned char	h_source[ETH_ALEN];	/* source ether addr	*/ |
| 186 | 	__be16		h_proto;		/* packet type ID field	*/ |
| 187 | } __attribute__((packed)); |
| 188 | #endif |
| 189 | |
| 190 | |
| 191 | #endif /* _LINUX_IF_ETHER_H */ |