xref: /freebsd/sys/net/ethernet.h (revision 9cb3aff230b700b98980354a92c6e453a09a10dd)
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