xref: /csrg-svn/sys/netinet/if_ether.h (revision 18641)
1*18641Skarels /*	if_ether.h	6.4	85/04/16	*/
29744Ssam 
39744Ssam /*
49744Ssam  * Structure of a 10Mb/s Ethernet header.
59744Ssam  */
69746Ssam struct	ether_header {
7*18641Skarels 	u_char	ether_dhost[6];
8*18641Skarels 	u_char	ether_shost[6];
99746Ssam 	u_short	ether_type;
109744Ssam };
119744Ssam 
12*18641Skarels #define	ETHERTYPE_PUP	0x0200		/* PUP protocol */
13*18641Skarels #define	ETHERTYPE_IP	0x0800		/* IP protocol */
14*18641Skarels #define ETHERTYPE_ARP	0x0806		/* Addr. resolution protocol */
159744Ssam 
169744Ssam /*
17*18641Skarels  * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have
189746Ssam  * (type-ETHERPUP_TRAIL)*512 bytes of data followed
199744Ssam  * by a PUP type (as given above) and then the (variable-length) header.
209744Ssam  */
21*18641Skarels #define	ETHERTYPE_TRAIL		0x1000		/* Trailer packet */
22*18641Skarels #define	ETHERTYPE_NTRAILER	16
239746Ssam 
249746Ssam #define	ETHERMTU	1500
259746Ssam #define	ETHERMIN	(60-14)
2611573Ssam 
2711573Ssam /*
2811573Ssam  * Ethernet Address Resolution Protocol.
2911573Ssam  *
3011573Ssam  * See RFC 826 for protocol description.  Structure below is adapted
3111573Ssam  * to resolving internet addresses.  Field names used correspond to
3211573Ssam  * RFC 826.
3311573Ssam  */
3411573Ssam struct	ether_arp {
3511573Ssam 	u_short	arp_hrd;	/* format of hardware address */
3611573Ssam #define ARPHRD_ETHER 	1	/* ethernet hardware address */
3711573Ssam 	u_short	arp_pro;	/* format of proto. address (ETHERPUP_IPTYPE) */
3811573Ssam 	u_char	arp_hln;	/* length of hardware address (6) */
3911573Ssam 	u_char	arp_pln;	/* length of protocol address (4) */
4011573Ssam 	u_short	arp_op;
4111573Ssam #define	ARPOP_REQUEST	1	/* request to resolve address */
4211573Ssam #define	ARPOP_REPLY	2	/* response to previous request */
43*18641Skarels 	u_char	arp_sha[6];	/* sender hardware address */
44*18641Skarels 	u_char	arp_spa[4];	/* sender protocol address */
45*18641Skarels 	u_char	arp_tha[6];	/* target hardware address */
46*18641Skarels 	u_char	arp_tpa[4];	/* target protocol address */
4711573Ssam };
4811573Ssam 
4911573Ssam /*
5011573Ssam  * Structure shared between the ethernet driver modules and
5111573Ssam  * the address resolution code.  For example, each ec_softc or il_softc
5211573Ssam  * begins with this structure.
5311573Ssam  */
5411573Ssam struct	arpcom {
55*18641Skarels 	struct 	ifnet ac_if;		/* network-visible interface */
56*18641Skarels 	u_char	ac_enaddr[6];		/* ethernet hardware address */
57*18641Skarels 	struct in_addr ac_ipaddr;	/* copy of ip address- XXX */
5811573Ssam };
5911573Ssam 
6016211Skarels /*
6116211Skarels  * Internet to ethernet address resolution table.
6216211Skarels  */
6316211Skarels struct	arptab {
6416211Skarels 	struct	in_addr at_iaddr;	/* internet address */
65*18641Skarels 	u_char	at_enaddr[6];		/* ethernet address */
6616211Skarels 	struct	mbuf *at_hold;		/* last packet until resolved/timeout */
6716211Skarels 	u_char	at_timer;		/* minutes since last reference */
6816211Skarels 	u_char	at_flags;		/* flags */
6916211Skarels };
7016211Skarels 
7112459Ssam #ifdef	KERNEL
72*18641Skarels u_char etherbroadcastaddr[6];
7311573Ssam struct	arptab *arptnew();
7411573Ssam #endif
75