1 /* 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 */ 63 struct 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 */ 70 struct 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 81