1/* 2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28/* 29 * Fundamental constants relating to ethernet. 30 * 31 */ 32 33#ifndef _NET_ETHERNET_H_ 34#define _NET_ETHERNET_H_ 35#include <sys/appleapiopts.h> 36#include <sys/types.h> /* u_ types */ 37 38/* 39 * The number of bytes in an ethernet (MAC) address. 40 */ 41#define ETHER_ADDR_LEN 6 42 43/* 44 * The number of bytes in the type field. 45 */ 46#define ETHER_TYPE_LEN 2 47 48/* 49 * The number of bytes in the trailing CRC field. 50 */ 51#define ETHER_CRC_LEN 4 52 53/* 54 * The length of the combined header. 55 */ 56#define ETHER_HDR_LEN (ETHER_ADDR_LEN*2+ETHER_TYPE_LEN) 57 58/* 59 * The minimum packet length. 60 */ 61#define ETHER_MIN_LEN 64 62 63/* 64 * The maximum packet length. 65 */ 66#define ETHER_MAX_LEN 1518 67 68/* 69 * A macro to validate a length with 70 */ 71#define ETHER_IS_VALID_LEN(foo) \ 72 ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN) 73 74/* 75 * Structure of a 10Mb/s Ethernet header. 76 */ 77struct ether_header { 78 u_char ether_dhost[ETHER_ADDR_LEN]; 79 u_char ether_shost[ETHER_ADDR_LEN]; 80 u_short ether_type; 81}; 82 83/* 84 * Structure of a 48-bit Ethernet address. 85 */ 86struct ether_addr { 87 u_char octet[ETHER_ADDR_LEN]; 88}; 89 90#define ether_addr_octet octet 91 92#define ETHERTYPE_PUP 0x0200 /* PUP protocol */ 93#define ETHERTYPE_IP 0x0800 /* IP protocol */ 94#define ETHERTYPE_ARP 0x0806 /* Addr. resolution protocol */ 95#define ETHERTYPE_REVARP 0x8035 /* reverse Addr. resolution protocol */ 96#define ETHERTYPE_VLAN 0x8100 /* IEEE 802.1Q VLAN tagging */ 97#define ETHERTYPE_IPV6 0x86dd /* IPv6 */ 98#define ETHERTYPE_LOOPBACK 0x9000 /* used to test interfaces */ 99/* XXX - add more useful types here */ 100 101/* 102 * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have 103 * (type-ETHERTYPE_TRAIL)*512 bytes of data followed 104 * by an ETHER type (as given above) and then the (variable-length) header. 105 */ 106#define ETHERTYPE_TRAIL 0x1000 /* Trailer packet */ 107#define ETHERTYPE_NTRAILER 16 108 109#define ETHERMTU (ETHER_MAX_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN) 110#define ETHERMIN (ETHER_MIN_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN) 111 112#ifdef KERNEL_PRIVATE 113/* 114 * The following are used by ethernet interfaces. 115 */ 116 117struct ether_addr *ether_aton(const char *); 118 119#ifdef BSD_KERNEL_PRIVATE 120extern u_char etherbroadcastaddr[ETHER_ADDR_LEN]; 121#endif 122#endif /* KERNEL_PRIVATE */ 123 124#ifndef KERNEL 125#include <sys/cdefs.h> 126 127/* 128 * Ethernet address conversion/parsing routines. 129 */ 130__BEGIN_DECLS 131 132int ether_hostton(const char *, struct ether_addr *); 133int ether_line(const char *, struct ether_addr *, char *); 134char *ether_ntoa(const struct ether_addr *); 135struct ether_addr *ether_aton(const char *); 136int ether_ntohost(char *, const struct ether_addr *); 137__END_DECLS 138#endif /* !KERNEL */ 139 140#endif /* !_NET_ETHERNET_H_ */ 141