ethernet.h revision 63090
1/* 2 * Fundamental constants relating to ethernet. 3 * 4 * $FreeBSD: head/sys/net/ethernet.h 63090 2000-07-13 22:54:34Z archie $ 5 * 6 */ 7 8#ifndef _NET_ETHERNET_H_ 9#define _NET_ETHERNET_H_ 10 11/* 12 * The number of bytes in an ethernet (MAC) address. 13 */ 14#define ETHER_ADDR_LEN 6 15 16/* 17 * The number of bytes in the type field. 18 */ 19#define ETHER_TYPE_LEN 2 20 21/* 22 * The number of bytes in the trailing CRC field. 23 */ 24#define ETHER_CRC_LEN 4 25 26/* 27 * The length of the combined header. 28 */ 29#define ETHER_HDR_LEN (ETHER_ADDR_LEN*2+ETHER_TYPE_LEN) 30 31/* 32 * The minimum packet length. 33 */ 34#define ETHER_MIN_LEN 64 35 36/* 37 * The maximum packet length. 38 */ 39#define ETHER_MAX_LEN 1518 40 41/* 42 * A macro to validate a length with 43 */ 44#define ETHER_IS_VALID_LEN(foo) \ 45 ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN) 46 47/* 48 * Structure of a 10Mb/s Ethernet header. 49 */ 50struct ether_header { 51 u_char ether_dhost[ETHER_ADDR_LEN]; 52 u_char ether_shost[ETHER_ADDR_LEN]; 53 u_short ether_type; 54}; 55 56/* 57 * Structure of a 48-bit Ethernet address. 58 */ 59struct ether_addr { 60 u_char octet[ETHER_ADDR_LEN]; 61}; 62 63#define ETHERTYPE_PUP 0x0200 /* PUP protocol */ 64#define ETHERTYPE_IP 0x0800 /* IP protocol */ 65#define ETHERTYPE_ARP 0x0806 /* Addr. resolution protocol */ 66#define ETHERTYPE_REVARP 0x8035 /* reverse Addr. resolution protocol */ 67#define ETHERTYPE_VLAN 0x8100 /* IEEE 802.1Q VLAN tagging */ 68#define ETHERTYPE_IPV6 0x86dd /* IPv6 */ 69#define ETHERTYPE_LOOPBACK 0x9000 /* used to test interfaces */ 70/* XXX - add more useful types here */ 71 72/* 73 * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have 74 * (type-ETHERTYPE_TRAIL)*512 bytes of data followed 75 * by an ETHER type (as given above) and then the (variable-length) header. 76 */ 77#define ETHERTYPE_TRAIL 0x1000 /* Trailer packet */ 78#define ETHERTYPE_NTRAILER 16 79 80#define ETHERMTU (ETHER_MAX_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN) 81#define ETHERMIN (ETHER_MIN_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN) 82 83#ifdef _KERNEL 84 85/* 86 * For device drivers to specify whether they support BPF or not 87 */ 88#define ETHER_BPF_UNSUPPORTED 0 89#define ETHER_BPF_SUPPORTED 1 90 91struct ifnet; 92struct mbuf; 93 94extern void (*ng_ether_input_p)(struct ifnet *ifp, 95 struct mbuf **mp, struct ether_header *eh); 96extern void (*ng_ether_input_orphan_p)(struct ifnet *ifp, 97 struct mbuf *m, struct ether_header *eh); 98extern int (*ng_ether_output_p)(struct ifnet *ifp, struct mbuf **mp); 99extern void (*ng_ether_attach_p)(struct ifnet *ifp); 100extern void (*ng_ether_detach_p)(struct ifnet *ifp); 101 102#else /* _KERNEL */ 103 104#include <sys/cdefs.h> 105 106/* 107 * Ethernet address conversion/parsing routines. 108 */ 109__BEGIN_DECLS 110struct ether_addr *ether_aton __P((char *)); 111int ether_hostton __P((char *, struct ether_addr *)); 112int ether_line __P((char *, struct ether_addr *, char *)); 113char *ether_ntoa __P((struct ether_addr *)); 114int ether_ntohost __P((char *, struct ether_addr *)); 115__END_DECLS 116 117#endif /* !_KERNEL */ 118 119#endif /* !_NET_ETHERNET_H_ */ 120