blob: d5ba11f3f93c082bc1a4600dd6587468e465c16f [file] [log] [blame]
Andrea Falcone1c4977f2020-07-23 10:58:25 -04001/*
2 * Copyright (C) 2011 The Android Open Source Project
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in
12 * the documentation and/or other materials provided with the
13 * distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29#ifndef _NET_ETHERNET_H_
30#define _NET_ETHERNET_H_
31
32#include <sys/cdefs.h>
33#include <sys/types.h>
34
35#include <linux/if_ether.h>
36
37#define ETHERTYPE_IP 0x0800
38#define ETHERTYPE_ARP 0x0806
39#define ETHERTYPE_REVARP 0x8035
40#define ETHERTYPE_VLAN 0x8100
41#define ETHERTYPE_IPX 0x8137
42#define ETHERTYPE_IPV6 0x86dd
43#define ETHERTYPE_LOOPBACK 0x9000
44
45#define ETHERTYPE_TRAIL 0x1000
46#define ETHERTYPE_NTRAILER 16
47
48/*
49 * Some basic Ethernet constants.
50 */
51#define ETHER_ADDR_LEN 6 /* length of an Ethernet address */
52#define ETHER_TYPE_LEN 2 /* length of the Ethernet type field */
53#define ETHER_CRC_LEN 4 /* length of the Ethernet CRC */
54#define ETHER_HDR_LEN ((ETHER_ADDR_LEN * 2) + ETHER_TYPE_LEN)
55#define ETHER_MIN_LEN 64 /* minimum frame length, including CRC */
56#define ETHER_MAX_LEN 1518 /* maximum frame length, including CRC */
57#define ETHER_MAX_LEN_JUMBO 9018 /* maximum jumbo frame len, including CRC */
58
59/*
60 * Ethernet address - 6 octets
61 * this is only used by the ethers(3) functions.
62 */
63struct ether_addr {
64 u_int8_t ether_addr_octet[ETHER_ADDR_LEN];
65} __attribute__((__packed__));
66
67/*
68 * Structure of a 10Mb/s Ethernet header.
69 */
70struct ether_header {
71 u_int8_t ether_dhost[ETHER_ADDR_LEN];
72 u_int8_t ether_shost[ETHER_ADDR_LEN];
73 u_int16_t ether_type;
74} __attribute__((__packed__));
75
76#define ETHERMTU_JUMBO (ETHER_MAX_LEN_JUMBO - ETHER_HDR_LEN - ETHER_CRC_LEN)
77#define ETHERMTU (ETHER_MAX_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN)
78#define ETHERMIN (ETHER_MIN_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN)
79
80#endif