1e4b54c02SPoul-Henning Kamp /* 2e4b54c02SPoul-Henning Kamp * Fundamental constants relating to ethernet. 3e4b54c02SPoul-Henning Kamp * 49cb3aff2SGarrett Wollman * $Id: ethernet.h,v 1.5 1996/12/19 18:12:06 bde Exp $ 5e4b54c02SPoul-Henning Kamp * 6e4b54c02SPoul-Henning Kamp */ 7e4b54c02SPoul-Henning Kamp 826a8b0bfSPoul-Henning Kamp #ifndef _NET_ETHERNET_H_ 926a8b0bfSPoul-Henning Kamp #define _NET_ETHERNET_H_ 1026a8b0bfSPoul-Henning Kamp 1126a8b0bfSPoul-Henning Kamp /* 1226a8b0bfSPoul-Henning Kamp * The number of bytes in an ethernet (MAC) address. 1326a8b0bfSPoul-Henning Kamp */ 14e4b54c02SPoul-Henning Kamp #define ETHER_ADDR_LEN 6 1526a8b0bfSPoul-Henning Kamp 1626a8b0bfSPoul-Henning Kamp /* 1726a8b0bfSPoul-Henning Kamp * The number of bytes in the type field. 1826a8b0bfSPoul-Henning Kamp */ 19e4b54c02SPoul-Henning Kamp #define ETHER_TYPE_LEN 2 2026a8b0bfSPoul-Henning Kamp 2126a8b0bfSPoul-Henning Kamp /* 2226a8b0bfSPoul-Henning Kamp * The number of bytes in the trailing CRC field. 2326a8b0bfSPoul-Henning Kamp */ 2426a8b0bfSPoul-Henning Kamp #define ETHER_CRC_LEN 4 2526a8b0bfSPoul-Henning Kamp 2626a8b0bfSPoul-Henning Kamp /* 2726a8b0bfSPoul-Henning Kamp * The length of the combined header. 2826a8b0bfSPoul-Henning Kamp */ 2926a8b0bfSPoul-Henning Kamp #define ETHER_HDR_LEN (ETHER_ADDR_LEN*2+ETHER_TYPE_LEN) 3026a8b0bfSPoul-Henning Kamp 3126a8b0bfSPoul-Henning Kamp /* 3226a8b0bfSPoul-Henning Kamp * The minimum packet length. 3326a8b0bfSPoul-Henning Kamp */ 34e4b54c02SPoul-Henning Kamp #define ETHER_MIN_LEN 64 3526a8b0bfSPoul-Henning Kamp 3626a8b0bfSPoul-Henning Kamp /* 3726a8b0bfSPoul-Henning Kamp * The maximum packet length. 3826a8b0bfSPoul-Henning Kamp */ 39e4b54c02SPoul-Henning Kamp #define ETHER_MAX_LEN 1518 4026a8b0bfSPoul-Henning Kamp 4126a8b0bfSPoul-Henning Kamp /* 4226a8b0bfSPoul-Henning Kamp * A macro to validate a length with 4326a8b0bfSPoul-Henning Kamp */ 4426a8b0bfSPoul-Henning Kamp #define ETHER_IS_VALID_LEN(foo) \ 4526a8b0bfSPoul-Henning Kamp ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN) 4626a8b0bfSPoul-Henning Kamp 4726a8b0bfSPoul-Henning Kamp /* 4826a8b0bfSPoul-Henning Kamp * Structure of a 10Mb/s Ethernet header. 4926a8b0bfSPoul-Henning Kamp */ 5026a8b0bfSPoul-Henning Kamp struct ether_header { 5126a8b0bfSPoul-Henning Kamp u_char ether_dhost[ETHER_ADDR_LEN]; 5226a8b0bfSPoul-Henning Kamp u_char ether_shost[ETHER_ADDR_LEN]; 5326a8b0bfSPoul-Henning Kamp u_short ether_type; 5426a8b0bfSPoul-Henning Kamp }; 5526a8b0bfSPoul-Henning Kamp 5626a8b0bfSPoul-Henning Kamp /* 5726a8b0bfSPoul-Henning Kamp * Structure of a 48-bit Ethernet address. 5826a8b0bfSPoul-Henning Kamp */ 5926a8b0bfSPoul-Henning Kamp struct ether_addr { 6026a8b0bfSPoul-Henning Kamp u_char octet[ETHER_ADDR_LEN]; 6126a8b0bfSPoul-Henning Kamp }; 6226a8b0bfSPoul-Henning Kamp 639cb3aff2SGarrett Wollman #define ETHERTYPE_PUP 0x0200 /* PUP protocol */ 649cb3aff2SGarrett Wollman #define ETHERTYPE_IP 0x0800 /* IP protocol */ 659cb3aff2SGarrett Wollman #define ETHERTYPE_ARP 0x0806 /* Addr. resolution protocol */ 669cb3aff2SGarrett Wollman #define ETHERTYPE_REVARP 0x8035 /* reverse Addr. resolution protocol */ 679cb3aff2SGarrett Wollman #define ETHERTYPE_LOOPBACK 0x9000 /* used to test interfaces */ 689cb3aff2SGarrett Wollman /* XXX - add more useful types here */ 699cb3aff2SGarrett Wollman 709cb3aff2SGarrett Wollman /* 719cb3aff2SGarrett Wollman * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have 729cb3aff2SGarrett Wollman * (type-ETHERTYPE_TRAIL)*512 bytes of data followed 739cb3aff2SGarrett Wollman * by an ETHER type (as given above) and then the (variable-length) header. 749cb3aff2SGarrett Wollman */ 759cb3aff2SGarrett Wollman #define ETHERTYPE_TRAIL 0x1000 /* Trailer packet */ 769cb3aff2SGarrett Wollman #define ETHERTYPE_NTRAILER 16 779cb3aff2SGarrett Wollman 789cb3aff2SGarrett Wollman #define ETHERMTU (ETHER_MAX_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN) 799cb3aff2SGarrett Wollman #define ETHERMIN (ETHER_MIN_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN) 809cb3aff2SGarrett Wollman 81992af1d0SGarrett Wollman #ifndef KERNEL 82992af1d0SGarrett Wollman #include <sys/cdefs.h> 83992af1d0SGarrett Wollman 8418fe1007SBill Paul /* 8518fe1007SBill Paul * Ethernet address conversion/parsing routines. 8618fe1007SBill Paul */ 8732341648SBruce Evans __BEGIN_DECLS 88992af1d0SGarrett Wollman struct ether_addr *ether_aton __P((char *)); 8918fe1007SBill Paul int ether_hostton __P((char *, struct ether_addr *)); 9032341648SBruce Evans int ether_line __P((char *, struct ether_addr *, char *)); 9132341648SBruce Evans char *ether_ntoa __P((struct ether_addr *)); 9232341648SBruce Evans int ether_ntohost __P((char *, struct ether_addr *)); 9332341648SBruce Evans __END_DECLS 9432341648SBruce Evans #endif /* !KERNEL */ 9532341648SBruce Evans 9632341648SBruce Evans #endif /* !_NET_ETHERNET_H_ */ 97