BBN-Vax-TCP/bbnnet/ifcb.h
struct ifcb { /* net i/f control block */
unchar /* dev indep flags */
if_avail:1, /* i/f available */
if_error:1, /* error on i/f */
if_needinit:1, /* i/f dev needs reset */
if_active:1, /* output in progress on i/f */
if_flush:1, /* flushing input buffers */
if_blocked:1; /* i/f temporarily blocked */
unchar if_flag; /* device dependent flags */
dev_t if_dev; /* i/f device */
unsigned short if_bufs; /* no. of bufs queued for this i/f */
unsigned short if_limit; /* maximum bufs for this i/f */
short if_mtu; /* maximum message size */
net_t if_net; /* net this i/f is on */
int if_olen; /* output length */
long if_oaddr; /* output uba mapping */
struct mbuf *if_outq_hd; /* -> output queue head */
struct mbuf *if_outq_tl; /* -> output queue tail */
struct mbuf *if_outq_cur; /* -> buffer currently being sent */
int if_ilen; /* input length */
long if_iaddr; /* input uba mapping */
struct mbuf *if_inq_hd; /* -> input queue head */
struct mbuf *if_inq_tl; /* -> input queue tail */
struct mbuf *if_inq_msg; /* -> top of input msg being rcvd */
struct mbuf *if_inq_cur; /* -> bottom of input msg being rcvd */
int (*if_send)(); /* -> local net send routine */
int (*if_rcv)(); /* -> local net input routine */
int (*if_raw)(); /* -> raw local net output routine */
int (*if_init)(); /* -> driver init routine */
int (*if_out)(); /* -> driver output routine */
};
struct if_local { /* local host address/ifcb correspondance */
struct socket if_addr; /* local internet address */
struct ifcb *if_ifcb; /* -> ifcb for this address */
};
/*
* Dummy structure for initialization. This ugliness is needed because it is
* impossible to initialize anything containing a union with C's wonderful
* initialization syntax. In particular, the socket struct is composed
* of several unions. The dummy structures substitute an unsigned long
* for the structure so that we can initialize it in netconf.
*/
struct if_localx { /* dummy local host structure for init */
long if_addr; /* local internet address */
struct ifcb *if_ifcb; /* -> ifcb for this address */
};
struct gway { /* gateway table entry */
unsigned int g_flags; /* flags */
net_t g_fnet; /* foreign net */
net_t g_lnet; /* local net */
struct socket g_local; /* local gateway address */
struct ifcb *g_ifcb; /* -> ifcb for gateway */
};
#define GWSMART 1 /* smart gateway */
#define GWFORMAT 2 /* gateway format flag */
#ifdef KERNEL
struct gway *gateway, *gatewayNGATE; /* -> gateway table */
int ngate;
#ifndef NETCONF
extern struct ifcb ifcb[];
extern nifcb;
extern struct if_local locnet[];
extern nlocnet;
#endif NETCONF
#endif KERNEL