| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | /* Copyright (C) 1997, 1999, 2001 Free Software Foundation, Inc.   This file is part of the GNU C Library.   The GNU C Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Lesser General Public   License as published by the Free Software Foundation; either   version 2.1 of the License, or (at your option) any later version.   The GNU C Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Lesser General Public License for more details.   You should have received a copy of the GNU Lesser General Public   License along with the GNU C Library; if not, write to the Free   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA   02111-1307 USA.  *//* Based on the FreeBSD version of this file. Curiously, that file   lacks a copyright in the header. */#ifndef __NET_ETHERNET_H#define __NET_ETHERNET_H 1#include <sys/cdefs.h>#include <sys/types.h>#include <linux/if_ether.h>     /* IEEE 802.3 Ethernet constants */__BEGIN_DECLS/* This is a name for the 48 bit ethernet address available on many   systems.  */struct ether_addr{  u_int8_t ether_addr_octet[ETH_ALEN];} __attribute__ ((__packed__));/* 10Mb/s ethernet header */struct ether_header{  u_int8_t  ether_dhost[ETH_ALEN];	/* destination eth addr	*/  u_int8_t  ether_shost[ETH_ALEN];	/* source ether addr	*/  u_int16_t ether_type;		        /* packet type ID field	*/} __attribute__ ((__packed__));/* Ethernet protocol ID's */#define	ETHERTYPE_PUP		0x0200          /* Xerox PUP */#define	ETHERTYPE_IP		0x0800		/* IP */#define	ETHERTYPE_ARP		0x0806		/* Address resolution */#define	ETHERTYPE_REVARP	0x8035		/* Reverse ARP */#define	ETHER_ADDR_LEN	ETH_ALEN                 /* size of ethernet addr */#define	ETHER_TYPE_LEN	2                        /* bytes in type field */#define	ETHER_CRC_LEN	4                        /* bytes in CRC field */#define	ETHER_HDR_LEN	ETH_HLEN                 /* total octets in header */#define	ETHER_MIN_LEN	(ETH_ZLEN + ETHER_CRC_LEN) /* min packet length */#define	ETHER_MAX_LEN	(ETH_FRAME_LEN + ETHER_CRC_LEN) /* max packet length *//* make sure ethenet length is valid */#define	ETHER_IS_VALID_LEN(foo)	\	((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN)/* * 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	ETH_DATA_LEN#define	ETHERMIN	(ETHER_MIN_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN)__END_DECLS#endif	/* net/ethernet.h */
 |