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