xref: /csrg-svn/sys/netinet/if_ether.h (revision 44472)
123173Smckusick /*
229135Smckusick  * Copyright (c) 1982, 1986 Regents of the University of California.
332787Sbostic  * All rights reserved.
423173Smckusick  *
5*44472Sbostic  * %sccs.include.redist.c%
632787Sbostic  *
7*44472Sbostic  *	@(#)if_ether.h	7.5 (Berkeley) 06/28/90
823173Smckusick  */
99744Ssam 
109744Ssam /*
119744Ssam  * Structure of a 10Mb/s Ethernet header.
129744Ssam  */
139746Ssam struct	ether_header {
1418641Skarels 	u_char	ether_dhost[6];
1518641Skarels 	u_char	ether_shost[6];
169746Ssam 	u_short	ether_type;
179744Ssam };
189744Ssam 
1918641Skarels #define	ETHERTYPE_PUP	0x0200		/* PUP protocol */
2018641Skarels #define	ETHERTYPE_IP	0x0800		/* IP protocol */
2118641Skarels #define ETHERTYPE_ARP	0x0806		/* Addr. resolution protocol */
229744Ssam 
239744Ssam /*
2418641Skarels  * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have
2525891Skarels  * (type-ETHERTYPE_TRAIL)*512 bytes of data followed
2625891Skarels  * by an ETHER type (as given above) and then the (variable-length) header.
279744Ssam  */
2818641Skarels #define	ETHERTYPE_TRAIL		0x1000		/* Trailer packet */
2918641Skarels #define	ETHERTYPE_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 {
4225891Skarels 	struct	arphdr ea_hdr;	/* fixed-size header */
4318641Skarels 	u_char	arp_sha[6];	/* sender hardware address */
4418641Skarels 	u_char	arp_spa[4];	/* sender protocol address */
4518641Skarels 	u_char	arp_tha[6];	/* target hardware address */
4618641Skarels 	u_char	arp_tpa[4];	/* target protocol address */
4711573Ssam };
4825891Skarels #define	arp_hrd	ea_hdr.ar_hrd
4925891Skarels #define	arp_pro	ea_hdr.ar_pro
5025891Skarels #define	arp_hln	ea_hdr.ar_hln
5125891Skarels #define	arp_pln	ea_hdr.ar_pln
5225891Skarels #define	arp_op	ea_hdr.ar_op
5311573Ssam 
5425891Skarels 
5511573Ssam /*
5611573Ssam  * Structure shared between the ethernet driver modules and
5711573Ssam  * the address resolution code.  For example, each ec_softc or il_softc
5811573Ssam  * begins with this structure.
5911573Ssam  */
6011573Ssam struct	arpcom {
6118641Skarels 	struct 	ifnet ac_if;		/* network-visible interface */
6218641Skarels 	u_char	ac_enaddr[6];		/* ethernet hardware address */
6318641Skarels 	struct in_addr ac_ipaddr;	/* copy of ip address- XXX */
6411573Ssam };
6511573Ssam 
6616211Skarels /*
6716211Skarels  * Internet to ethernet address resolution table.
6816211Skarels  */
6916211Skarels struct	arptab {
7016211Skarels 	struct	in_addr at_iaddr;	/* internet address */
7118641Skarels 	u_char	at_enaddr[6];		/* ethernet address */
7216211Skarels 	u_char	at_timer;		/* minutes since last reference */
7316211Skarels 	u_char	at_flags;		/* flags */
7424804Skarels 	struct	mbuf *at_hold;		/* last packet until resolved/timeout */
7516211Skarels };
7616211Skarels 
7712459Ssam #ifdef	KERNEL
7836819Skarels u_char	etherbroadcastaddr[6];
7911573Ssam struct	arptab *arptnew();
8036819Skarels int	ether_output(), ether_input();
8136819Skarels char	*ether_sprintf();
8211573Ssam #endif
83