cpp-d1064d
[cross.git] / i686-linux-gnu-4.7 / usr / include / net / ethernet.h
1 /* Copyright (C) 1997-2018 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, see
16    <http://www.gnu.org/licenses/>.  */
17
18 /* Based on the FreeBSD version of this file. Curiously, that file
19    lacks a copyright in the header. */
20
21 #ifndef __NET_ETHERNET_H
22 #define __NET_ETHERNET_H 1
23
24 #include <sys/types.h>
25 #include <stdint.h>
26
27 #include <linux/if_ether.h>     /* IEEE 802.3 Ethernet constants */
28
29 __BEGIN_DECLS
30
31 /* This is a name for the 48 bit ethernet address available on many
32    systems.  */
33 struct ether_addr
34 {
35   uint8_t ether_addr_octet[ETH_ALEN];
36 } __attribute__ ((__packed__));
37
38 /* 10Mb/s ethernet header */
39 struct ether_header
40 {
41   uint8_t  ether_dhost[ETH_ALEN];       /* destination eth addr */
42   uint8_t  ether_shost[ETH_ALEN];       /* source ether addr    */
43   uint16_t ether_type;                  /* packet type ID field */
44 } __attribute__ ((__packed__));
45
46 /* Ethernet protocol ID's */
47 #define ETHERTYPE_PUP           0x0200          /* Xerox PUP */
48 #define ETHERTYPE_SPRITE        0x0500          /* Sprite */
49 #define ETHERTYPE_IP            0x0800          /* IP */
50 #define ETHERTYPE_ARP           0x0806          /* Address resolution */
51 #define ETHERTYPE_REVARP        0x8035          /* Reverse ARP */
52 #define ETHERTYPE_AT            0x809B          /* AppleTalk protocol */
53 #define ETHERTYPE_AARP          0x80F3          /* AppleTalk ARP */
54 #define ETHERTYPE_VLAN          0x8100          /* IEEE 802.1Q VLAN tagging */
55 #define ETHERTYPE_IPX           0x8137          /* IPX */
56 #define ETHERTYPE_IPV6          0x86dd          /* IP protocol version 6 */
57 #define ETHERTYPE_LOOPBACK      0x9000          /* used to test interfaces */
58
59
60 #define ETHER_ADDR_LEN  ETH_ALEN                 /* size of ethernet addr */
61 #define ETHER_TYPE_LEN  2                        /* bytes in type field */
62 #define ETHER_CRC_LEN   4                        /* bytes in CRC field */
63 #define ETHER_HDR_LEN   ETH_HLEN                 /* total octets in header */
64 #define ETHER_MIN_LEN   (ETH_ZLEN + ETHER_CRC_LEN) /* min packet length */
65 #define ETHER_MAX_LEN   (ETH_FRAME_LEN + ETHER_CRC_LEN) /* max packet length */
66
67 /* make sure ethenet length is valid */
68 #define ETHER_IS_VALID_LEN(foo) \
69         ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN)
70
71 /*
72  * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have
73  * (type-ETHERTYPE_TRAIL)*512 bytes of data followed
74  * by an ETHER type (as given above) and then the (variable-length) header.
75  */
76 #define ETHERTYPE_TRAIL         0x1000          /* Trailer packet */
77 #define ETHERTYPE_NTRAILER      16
78
79 #define ETHERMTU        ETH_DATA_LEN
80 #define ETHERMIN        (ETHER_MIN_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN)
81
82 __END_DECLS
83
84 #endif  /* net/ethernet.h */