xref: /csrg-svn/sys/net/if.h (revision 5083)
1*5083Swnj /*	if.h	4.3	81/11/26	*/
24945Swnj 
34945Swnj /*
4*5083Swnj  * Definitions for network interfaces.
5*5083Swnj  */
6*5083Swnj struct ifqueue {
7*5083Swnj 	struct	mbuf *ifq_head;
8*5083Swnj 	struct	mbuf *ifq_tail;
9*5083Swnj };
10*5083Swnj 
11*5083Swnj /*
12*5083Swnj  * Structure defining a queue for a network interface.
134945Swnj  *
144945Swnj  * (Would like to call this struct ``if'', but C isn't PL/1.)
154945Swnj  */
164945Swnj struct ifnet {
174945Swnj 	short	if_unit;		/* sub-unit for lower level driver */
184945Swnj 	short	if_mtu;			/* maximum transmission unit */
194945Swnj 	short	if_net;			/* network number of interface */
20*5083Swnj 	int	if_host[2];		/* local net host number */
214945Swnj 	struct	in_addr if_addr;	/* internet address of interface */
22*5083Swnj 	struct	ifqueue if_snd;		/* output queue */
23*5083Swnj 	int	(*if_output)();		/* output routine */
24*5083Swnj 	int	(*if_ubareset)();	/* uba reset routine */
25*5083Swnj 	int	if_collisions;
26*5083Swnj 	int	if_ierrors;
27*5083Swnj 	int	if_oerrors;
284951Swnj 	struct	ifnet *if_next;
294945Swnj };
304945Swnj 
31*5083Swnj #define	IF_ENQUEUE(ifq, m) { \
32*5083Swnj 	(m)->m_act = 0; \
33*5083Swnj 	if ((ifq)->ifq_tail == 0) \
34*5083Swnj 		(ifq)->ifq_head = (ifq)->ifq_tail =  m; \
35*5083Swnj 	else \
36*5083Swnj 		(ifq)->ifq_tail->m_act = m; \
37*5083Swnj }
38*5083Swnj #define	IF_DEQUEUE(ifq, m) { \
39*5083Swnj 	(m) = (ifq)->ifq_head; \
40*5083Swnj 	if (m) { \
41*5083Swnj 		if (((ifq)->ifq_head = (m)->m_act) == 0) \
42*5083Swnj 			(ifq)->ifq_tail = 0; \
43*5083Swnj 		(m)->m_act = 0; \
44*5083Swnj 	} \
45*5083Swnj }
464945Swnj 
474945Swnj #ifdef KERNEL
48*5083Swnj #ifdef INET
49*5083Swnj struct	ifqueue	ipintrq;		/* ip packet input queue */
50*5083Swnj #endif
514945Swnj struct	ifnet *ifnet;
52*5083Swnj struct	ifnet *if_ifwithaddr(), *if_ifonnetof(), *if_gatewayfor();
534945Swnj #endif
54