ethernet.h revision 52904
1167598Srrs/* 2169382Srrs * Fundamental constants relating to ethernet. 3235828Stuexen * 4235828Stuexen * $FreeBSD: head/sys/net/ethernet.h 52904 1999-11-05 14:41:39Z shin $ 5167598Srrs * 6167598Srrs */ 7167598Srrs 8167598Srrs#ifndef _NET_ETHERNET_H_ 9167598Srrs#define _NET_ETHERNET_H_ 10228653Stuexen 11167598Srrs/* 12167598Srrs * The number of bytes in an ethernet (MAC) address. 13167598Srrs */ 14228653Stuexen#define ETHER_ADDR_LEN 6 15167598Srrs 16167598Srrs/* 17167598Srrs * The number of bytes in the type field. 18167598Srrs */ 19167598Srrs#define ETHER_TYPE_LEN 2 20167598Srrs 21167598Srrs/* 22167598Srrs * The number of bytes in the trailing CRC field. 23167598Srrs */ 24167598Srrs#define ETHER_CRC_LEN 4 25167598Srrs 26167598Srrs/* 27167598Srrs * The length of the combined header. 28167598Srrs */ 29167598Srrs#define ETHER_HDR_LEN (ETHER_ADDR_LEN*2+ETHER_TYPE_LEN) 30167598Srrs 31167598Srrs/* 32167598Srrs * The minimum packet length. 33167598Srrs */ 34167598Srrs#define ETHER_MIN_LEN 64 35167598Srrs 36167598Srrs/* 37179783Srrs * The maximum packet length. 38167598Srrs */ 39167598Srrs#define ETHER_MAX_LEN 1518 40167598Srrs 41167598Srrs/* 42170056Srrs * A macro to validate a length with 43205629Srrs */ 44271746Stuexen#define ETHER_IS_VALID_LEN(foo) \ 45179783Srrs ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN) 46271746Stuexen 47271746Stuexen/* 48167598Srrs * Structure of a 10Mb/s Ethernet header. 49167598Srrs */ 50167598Srrsstruct ether_header { 51167598Srrs u_char ether_dhost[ETHER_ADDR_LEN]; 52179783Srrs u_char ether_shost[ETHER_ADDR_LEN]; 53179783Srrs u_short ether_type; 54179783Srrs}; 55179783Srrs 56179783Srrs/* 57179783Srrs * Structure of a 48-bit Ethernet address. 58179783Srrs */ 59179783Srrsstruct ether_addr { 60270357Stuexen u_char octet[ETHER_ADDR_LEN]; 61270362Stuexen}; 62270362Stuexen 63270361Stuexen#define ETHERTYPE_PUP 0x0200 /* PUP protocol */ 64270359Stuexen#define ETHERTYPE_IP 0x0800 /* IP protocol */ 65270360Stuexen#define ETHERTYPE_ARP 0x0806 /* Addr. resolution protocol */ 66179783Srrs#define ETHERTYPE_REVARP 0x8035 /* reverse Addr. resolution protocol */ 67179783Srrs#define ETHERTYPE_VLAN 0x8100 /* IEEE 802.1Q VLAN tagging */ 68179783Srrs#define ETHERTYPE_IPV6 0x86dd /* IPv6 */ 69218186Srrs#define ETHERTYPE_LOOPBACK 0x9000 /* used to test interfaces */ 70179783Srrs/* XXX - add more useful types here */ 71179783Srrs 72179783Srrs/* 73179783Srrs * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have 74179783Srrs * (type-ETHERTYPE_TRAIL)*512 bytes of data followed 75179783Srrs * by an ETHER type (as given above) and then the (variable-length) header. 76179783Srrs */ 77179783Srrs#define ETHERTYPE_TRAIL 0x1000 /* Trailer packet */ 78179783Srrs#define ETHERTYPE_NTRAILER 16 79179783Srrs 80179783Srrs#define ETHERMTU (ETHER_MAX_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN) 81179783Srrs#define ETHERMIN (ETHER_MIN_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN) 82179783Srrs 83179783Srrs#ifndef KERNEL 84179783Srrs#include <sys/cdefs.h> 85179783Srrs 86179783Srrs/* 87179783Srrs * Ethernet address conversion/parsing routines. 88179783Srrs */ 89179783Srrs__BEGIN_DECLS 90179783Srrsstruct ether_addr *ether_aton __P((char *)); 91224641Stuexenint ether_hostton __P((char *, struct ether_addr *)); 92179783Srrsint ether_line __P((char *, struct ether_addr *, char *)); 93252779Stuexenchar *ether_ntoa __P((struct ether_addr *)); 94179783Srrsint ether_ntohost __P((char *, struct ether_addr *)); 95179783Srrs__END_DECLS 96179783Srrs#endif /* !KERNEL */ 97179783Srrs 98179783Srrs#endif /* !_NET_ETHERNET_H_ */ 99179783Srrs