xref: /csrg-svn/sys/netinet/if_ether.h (revision 52275)
123173Smckusick /*
229135Smckusick  * Copyright (c) 1982, 1986 Regents of the University of California.
332787Sbostic  * All rights reserved.
423173Smckusick  *
544472Sbostic  * %sccs.include.redist.c%
632787Sbostic  *
7*52275Storek  *	@(#)if_ether.h	7.7 (Berkeley) 01/30/92
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 
7750136Ssklower struct llinfo_arp {
7850136Ssklower 	struct	llinfo_arp *la_next;
7950136Ssklower 	struct	llinfo_arp *la_prev;
8050136Ssklower 	struct	rtentry *la_rt;
8150136Ssklower 	struct	mbuf *la_hold;		/* last packet until resolved/timeout */
8250136Ssklower 	long	la_asked;		/* last time we QUERIED for this addr */
8350136Ssklower #define la_timer la_rt->rt_rmx.rmx_expire /* deletion time in seconds */
8450136Ssklower };
8550136Ssklower 
8650136Ssklower struct sockaddr_inarp {
8750136Ssklower 	u_char	sin_len;
8850136Ssklower 	u_char	sin_family;
8950136Ssklower 	u_short sin_port;
9050136Ssklower 	struct	in_addr sin_addr;
9150136Ssklower 	struct	in_addr sin_srcaddr;
9250136Ssklower 	u_short	sin_tos;
9350136Ssklower 	u_short	sin_other;
9450136Ssklower #define SIN_PROXY 1
9550136Ssklower };
9650136Ssklower 
9712459Ssam #ifdef	KERNEL
9836819Skarels u_char	etherbroadcastaddr[6];
99*52275Storek struct	llinfo_arp *arptnew __P((struct in_addr *));
10050136Ssklower struct	llinfo_arp llinfo_arp;		/* head of the llinfo queue */
101*52275Storek int	ether_output __P((struct ifnet *, struct mbuf *, struct sockaddr *,
102*52275Storek 			  struct rtentry *));
103*52275Storek int	ether_input __P((struct ifnet *, struct ether_header *, struct mbuf *));
104*52275Storek char	*ether_sprintf __P((u_char *));
105*52275Storek int	arp_rtrequest __P((int, struct rtentry *, struct sockaddr *));
10650136Ssklower struct	ifqueue arpintrq;
107*52275Storek 
108*52275Storek /* XXX These probably belong elsewhere */
109*52275Storek void	in_arpinput __P((struct mbuf *));
110*52275Storek void	arpwhohas __P((struct arpcom *, struct in_addr *));
11111573Ssam #endif
112