181404Speter/*	$NetBSD: netif.h,v 1.4 1995/09/14 23:45:30 pk Exp $	*/
281404Speter
381404Speter/* $FreeBSD$ */
481404Speter
581404Speter#ifndef __SYS_LIBNETBOOT_NETIF_H
681404Speter#define __SYS_LIBNETBOOT_NETIF_H
781404Speter#include "iodesc.h"
881404Speter
981404Speter#define NENTS(x)	sizeof(x)/sizeof(x[0])
1081404Speter
1181404Speterstruct netif_driver {
1281404Speter	const	char *netif_bname;
1381404Speter	int	(*netif_match)(struct netif *, void *);
1481404Speter	int	(*netif_probe)(struct netif *, void *);
1581404Speter	void	(*netif_init)(struct iodesc *, void *);
1681404Speter	int	(*netif_get)(struct iodesc *, void *, size_t, time_t);
1781404Speter	int	(*netif_put)(struct iodesc *, void *, size_t);
1881404Speter	void	(*netif_end)(struct netif *);
1981404Speter	struct	netif_dif *netif_ifs;
2081404Speter	int	netif_nifs;
2181404Speter};
2281404Speter
2381404Speterstruct netif_dif {
2481404Speter	int		dif_unit;
2581404Speter	int		dif_nsel;
2681404Speter	struct netif_stats *dif_stats;
2781404Speter	void		*dif_private;
2881404Speter	/* the following fields are used internally by the netif layer */
2981404Speter	u_long		dif_used;
3081404Speter};
3181404Speter
3281404Speterstruct netif_stats {
3381404Speter	int	collisions;
3481404Speter	int	collision_error;
3581404Speter	int	missed;
3681404Speter	int	sent;
3781404Speter	int	received;
3881404Speter	int	deferred;
3981404Speter	int	overflow;
4081404Speter};
4181404Speter
4281404Speterstruct netif {
4381404Speter	struct netif_driver	*nif_driver;
4481404Speter	int			nif_unit;
4581404Speter	int			nif_sel;
4681404Speter	void			*nif_devdata;
4781404Speter};
4881404Speter
4981404Speterextern struct netif_driver	*netif_drivers[];	/* machdep */
5081404Speterextern int			n_netif_drivers;
5181404Speter
5281404Speterextern int			netif_debug;
5381404Speter
5481404Spetervoid		netif_init(void);
5581404Speterstruct netif	*netif_select(void *);
5681404Speterint		netif_probe(struct netif *, void *);
5781404Spetervoid		netif_attach(struct netif *, struct iodesc *, void *);
5881404Spetervoid		netif_detach(struct netif *);
5981404Speterssize_t		netif_get(struct iodesc *, void *, size_t, time_t);
6081404Speterssize_t		netif_put(struct iodesc *, void *, size_t);
6181404Speter
6281404Speterint		netif_open(void *);
6381404Speterint		netif_close(int);
6481404Speter
6581404Speterstruct iodesc	*socktodesc(int);
6681404Speter
6781404Speter#endif /* __SYS_LIBNETBOOT_NETIF_H */
6881404Speter