xref: /dflybsd-src/stand/lib/netif.h (revision 479ab7f0492f2a51b48e8537e4f1dc686fc6014b)
1*479ab7f0SSascha Wildner /*	$NetBSD: netif.h,v 1.4 1995/09/14 23:45:30 pk Exp $	*/
2*479ab7f0SSascha Wildner 
3*479ab7f0SSascha Wildner /* $FreeBSD: src/lib/libstand/netif.h,v 1.1.1.1.6.1 2000/09/10 01:24:16 ps Exp $ */
4*479ab7f0SSascha Wildner 
5*479ab7f0SSascha Wildner #ifndef _STAND_NETIF_H_
6*479ab7f0SSascha Wildner #define	_STAND_NETIF_H_
7*479ab7f0SSascha Wildner 
8*479ab7f0SSascha Wildner #include "iodesc.h"
9*479ab7f0SSascha Wildner 
10*479ab7f0SSascha Wildner #define NENTS(x)	sizeof(x)/sizeof(x[0])
11*479ab7f0SSascha Wildner 
12*479ab7f0SSascha Wildner struct netif_driver {
13*479ab7f0SSascha Wildner 	const	char *netif_bname;
14*479ab7f0SSascha Wildner 	int	(*netif_match)(struct netif *, void *);
15*479ab7f0SSascha Wildner 	int	(*netif_probe)(struct netif *, void *);
16*479ab7f0SSascha Wildner 	void	(*netif_init)(struct iodesc *, void *);
17*479ab7f0SSascha Wildner 	int	(*netif_get)(struct iodesc *, void *, size_t, time_t);
18*479ab7f0SSascha Wildner 	int	(*netif_put)(struct iodesc *, void *, size_t);
19*479ab7f0SSascha Wildner 	void	(*netif_end)(struct netif *);
20*479ab7f0SSascha Wildner 	struct	netif_dif *netif_ifs;
21*479ab7f0SSascha Wildner 	int	netif_nifs;
22*479ab7f0SSascha Wildner };
23*479ab7f0SSascha Wildner 
24*479ab7f0SSascha Wildner struct netif_dif {
25*479ab7f0SSascha Wildner 	int		dif_unit;
26*479ab7f0SSascha Wildner 	int		dif_nsel;
27*479ab7f0SSascha Wildner 	struct netif_stats *dif_stats;
28*479ab7f0SSascha Wildner 	void		*dif_private;
29*479ab7f0SSascha Wildner 	/* the following fields are used internally by the netif layer */
30*479ab7f0SSascha Wildner 	u_long		dif_used;
31*479ab7f0SSascha Wildner };
32*479ab7f0SSascha Wildner 
33*479ab7f0SSascha Wildner struct netif_stats {
34*479ab7f0SSascha Wildner 	int	collisions;
35*479ab7f0SSascha Wildner 	int	collision_error;
36*479ab7f0SSascha Wildner 	int	missed;
37*479ab7f0SSascha Wildner 	int	sent;
38*479ab7f0SSascha Wildner 	int	received;
39*479ab7f0SSascha Wildner 	int	deferred;
40*479ab7f0SSascha Wildner 	int	overflow;
41*479ab7f0SSascha Wildner };
42*479ab7f0SSascha Wildner 
43*479ab7f0SSascha Wildner struct netif {
44*479ab7f0SSascha Wildner 	struct netif_driver	*nif_driver;
45*479ab7f0SSascha Wildner 	int			nif_unit;
46*479ab7f0SSascha Wildner 	int			nif_sel;
47*479ab7f0SSascha Wildner 	void			*nif_devdata;
48*479ab7f0SSascha Wildner };
49*479ab7f0SSascha Wildner 
50*479ab7f0SSascha Wildner extern struct netif_driver	*netif_drivers[];	/* machdep */
51*479ab7f0SSascha Wildner 
52*479ab7f0SSascha Wildner extern int			netif_debug;
53*479ab7f0SSascha Wildner 
54*479ab7f0SSascha Wildner void		netif_init(void);
55*479ab7f0SSascha Wildner struct netif	*netif_select(void *);
56*479ab7f0SSascha Wildner int		netif_probe(struct netif *, void *);
57*479ab7f0SSascha Wildner void		netif_attach(struct netif *, struct iodesc *, void *);
58*479ab7f0SSascha Wildner void		netif_detach(struct netif *);
59*479ab7f0SSascha Wildner ssize_t		netif_get(struct iodesc *, void *, size_t, time_t);
60*479ab7f0SSascha Wildner ssize_t		netif_put(struct iodesc *, void *, size_t);
61*479ab7f0SSascha Wildner 
62*479ab7f0SSascha Wildner int		netif_open(void *);
63*479ab7f0SSascha Wildner int		netif_close(int);
64*479ab7f0SSascha Wildner 
65*479ab7f0SSascha Wildner struct iodesc	*socktodesc(int);
66*479ab7f0SSascha Wildner 
67*479ab7f0SSascha Wildner #endif /* !_STAND_NETIF_H_ */
68*479ab7f0SSascha Wildner 
69