xref: /csrg-svn/sys/netinet/if_ether.h (revision 29135)
123173Smckusick /*
2*29135Smckusick  * Copyright (c) 1982, 1986 Regents of the University of California.
323173Smckusick  * All rights reserved.  The Berkeley software License Agreement
423173Smckusick  * specifies the terms and conditions for redistribution.
523173Smckusick  *
6*29135Smckusick  *	@(#)if_ether.h	7.1 (Berkeley) 06/05/86
723173Smckusick  */
89744Ssam 
99744Ssam /*
109744Ssam  * Structure of a 10Mb/s Ethernet header.
119744Ssam  */
129746Ssam struct	ether_header {
1318641Skarels 	u_char	ether_dhost[6];
1418641Skarels 	u_char	ether_shost[6];
159746Ssam 	u_short	ether_type;
169744Ssam };
179744Ssam 
1818641Skarels #define	ETHERTYPE_PUP	0x0200		/* PUP protocol */
1918641Skarels #define	ETHERTYPE_IP	0x0800		/* IP protocol */
2018641Skarels #define ETHERTYPE_ARP	0x0806		/* Addr. resolution protocol */
219744Ssam 
229744Ssam /*
2318641Skarels  * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have
2425891Skarels  * (type-ETHERTYPE_TRAIL)*512 bytes of data followed
2525891Skarels  * by an ETHER type (as given above) and then the (variable-length) header.
269744Ssam  */
2718641Skarels #define	ETHERTYPE_TRAIL		0x1000		/* Trailer packet */
2818641Skarels #define	ETHERTYPE_NTRAILER	16
299746Ssam 
309746Ssam #define	ETHERMTU	1500
319746Ssam #define	ETHERMIN	(60-14)
3211573Ssam 
3311573Ssam /*
3411573Ssam  * Ethernet Address Resolution Protocol.
3511573Ssam  *
3611573Ssam  * See RFC 826 for protocol description.  Structure below is adapted
3711573Ssam  * to resolving internet addresses.  Field names used correspond to
3811573Ssam  * RFC 826.
3911573Ssam  */
4011573Ssam struct	ether_arp {
4125891Skarels 	struct	arphdr ea_hdr;	/* fixed-size header */
4218641Skarels 	u_char	arp_sha[6];	/* sender hardware address */
4318641Skarels 	u_char	arp_spa[4];	/* sender protocol address */
4418641Skarels 	u_char	arp_tha[6];	/* target hardware address */
4518641Skarels 	u_char	arp_tpa[4];	/* target protocol address */
4611573Ssam };
4725891Skarels #define	arp_hrd	ea_hdr.ar_hrd
4825891Skarels #define	arp_pro	ea_hdr.ar_pro
4925891Skarels #define	arp_hln	ea_hdr.ar_hln
5025891Skarels #define	arp_pln	ea_hdr.ar_pln
5125891Skarels #define	arp_op	ea_hdr.ar_op
5211573Ssam 
5325891Skarels 
5411573Ssam /*
5511573Ssam  * Structure shared between the ethernet driver modules and
5611573Ssam  * the address resolution code.  For example, each ec_softc or il_softc
5711573Ssam  * begins with this structure.
5811573Ssam  */
5911573Ssam struct	arpcom {
6018641Skarels 	struct 	ifnet ac_if;		/* network-visible interface */
6118641Skarels 	u_char	ac_enaddr[6];		/* ethernet hardware address */
6218641Skarels 	struct in_addr ac_ipaddr;	/* copy of ip address- XXX */
6311573Ssam };
6411573Ssam 
6516211Skarels /*
6616211Skarels  * Internet to ethernet address resolution table.
6716211Skarels  */
6816211Skarels struct	arptab {
6916211Skarels 	struct	in_addr at_iaddr;	/* internet address */
7018641Skarels 	u_char	at_enaddr[6];		/* ethernet address */
7116211Skarels 	u_char	at_timer;		/* minutes since last reference */
7216211Skarels 	u_char	at_flags;		/* flags */
7324804Skarels 	struct	mbuf *at_hold;		/* last packet until resolved/timeout */
7416211Skarels };
7516211Skarels 
7612459Ssam #ifdef	KERNEL
7718641Skarels u_char etherbroadcastaddr[6];
7811573Ssam struct	arptab *arptnew();
7925891Skarels char *ether_sprintf();
8011573Ssam #endif
81