mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-14 10:09:48 +00:00
664a31e496
is an application space macro and the applications are supposed to be free to use it as they please (but cannot). This is consistant with the other BSD's who made this change quite some time ago. More commits to come.
99 lines
2.2 KiB
C
99 lines
2.2 KiB
C
/*
|
|
* Fundamental constants relating to ethernet.
|
|
*
|
|
* $FreeBSD$
|
|
*
|
|
*/
|
|
|
|
#ifndef _NET_ETHERNET_H_
|
|
#define _NET_ETHERNET_H_
|
|
|
|
/*
|
|
* The number of bytes in an ethernet (MAC) address.
|
|
*/
|
|
#define ETHER_ADDR_LEN 6
|
|
|
|
/*
|
|
* The number of bytes in the type field.
|
|
*/
|
|
#define ETHER_TYPE_LEN 2
|
|
|
|
/*
|
|
* The number of bytes in the trailing CRC field.
|
|
*/
|
|
#define ETHER_CRC_LEN 4
|
|
|
|
/*
|
|
* The length of the combined header.
|
|
*/
|
|
#define ETHER_HDR_LEN (ETHER_ADDR_LEN*2+ETHER_TYPE_LEN)
|
|
|
|
/*
|
|
* The minimum packet length.
|
|
*/
|
|
#define ETHER_MIN_LEN 64
|
|
|
|
/*
|
|
* The maximum packet length.
|
|
*/
|
|
#define ETHER_MAX_LEN 1518
|
|
|
|
/*
|
|
* A macro to validate a length with
|
|
*/
|
|
#define ETHER_IS_VALID_LEN(foo) \
|
|
((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN)
|
|
|
|
/*
|
|
* Structure of a 10Mb/s Ethernet header.
|
|
*/
|
|
struct ether_header {
|
|
u_char ether_dhost[ETHER_ADDR_LEN];
|
|
u_char ether_shost[ETHER_ADDR_LEN];
|
|
u_short ether_type;
|
|
};
|
|
|
|
/*
|
|
* Structure of a 48-bit Ethernet address.
|
|
*/
|
|
struct ether_addr {
|
|
u_char octet[ETHER_ADDR_LEN];
|
|
};
|
|
|
|
#define ETHERTYPE_PUP 0x0200 /* PUP protocol */
|
|
#define ETHERTYPE_IP 0x0800 /* IP protocol */
|
|
#define ETHERTYPE_ARP 0x0806 /* Addr. resolution protocol */
|
|
#define ETHERTYPE_REVARP 0x8035 /* reverse Addr. resolution protocol */
|
|
#define ETHERTYPE_VLAN 0x8100 /* IEEE 802.1Q VLAN tagging */
|
|
#define ETHERTYPE_IPV6 0x86dd /* IPv6 */
|
|
#define ETHERTYPE_LOOPBACK 0x9000 /* used to test interfaces */
|
|
/* XXX - add more useful types here */
|
|
|
|
/*
|
|
* The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have
|
|
* (type-ETHERTYPE_TRAIL)*512 bytes of data followed
|
|
* by an ETHER type (as given above) and then the (variable-length) header.
|
|
*/
|
|
#define ETHERTYPE_TRAIL 0x1000 /* Trailer packet */
|
|
#define ETHERTYPE_NTRAILER 16
|
|
|
|
#define ETHERMTU (ETHER_MAX_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN)
|
|
#define ETHERMIN (ETHER_MIN_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN)
|
|
|
|
#ifndef _KERNEL
|
|
#include <sys/cdefs.h>
|
|
|
|
/*
|
|
* Ethernet address conversion/parsing routines.
|
|
*/
|
|
__BEGIN_DECLS
|
|
struct ether_addr *ether_aton __P((char *));
|
|
int ether_hostton __P((char *, struct ether_addr *));
|
|
int ether_line __P((char *, struct ether_addr *, char *));
|
|
char *ether_ntoa __P((struct ether_addr *));
|
|
int ether_ntohost __P((char *, struct ether_addr *));
|
|
__END_DECLS
|
|
#endif
|
|
|
|
#endif /* !_NET_ETHERNET_H_ */
|