enum {
	Nmaxaddr = 64,
	Nmhash = 31,

	Ncloneqid = 1,
	Naddrqid,
	N2ndqid,
	N3rdqid,
	Ndataqid,
	Nctlqid,
	Nstatqid,
	Ntypeqid,
	Nifstatqid,
	Nmtuqid,
};

/*
 *  Macros to manage struct qid's used for multiplexed devices
 */
#define NETTYPE(x)	(((uint32_t)x)&0x1f)
/* The net's ID + 1 is stored starting at 1 << 5.  So ID 0 = 32, ID 1 = 64, and
 * NETID == -1 means no netid */
#define NETID(x)	(((uint32_t)(x) >> 5) - 1)
#define NETQID(i,t)	((((uint32_t)(i) + 1) << 5) | (t))

/*
 *  one per multiplexed connection
 */
struct netfile {
	qlock_t qlock;

	int inuse;
	uint32_t mode;
	char owner[KNAMELEN];

	int type;					/* multiplexor type */
	int prom;					/* promiscuous mode */
	int scan;					/* base station scanning interval */
	int bridge;					/* bridge mode */
	int headersonly;			/* headers only - no data */
	uint8_t maddr[8];			/* bitmask of multicast addresses requested */
	int nmaddr;					/* number of multicast addresses */

	struct queue *iq;			/* input */
};

/*
 *  a network address
 */
struct netaddr {
	struct netaddr *next;		/* allocation chain */
	struct netaddr *hnext;
	uint8_t addr[Nmaxaddr];
	struct kref ref;
};

/*
 *  a network interface
 */
struct netif {
	qlock_t qlock;

	/* multiplexing */
	char name[KNAMELEN];		/* for top level directory */
	int nfile;					/* max number of Netfiles */
	struct netfile **f;

	/* about net */
	int limit;					/* flow control */
	int alen;					/* address length */
	int mbps;					/* megabits per sec */
	int link;					/* link status */
	int minmtu;
	int maxmtu;
	int mtu;
	uint8_t addr[Nmaxaddr];
	uint8_t bcast[Nmaxaddr];
	struct netaddr *maddr;		/* known multicast addresses */
	int nmaddr;					/* number of known multicast addresses */
	struct netaddr *mhash[Nmhash];	/* hash table of multicast addresses */
	int prom;					/* number of promiscuous opens */
	int scan;					/* number of base station scanners */
	int all;					/* number of -1 multiplexors */

	struct queue *oq;			/* output */

	/* statistics */
	uint64_t misses;
	uint64_t inpackets;
	uint64_t outpackets;
	uint64_t crcs;				/* input crc errors */
	uint64_t oerrs;				/* output errors */
	uint64_t frames;			/* framing errors */
	uint64_t overflows;			/* packet overflows */
	uint64_t buffs;				/* buffering errors */
	uint64_t soverflows;		/* software overflow */

	/* routines for touching the hardware */
	void *arg;
	void (*promiscuous) (void *, int);
	void (*multicast) (void *, uint8_t *, int);
	int (*hwmtu) (void *, int);	/* get/set mtu */
	void (*scanbs) (void *, unsigned int);	/* scan for base stations */
};

void netifinit(struct netif *, char *, int, uint32_t);
struct walkqid *netifwalk(struct netif *, struct chan *, struct chan *, char **,
						  int);
struct chan *netifopen(struct netif *, struct chan *, int);
void netifclose(struct netif *, struct chan *);
long netifread(struct netif *, struct chan *, void *, long, int64_t);
struct block *netifbread(struct netif *, struct chan *, long, int64_t);
long netifwrite(struct netif *, struct chan *, void *, long);
long netifwstat(struct netif *, struct chan *, uint8_t *, long);
long netifstat(struct netif *, struct chan *, uint8_t *, long);
int activemulti(struct netif *, uint8_t *, int);
