xref: /csrg-svn/sys/netinet/if_ether.h (revision 16211)
1*16211Skarels /*	if_ether.h	6.3	84/03/20	*/
29744Ssam 
39744Ssam /*
4*16211Skarels  * Ethernet address - 6 octets
5*16211Skarels  */
6*16211Skarels struct ether_addr {
7*16211Skarels 	u_char	ether_addr_octet[6];
8*16211Skarels };
9*16211Skarels 
10*16211Skarels /*
119744Ssam  * Structure of a 10Mb/s Ethernet header.
129744Ssam  */
139746Ssam struct	ether_header {
14*16211Skarels 	struct	ether_addr ether_dhost;
15*16211Skarels 	struct	ether_addr ether_shost;
169746Ssam 	u_short	ether_type;
179744Ssam };
189744Ssam 
1915105Skarels #define	ETHERPUP_PUPTYPE	0x0200		/* PUP protocol */
209748Ssam #define	ETHERPUP_IPTYPE		0x0800		/* IP protocol */
2111573Ssam #define ETHERPUP_ARPTYPE	0x0806		/* Addr. resolution protocol */
229744Ssam 
239744Ssam /*
249746Ssam  * The ETHERPUP_NTRAILER packet types starting at ETHERPUP_TRAIL have
259746Ssam  * (type-ETHERPUP_TRAIL)*512 bytes of data followed
269744Ssam  * by a PUP type (as given above) and then the (variable-length) header.
279744Ssam  */
289748Ssam #define	ETHERPUP_TRAIL		0x1000		/* Trailer PUP */
299746Ssam #define	ETHERPUP_NTRAILER	16
309746Ssam 
319746Ssam #define	ETHERMTU	1500
329746Ssam #define	ETHERMIN	(60-14)
3311573Ssam 
3411573Ssam /*
3511573Ssam  * Ethernet Address Resolution Protocol.
3611573Ssam  *
3711573Ssam  * See RFC 826 for protocol description.  Structure below is adapted
3811573Ssam  * to resolving internet addresses.  Field names used correspond to
3911573Ssam  * RFC 826.
4011573Ssam  */
4111573Ssam struct	ether_arp {
4211573Ssam 	u_short	arp_hrd;	/* format of hardware address */
4311573Ssam #define ARPHRD_ETHER 	1	/* ethernet hardware address */
4411573Ssam 	u_short	arp_pro;	/* format of proto. address (ETHERPUP_IPTYPE) */
4511573Ssam 	u_char	arp_hln;	/* length of hardware address (6) */
4611573Ssam 	u_char	arp_pln;	/* length of protocol address (4) */
4711573Ssam 	u_short	arp_op;
4811573Ssam #define	ARPOP_REQUEST	1	/* request to resolve address */
4911573Ssam #define	ARPOP_REPLY	2	/* response to previous request */
50*16211Skarels 	u_char	arp_xsha[6];	/* sender hardware address */
51*16211Skarels 	u_char	arp_xspa[4];	/* sender protocol address */
52*16211Skarels 	u_char	arp_xtha[6];	/* target hardware address */
53*16211Skarels 	u_char	arp_xtpa[4];	/* target protocol address */
5411573Ssam };
55*16211Skarels #define	arp_sha(ea)	(*(struct ether_addr *)(ea)->arp_xsha)
56*16211Skarels #define	arp_spa(ea)	(*(struct in_addr *)(ea)->arp_xspa)
57*16211Skarels #define	arp_tha(ea)	(*(struct ether_addr *)(ea)->arp_xtha)
58*16211Skarels #define	arp_tpa(ea)	(*(struct in_addr *)(ea)->arp_xtpa)
5911573Ssam 
6011573Ssam /*
6111573Ssam  * Structure shared between the ethernet driver modules and
6211573Ssam  * the address resolution code.  For example, each ec_softc or il_softc
6311573Ssam  * begins with this structure.
6411573Ssam  */
6511573Ssam struct	arpcom {
6611573Ssam 	struct 	ifnet ac_if;	/* network-visible interface */
67*16211Skarels 	struct ether_addr ac_enaddr;	/* ethernet hardware address */
6811573Ssam };
6911573Ssam 
70*16211Skarels /*
71*16211Skarels  * Internet to ethernet address resolution table.
72*16211Skarels  */
73*16211Skarels struct	arptab {
74*16211Skarels 	struct	in_addr at_iaddr;	/* internet address */
75*16211Skarels 	struct	ether_addr at_enaddr;	/* ethernet address */
76*16211Skarels 	struct	mbuf *at_hold;		/* last packet until resolved/timeout */
77*16211Skarels 	u_char	at_timer;		/* minutes since last reference */
78*16211Skarels 	u_char	at_flags;		/* flags */
79*16211Skarels };
80*16211Skarels 
8112459Ssam #ifdef	KERNEL
82*16211Skarels struct ether_addr etherbroadcastaddr;
8311573Ssam struct	arptab *arptnew();
8411573Ssam #endif
85