xref: /freebsd/sys/net/ethernet.h (revision 992af1d001d2b74fe08198761c0bc83624c7974d)
1e4b54c02SPoul-Henning Kamp /*
2e4b54c02SPoul-Henning Kamp  * Fundamental constants relating to ethernet.
3e4b54c02SPoul-Henning Kamp  *
4992af1d0SGarrett Wollman  * $Id: ethernet.h,v 1.3 1996/12/18 21:42:38 wpaul 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 
63992af1d0SGarrett Wollman #ifndef KERNEL
64992af1d0SGarrett Wollman #include <sys/cdefs.h>
65992af1d0SGarrett Wollman 
6618fe1007SBill Paul /*
6718fe1007SBill Paul  * Ethernet address conversion/parsing routines.
6818fe1007SBill Paul  */
69992af1d0SGarrett Wollman struct	ether_addr *ether_aton __P((char *));
7018fe1007SBill Paul char 	*ether_ntoa __P((struct ether_addr *));
7118fe1007SBill Paul int	ether_line __P((char *, struct ether_addr *, char *));
7218fe1007SBill Paul int	ether_ntohost __P((char *, struct ether_addr *));
7318fe1007SBill Paul int	ether_hostton __P((char *, struct ether_addr *));
74992af1d0SGarrett Wollman #endif /* KERNEL */
75992af1d0SGarrett Wollman #endif /* _NET_ETHERNET_H */
76