plan 9 kernel history: overview | file list | diff list

1993/0525/port/netif.h (diff list | history)

port/netif.h on 1993/0525
1993/0525    
typedef struct Etherpkt	Etherpkt; 
typedef struct Netfile	Netfile; 
typedef struct Netif	Netif; 
 
enum 
{ 
	Nmaxaddr=	64, 
 
	Ncloneqid=	1, 
	N2ndqid, 
	N3rdqid, 
	Ndataqid, 
	Nctlqid, 
	Nstatqid, 
	Ntypeqid, 
}; 
 
/* 
 *  Macros to manage Qid's used for multiplexed devices 
 */ 
#define NETTYPE(x)	((x)&0x1f) 
#define NETID(x)	(((x)&~CHDIR)>>5) 
#define NETQID(i,t)	(((i)<<5)|(t)) 
 
/* 
 *  one per multiplexed connection 
 */ 
struct Netfile 
{ 
	QLock; 
 
	int	inuse; 
	ulong	mode; 
	char	owner[NAMELEN]; 
 
	int	type;		/* multiplexor type */ 
	int	prom;		/* promiscuous mode */ 
 
	Queue	*in;		/* input buffer */ 
}; 
 
/* 
 *  a network interface 
 */ 
struct Netif 
{ 
	QLock; 
 
	/* multiplexing */ 
	char	*name;			/* for top level directory */ 
	int	nfile;			/* max number of Netfiles */ 
	Netfile	**f; 
	Queue	*out;			/* output buffer */ 
 
	/* about net */ 
	int	limit;			/* flow control */ 
	int	alen;			/* address length */ 
	uchar	addr[Nmaxaddr]; 
	uchar	bcast[Nmaxaddr]; 
	int	prom; 
 
	/* statistics */ 
	int	misses; 
	int	inpackets; 
	int	outpackets; 
	int	crcs;		/* input crc errors */ 
	int	oerrs;		/* output erros */ 
	int	frames;		/* framing errors */ 
	int	overflows;	/* packet overflows */ 
	int	buffs;		/* buffering errors */ 
 
	/* routines for touching the hardware */ 
	void	*arg; 
	void	(*promiscuous)(void*, int); 
}; 
 
void	netifinit(Netif*, char*, int, ulong); 
int	netifwalk(Netif*, Chan*, char*); 
Chan*	netifopen(Netif*, Chan*, int); 
void	netifclose(Netif*, Chan*); 
long	netifread(Netif*, Chan*, void*, long, ulong); 
long	netifwrite(Netif*, Chan*, void*, long); 
void	netifwstat(Netif*, Chan*, char*); 
void	netifstat(Netif*, Chan*, char*); 
 
/* 
 *  Ethernet specific 
 */ 
enum 
{ 
	Eaddrlen=	6, 
	ETHERMINTU =	60,		/* minimum transmit size */ 
	ETHERMAXTU =	1514,		/* maximum transmit size */ 
	ETHERHDRSIZE =	14,		/* size of an ethernet header */ 
}; 
 
struct Etherpkt 
{ 
	uchar	d[Eaddrlen]; 
	uchar	s[Eaddrlen]; 
	uchar	type[2]; 
	uchar	data[1500]; 
}; 
 
extern uchar etherbcast[6]; 
 
/* 
 *  FDDI specific 
 */ 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)