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

1997/0916/ip/ip.h (diff list | history)

1997/0327/sys/src/9/ip/ip.h:140,1461997/0403/sys/src/9/ip/ip.h:140,146 (short | long)
1997/0327    
 
	void		(*kick)(Conv*, int); 
	char*		(*connect)(Conv*, char**, int); 
	void		(*announce)(Conv*); 
1997/0403    
	char*		(*announce)(Conv*, char**, int); 
1997/0327    
	int		(*state)(char**, Conv*); 
	void		(*create)(Conv*); 
	void		(*close)(Conv*); 
1997/0327/sys/src/9/ip/ip.h:179,1841997/0403/sys/src/9/ip/ip.h:179,185
1997/0327    
Conv*	Fsprotoclone(Proto*, char*); 
Proto*	Fsrcvpcol(Fs*, byte); 
char*	Fsstdconnect(Conv*, char**, int); 
1997/0403    
char*	Fsstdannounce(Conv*, char**, int); 
1997/0327    
 
/* log flags */ 
enum 
1997/0403/sys/src/9/ip/ip.h:121,1271997/0417/sys/src/9/ip/ip.h:121,127 (short | long)
1997/0327    
Ipaddr	Mediagetaddr(Media*); 
Ipaddr	Mediagetraddr(Media*); 
void	Mediawrite(Media*, Block*, byte*); 
int	Mediaifcread(byte*, ulong, int); 
1997/0417    
int	Mediaifcread(char*, ulong, int); 
1997/0327    
char*	Mediaifcwrite(char*, int); 
void	Mediaresolver(Media*); 
void	Mediaread(Media*); 
1997/0417/sys/src/9/ip/ip.h:3,101997/0423/sys/src/9/ip/ip.h:3,12 (short | long)
1997/0327    
typedef struct	Conv	Conv; 
typedef struct	Fs	Fs; 
typedef union	Hwaddr	Hwaddr; 
1997/0423    
typedef struct	Ifcconv	Ifcconv; 
1997/0327    
typedef struct	Iproute	Iproute; 
typedef struct	Media	Media; 
1997/0423    
typedef struct	Multicast	Multicast; 
1997/0327    
typedef struct	Proto	Proto; 
typedef struct	Pstate	Pstate; 
typedef struct	Tcpc	Tcpc; 
1997/0417/sys/src/9/ip/ip.h:19,261997/0423/sys/src/9/ip/ip.h:21,31
1997/0327    
 
	MAXTTL=		255, 
 
1997/0423    
	Ipaddrlen=	4, 
1997/0327    
	Ipbcast=	0xffffffff,	/* ip broadcast address */ 
	Ipbcastobs=	0,		/* obsolete (but still used) ip broadcast addr */ 
1997/0423    
	Ipallsys=	0xe0000001,	/* multicast for all systems */ 
	Ipallrouter=	0xe0000002,	/* multicast for all routers */ 
1997/0327    
}; 
 
enum 
1997/0417/sys/src/9/ip/ip.h:87,971997/0423/sys/src/9/ip/ip.h:92,112
1997/0327    
	MPACKET, 
}; 
 
1997/0423    
/* one per multicast address per medium */ 
struct Multicast 
{ 
	Ipaddr	addr; 
	int	ref; 
	int	timeout; 
	Multicast *next; 
}; 
 
1997/0327    
struct Media 
{ 
	int	type;		/* Media type */ 
	Chan*	mchan;		/* Data channel */ 
	Chan*	achan;		/* Arp channel */ 
1997/0423    
	Chan*	cchan;		/* Control channel */ 
1997/0327    
	char*	dev;		/* device mfd points to */ 
	Ipaddr	myip[5]; 
	Ipaddr	mymask; 
1997/0417/sys/src/9/ip/ip.h:108,1131997/0423/sys/src/9/ip/ip.h:123,132
1997/0327    
	int	inuse; 
	Conv	*c;		/* for packet interface */ 
 
1997/0423    
	QLock	mlock;		/* lock for changing *multi */ 
	Multicast *multi;	/* list of multicast addresses we're listening to */ 
	int	mactive;	/* number of active multicast addresses */ 
 
1997/0327    
	Media*	link; 
}; 
int	Mediaforme(byte*); 
1997/0417/sys/src/9/ip/ip.h:122,1321997/0423/sys/src/9/ip/ip.h:141,154
1997/0327    
Ipaddr	Mediagetraddr(Media*); 
void	Mediawrite(Media*, Block*, byte*); 
1997/0417    
int	Mediaifcread(char*, ulong, int); 
1997/0327    
char*	Mediaifcwrite(char*, int); 
1997/0423    
char*	Mediaifcwrite(Ifcconv*, char*, int); 
1997/0327    
void	Mediaresolver(Media*); 
void	Mediaread(Media*); 
int	Mediaarp(Media*, Block*, byte*, Hwaddr*); 
Media*	Mediafind(Iproute*); 
1997/0423    
Multicast*	Mediacopymulti(Media*); 
void	Mediamulticastadd(Media*, Ifcconv*, Ipaddr); 
void	Mediamulticastrem(Media*, Ipaddr); 
1997/0327    
 
/* 
 *  one per multiplexed protocol 
1997/0417/sys/src/9/ip/ip.h:144,1501997/0423/sys/src/9/ip/ip.h:166,172
1997/0327    
	int		(*state)(char**, Conv*); 
	void		(*create)(Conv*); 
	void		(*close)(Conv*); 
	void		(*rcv)(Block*); 
1997/0423    
	void		(*rcv)(Media*, Block*); 
1997/0327    
	char*		(*ctl)(Conv*, char**, int); 
	void		(*advise)(Block*, char*); 
 
1997/0417/sys/src/9/ip/ip.h:195,2001997/0423/sys/src/9/ip/ip.h:217,223
1997/0327    
	Loggre=		1<<9, 
	Logppp=		1<<10, 
	Logtcpmsg=	1<<11, 
1997/0423    
	Logigmp=	1<<12, 
1997/0327    
}; 
 
extern int	logmask;	/* mask of things to debug */ 
1997/0417/sys/src/9/ip/ip.h:213,2211997/0423/sys/src/9/ip/ip.h:236,246
1997/0327    
extern Fs	fs; 
extern Media*	media; 
extern int	iprouting;	/* true if routing turned on */ 
1997/0423    
extern void	(*igmpreportfn)(Media*, byte*); 
1997/0327    
 
int	arpread(byte*, ulong, int); 
char*	arpwrite(char*, int); 
1997/0423    
void	closeifcconv(Ifcconv*); 
1997/0327    
Ipaddr	defmask(Ipaddr); 
int	eipconv(va_list*, Fconv*); 
int	equivip(byte*, byte*); 
1997/0417/sys/src/9/ip/ip.h:226,2361997/0423/sys/src/9/ip/ip.h:251,264
1997/0327    
ushort	ipcsum(byte*); 
void	(*ipextprotoiput)(Block*); 
Ipaddr	ipgetsrc(byte*); 
void	ipiput(Block*); 
1997/0423    
void	ipiput(Media*, Block*); 
1997/0327    
void	ipoput(Block*, int, int); 
int	ipstats(char*, int); 
1997/0423    
int	ismcast(byte*); 
int	isbmcast(byte*); 
1997/0327    
byte*	logctl(byte*); 
void	maskip(byte*, byte*, byte*); 
1997/0423    
Ifcconv* newifcconv(void); 
1997/0327    
ulong	nhgetl(byte*); 
ushort	nhgets(byte*); 
void	(*pktifcrcv)(Conv*, Block*); 
1997/0417/sys/src/9/ip/ip.h:237,2441997/0423/sys/src/9/ip/ip.h:265,272
1997/0327    
ushort	ptclcsum(Block*, int, int); 
int	pullblock(Block**, int); 
Block*	pullupblock(Block*, int); 
char*	routeadd(Ipaddr, Ipaddr, Ipaddr); 
void	routedelete(ulong, ulong); 
1997/0423    
char*	routeadd(Ipaddr, Ipaddr, Ipaddr, Media *m); 
void	routedelete(ulong, ulong, Media *m); 
1997/0327    
int	routeread(byte*, ulong, int); 
char*	routewrite(char*, int); 
 
1997/0417/sys/src/9/ip/ip.h:246,2491997/0423/sys/src/9/ip/ip.h:274,277
1997/0327    
 * ipaux.c 
 */ 
int	myetheraddr(uchar*, char*); 
ulong	parseip(char*, char*); 
1997/0423    
ulong	parseip(uchar*, char*); 
1997/0423/sys/src/9/ip/ip.h:183,1881997/0806/sys/src/9/ip/ip.h:183,189 (short | long)
1997/0327    
	ulong		lenerr;			/* short packet */ 
	ulong		order;			/* out of order */ 
	ulong		rexmit;			/* retransmissions */ 
1997/0806    
	ulong		wclosed;		/* window closed */ 
1997/0327    
}; 
 
struct Fs 
1997/0423/sys/src/9/ip/ip.h:218,2231997/0806/sys/src/9/ip/ip.h:219,226
1997/0327    
	Logppp=		1<<10, 
	Logtcpmsg=	1<<11, 
1997/0423    
	Logigmp=	1<<12, 
1997/0806    
	Logudpmsg=	1<<13, 
	Logipmsg=	1<<14, 
1997/0327    
}; 
 
extern int	logmask;	/* mask of things to debug */ 
1997/0806/sys/src/9/ip/ip.h:21,271997/0815/sys/src/9/ip/ip.h:21,27 (short | long)
1997/0327    
 
	MAXTTL=		255, 
 
1997/0423    
	Ipaddrlen=	4, 
1997/0815    
	IPaddrlen=	4, 
1997/0327    
	Ipbcast=	0xffffffff,	/* ip broadcast address */ 
	Ipbcastobs=	0,		/* obsolete (but still used) ip broadcast addr */ 
1997/0423    
	Ipallsys=	0xe0000001,	/* multicast for all systems */ 
1997/0815/sys/src/9/ip/ip.h:250,2551997/0903/sys/src/9/ip/ip.h:250,256 (short | long)
1997/0327    
void	fatal(byte*, ...); 
void	hnputl(byte*, ulong); 
void	hnputs(byte*, ushort); 
1997/0903    
void	icmpnoconv(Block*); 
1997/0327    
void	initfrag(int); 
ushort	ipcsum(byte*); 
void	(*ipextprotoiput)(Block*); 
1997/0903/sys/src/9/ip/ip.h:169,1741997/0916/sys/src/9/ip/ip.h:169,175 (short | long)
1997/0423    
	void		(*rcv)(Media*, Block*); 
1997/0327    
	char*		(*ctl)(Conv*, char**, int); 
	void		(*advise)(Block*, char*); 
1997/0916    
	int		(*stats)(char*, int); 
1997/0327    
 
	Conv		**conv;		/* array of conversations */ 
	int		ptclsize;	/* size of per protocol ctl block */ 
1997/0903/sys/src/9/ip/ip.h:183,1891997/0916/sys/src/9/ip/ip.h:184,189
1997/0327    
	ulong		lenerr;			/* short packet */ 
	ulong		order;			/* out of order */ 
	ulong		rexmit;			/* retransmissions */ 
1997/0806    
	ulong		wclosed;		/* window closed */ 
1997/0327    
}; 
 
struct Fs 
1997/0916/sys/src/9/ip/ip.h:129,1341997/0926/sys/src/9/ip/ip.h:129,135 (short | long)
1997/0423    
 
1997/0327    
	Media*	link; 
}; 
1997/0926    
int	Mediabooting(void); 
1997/0327    
int	Mediaforme(byte*); 
int	Mediaforpt2pt(byte*); 
Ipaddr	Mediagetsrc(byte*); 
1997/0916/sys/src/9/ip/ip.h:266,2711997/0926/sys/src/9/ip/ip.h:267,273
1997/0327    
ulong	nhgetl(byte*); 
ushort	nhgets(byte*); 
void	(*pktifcrcv)(Conv*, Block*); 
1997/0926    
ushort	ptclbsum(byte*, int); 
1997/0327    
ushort	ptclcsum(Block*, int, int); 
int	pullblock(Block**, int); 
Block*	pullupblock(Block*, int); 
1997/0926/sys/src/9/ip/ip.h:1,151998/0306/sys/src/9/ip/ip.h:1,19 (short | long)
1997/0327    
typedef	ulong	Ipaddr; 
typedef uchar	byte; 
typedef struct	Conv	Conv; 
typedef struct	Fs	Fs; 
typedef union	Hwaddr	Hwaddr; 
1997/0423    
typedef struct	Ifcconv	Ifcconv; 
1998/0306    
typedef struct	Ipself	Ipself; 
typedef struct	Iplink	Iplink; 
typedef struct	Iplifc	Iplifc; 
typedef struct	Ipmulti	Ipmulti; 
1997/0327    
typedef struct	Iproute	Iproute; 
typedef struct	Media	Media; 
1997/0423    
typedef struct	Multicast	Multicast; 
1998/0306    
typedef struct	Ipifc	Ipifc; 
typedef struct	Medium	Medium; 
1997/0327    
typedef struct	Proto	Proto; 
typedef struct	Pstate	Pstate; 
typedef struct	Tcpc	Tcpc; 
1998/0306    
typedef struct	Arpent	Arpent; 
typedef struct	Route	Route; 
1997/0327    
 
enum 
{ 
1997/0926/sys/src/9/ip/ip.h:18,311998/0306/sys/src/9/ip/ip.h:22,39
1997/0327    
	Nhash=		64, 
	Maxincall=	5, 
	Nchans=		256, 
1998/0306    
	MAClen=		16,		/* longest mac address */ 
1997/0327    
 
	MAXTTL=		255, 
 
1997/0815    
	IPaddrlen=	4, 
1997/0327    
	Ipbcast=	0xffffffff,	/* ip broadcast address */ 
	Ipbcastobs=	0,		/* obsolete (but still used) ip broadcast addr */ 
1997/0423    
	Ipallsys=	0xe0000001,	/* multicast for all systems */ 
	Ipallrouter=	0xe0000002,	/* multicast for all routers */ 
1998/0306    
	IPaddrlen=	16, 
	IPv4addrlen=	4, 
	IPv4off=	12, 
	IPllen=		4, 
 
	/* ip versions */ 
	V4=		4, 
	V6=		6, 
1997/0327    
}; 
 
enum 
1997/0926/sys/src/9/ip/ip.h:46,531998/0306/sys/src/9/ip/ip.h:54,61
1997/0327    
	int	x;			/* conversation index */ 
	Proto*	p; 
 
	Ipaddr	laddr;			/* local IP address */ 
	Ipaddr	raddr;			/* remote IP address */ 
1998/0306    
	uchar	laddr[IPaddrlen];	/* local IP address */ 
	uchar	raddr[IPaddrlen];	/* remote IP address */ 
1997/0327    
	int	restricted;		/* remote port is restricted */ 
	ushort	lport;			/* local port number */ 
	ushort	rport;			/* remote port number */ 
1997/0926/sys/src/9/ip/ip.h:77,1551998/0306/sys/src/9/ip/ip.h:85,181
1997/0327    
	QLock	listenq; 
	Rendez	listenr; 
 
1998/0306    
	Ipmulti	*multi;			/* multicast bindings for this interface */ 
 
1997/0327    
	void*	ptcl;			/* protocol specific stuff */ 
}; 
 
union Hwaddr 
1998/0306    
struct Medium 
1997/0327    
{ 
	byte	ether[6]; 
1998/0306    
	char	*name; 
	int	hsize;		/* medium header size */ 
	int	minmtu;		/* default min mtu */ 
	int	maxmtu;		/* default max mtu */ 
	int	maclen;		/* mac address length  */ 
	void	(*bind)(Ipifc*, int, char**); 
	void	(*unbind)(Ipifc*); 
	void	(*bwrite)(Ipifc *ifc, Block *b, int version, uchar *ip); 
 
	/* for arming interfaces to receive multicast */ 
	void	(*addmulti)(Ipifc *ifc, uchar *a, uchar *ia); 
	void	(*remmulti)(Ipifc *ifc, uchar *a, uchar *ia); 
 
	/* process packets written to 'data' */ 
	void	(*pktin)(Ipifc *ifc, Block *bp); 
 
	/* routes for router boards */ 
	void	(*addroute)(Ipifc *ifc, int, uchar*, uchar*, uchar*, int); 
	void	(*remroute)(Ipifc *ifc, int, uchar*, uchar*); 
	void	(*flushroutes)(Ipifc *ifc); 
 
	/* for routing multicast groups */ 
	void	(*joinmulti)(Ipifc *ifc, uchar *a, uchar *ia, uchar **iap); 
	void	(*leavemulti)(Ipifc *ifc, uchar *a, uchar *ia); 
1997/0327    
}; 
 
enum 
1998/0306    
/* logical interface associated with a physical one */ 
struct Iplifc 
1997/0327    
{ 
	METHER,			/* Media types */ 
	MFDDI, 
	MPACKET, 
1998/0306    
	uchar	local[IPaddrlen]; 
	uchar	mask[IPaddrlen]; 
	uchar	remote[IPaddrlen]; 
	uchar	net[IPaddrlen]; 
	Iplink	*link;		/* addresses linked to this lifc */ 
	Iplifc	*next; 
1997/0327    
}; 
 
1997/0423    
/* one per multicast address per medium */ 
struct Multicast 
1998/0306    
/* binding twixt Ipself and Ipifc */ 
struct Iplink 
1997/0423    
{ 
	Ipaddr	addr; 
1998/0306    
	Ipself	*local; 
	Iplifc	*lifc; 
	Iplink	*locallink;	/* next link for this local address */ 
	Iplink	*lifclink;	/* next link for this ifc */ 
	ulong	expire; 
	Iplink	*next;		/* free list */ 
1997/0423    
	int	ref; 
	int	timeout; 
	Multicast *next; 
}; 
 
1997/0327    
struct Media 
1998/0306    
struct Ipifc 
1997/0327    
{ 
	int	type;		/* Media type */ 
	Chan*	mchan;		/* Data channel */ 
	Chan*	achan;		/* Arp channel */ 
1997/0423    
	Chan*	cchan;		/* Control channel */ 
1997/0327    
	char*	dev;		/* device mfd points to */ 
	Ipaddr	myip[5]; 
	Ipaddr	mymask; 
	Ipaddr	mynetmask; 
	Ipaddr	remip;		/* Address of remote side */ 
	byte	netmyip[4];	/* In Network byte order */ 
	int	arping;		/* true if we mus arp */ 
1998/0306    
	RWlock; 
	 
	Conv	*conv;		/* link to its conversation structure */ 
	char	dev[64];	/* device we're attached to */ 
	Medium	*m;		/* Media pointer */ 
1997/0327    
	int	maxmtu;		/* Maximum transfer unit */ 
	int	minmtu;		/* Minumum tranfer unit */ 
	int	hsize;		/* Media header size */ 
	Hwaddr; 
1998/0306    
	void	*arg;		/* medium specific */ 
 
	/* these are used so that we can unbind on the fly */ 
	Lock	idlock; 
	uchar	ifcid;		/* incremented each 'bind/unbind/add/remove' */ 
	int	ref;		/* number of proc's using this ipifc */ 
	Rendez	wait;		/* where unbinder waits for ref == 0 */ 
	int	unbinding; 
 
	uchar	mac[MAClen];	/* MAC address */ 
 
	Iplifc	*lifc;		/* logical interfaces on this physical one */ 
 
1997/0327    
	ulong	in, out;	/* message statistics */ 
	ulong	inerr, outerr;	/* ... */ 
	int	inuse; 
	Conv	*c;		/* for packet interface */ 
1998/0306    
}; 
1997/0327    
 
1997/0423    
	QLock	mlock;		/* lock for changing *multi */ 
	Multicast *multi;	/* list of multicast addresses we're listening to */ 
	int	mactive;	/* number of active multicast addresses */ 
                 
1997/0327    
	Media*	link; 
1998/0306    
/* 
 *  one per multicast-lifc pair used by a Conv 
 */ 
struct Ipmulti 
{ 
	uchar	ma[IPaddrlen]; 
	uchar	ia[IPaddrlen]; 
	Ipmulti	*next; 
1997/0327    
}; 
1997/0926    
int	Mediabooting(void); 
1997/0327    
int	Mediaforme(byte*); 
int	Mediaforpt2pt(byte*); 
Ipaddr	Mediagetsrc(byte*); 
void	Mediaclose(Media*); 
char*	Mediaopen(int, char*, Conv*, Ipaddr, Ipaddr, Ipaddr, int, Media**); 
Media*	Mediaroute(byte*, byte*); 
void	Mediasetaddr(Media*, Ipaddr, Ipaddr); 
void	Mediasetraddr(Media*, Ipaddr); 
Ipaddr	Mediagetaddr(Media*); 
Ipaddr	Mediagetraddr(Media*); 
void	Mediawrite(Media*, Block*, byte*); 
1997/0417    
int	Mediaifcread(char*, ulong, int); 
1997/0423    
char*	Mediaifcwrite(Ifcconv*, char*, int); 
1997/0327    
void	Mediaresolver(Media*); 
void	Mediaread(Media*); 
int	Mediaarp(Media*, Block*, byte*, Hwaddr*); 
Media*	Mediafind(Iproute*); 
1997/0423    
Multicast*	Mediacopymulti(Media*); 
void	Mediamulticastadd(Media*, Ifcconv*, Ipaddr); 
void	Mediamulticastrem(Media*, Ipaddr); 
1997/0327    
 
/* 
 *  one per multiplexed protocol 
1997/0926/sys/src/9/ip/ip.h:156,1621998/0306/sys/src/9/ip/ip.h:182,188
1997/0327    
 */ 
struct Proto 
{ 
	Lock; 
1998/0306    
	QLock; 
1997/0327    
	char*		name;		/* protocol name */ 
	int		x;		/* protocol index */ 
	int		ipproto;	/* ip protocol type */ 
1997/0926/sys/src/9/ip/ip.h:164,1761998/0306/sys/src/9/ip/ip.h:190,205
1997/0327    
	void		(*kick)(Conv*, int); 
	char*		(*connect)(Conv*, char**, int); 
1997/0403    
	char*		(*announce)(Conv*, char**, int); 
1997/0327    
	int		(*state)(char**, Conv*); 
1998/0306    
	char*		(*bind)(Conv*, char**, int); 
	int		(*state)(Conv*, char*, int); 
1997/0327    
	void		(*create)(Conv*); 
	void		(*close)(Conv*); 
1997/0423    
	void		(*rcv)(Media*, Block*); 
1998/0306    
	void		(*rcv)(uchar*, Block*); 
1997/0327    
	char*		(*ctl)(Conv*, char**, int); 
	void		(*advise)(Block*, char*); 
1997/0916    
	int		(*stats)(char*, int); 
1998/0306    
	int		(*local)(Conv*, char*, int); 
	int		(*inuse)(Conv*); 
1997/0327    
 
	Conv		**conv;		/* array of conversations */ 
	int		ptclsize;	/* size of per protocol ctl block */ 
1997/0926/sys/src/9/ip/ip.h:196,2111998/0306/sys/src/9/ip/ip.h:225,243
1997/0327    
	Proto*	t2p[256];		/* vector of all ip protocol handlers */ 
}; 
int	Fsconnected(Fs*, Conv*, char*); 
Conv*	Fsnewcall(Fs*, Conv*, Ipaddr, ushort, Ipaddr, ushort); 
1998/0306    
Conv*	Fsnewcall(Fs*, Conv*, uchar*, ushort, uchar*, ushort); 
1997/0327    
int	Fspcolstats(char*, int); 
int	Fsproto(Fs*, Proto*); 
int	Fsbuiltinproto(Fs*, byte); 
1998/0306    
int	Fsbuiltinproto(Fs*, uchar); 
1997/0327    
Conv*	Fsprotoclone(Proto*, char*); 
Proto*	Fsrcvpcol(Fs*, byte); 
1998/0306    
Proto*	Fsrcvpcol(Fs*, uchar); 
1997/0327    
char*	Fsstdconnect(Conv*, char**, int); 
1997/0403    
char*	Fsstdannounce(Conv*, char**, int); 
1998/0306    
char*	Fsstdbind(Conv*, char**, int); 
1997/0327    
 
/* log flags */ 
1998/0306    
/*  
 *  logging 
 */ 
1997/0327    
enum 
{ 
	Logip=		1<<1, 
1997/0926/sys/src/9/ip/ip.h:225,2311998/0306/sys/src/9/ip/ip.h:257,264
1997/0327    
}; 
 
extern int	logmask;	/* mask of things to debug */ 
extern Ipaddr	iponly;		/* ip address to print debugging for */ 
1998/0306    
extern uchar	iponly[IPaddrlen];		/* ip address to print debugging for */ 
extern int	iponlyset; 
1997/0327    
 
void netlogopen(void); 
void netlogclose(void); 
1997/0926/sys/src/9/ip/ip.h:233,2831998/0306/sys/src/9/ip/ip.h:266,465
1997/0327    
long netlogread(void*, ulong, long); 
void netlog(int, char*, ...); 
 
#define	msec	TK2MS(MACHP(0)->ticks) 
1998/0306    
/* 
 *  iproute.c 
 */ 
typedef	struct RouteTree RouteTree; 
typedef struct Routewalk Routewalk; 
typedef struct V4route V4route; 
typedef struct V6route V6route; 
1997/0327    
 
/* Globals */ 
extern int	debug; 
extern Fs	fs; 
extern Media*	media; 
extern int	iprouting;	/* true if routing turned on */ 
1997/0423    
extern void	(*igmpreportfn)(Media*, byte*); 
1998/0306    
enum 
{ 
1997/0327    
 
int	arpread(byte*, ulong, int); 
char*	arpwrite(char*, int); 
1997/0423    
void	closeifcconv(Ifcconv*); 
1997/0327    
Ipaddr	defmask(Ipaddr); 
int	eipconv(va_list*, Fconv*); 
int	equivip(byte*, byte*); 
void	fatal(byte*, ...); 
void	hnputl(byte*, ulong); 
void	hnputs(byte*, ushort); 
1997/0903    
void	icmpnoconv(Block*); 
1997/0327    
void	initfrag(int); 
ushort	ipcsum(byte*); 
void	(*ipextprotoiput)(Block*); 
Ipaddr	ipgetsrc(byte*); 
1997/0423    
void	ipiput(Media*, Block*); 
1997/0327    
void	ipoput(Block*, int, int); 
int	ipstats(char*, int); 
1997/0423    
int	ismcast(byte*); 
int	isbmcast(byte*); 
1997/0327    
byte*	logctl(byte*); 
void	maskip(byte*, byte*, byte*); 
1997/0423    
Ifcconv* newifcconv(void); 
1997/0327    
ulong	nhgetl(byte*); 
ushort	nhgets(byte*); 
void	(*pktifcrcv)(Conv*, Block*); 
1997/0926    
ushort	ptclbsum(byte*, int); 
1997/0327    
ushort	ptclcsum(Block*, int, int); 
int	pullblock(Block**, int); 
Block*	pullupblock(Block*, int); 
1997/0423    
char*	routeadd(Ipaddr, Ipaddr, Ipaddr, Media *m); 
void	routedelete(ulong, ulong, Media *m); 
1997/0327    
int	routeread(byte*, ulong, int); 
char*	routewrite(char*, int); 
1998/0306    
	/* type bits */ 
	Rv4=		(1<<0),		/* this is a version 4 route */ 
	Rifc=		(1<<1),		/* this route is a directly connected interface */ 
	Rptpt=		(1<<2),		/* this route is a pt to pt interface */ 
	Runi=		(1<<3),		/* a unicast self address */ 
	Rbcast=		(1<<4),		/* a broadcast self address */ 
	Rmulti=		(1<<5),		/* a multicast self address */ 
}; 
1997/0327    
 
1998/0306    
struct Routewalk { 
	int	n; 
	int	o; 
	int	h; 
	char*	p; 
	void*	state; 
	void	(*walk)(Route*, Routewalk*); 
}; 
 
struct	RouteTree 
{ 
	Route*	right; 
	Route*	left; 
	Route*	mid; 
	uchar	depth; 
	uchar	type; 
	uchar	ifcid;		/* must match ifc->id */ 
	Ipifc	*ifc; 
	char	tag[4]; 
}; 
 
struct V4route 
{ 
	ulong	address; 
	ulong	endaddress; 
	uchar	gate[IPv4addrlen]; 
}; 
 
struct V6route 
{ 
	ulong	address[IPllen]; 
	ulong	endaddress[IPllen]; 
	uchar	gate[IPaddrlen]; 
}; 
 
struct Route 
{ 
	RouteTree; 
 
	union { 
		V6route	v6; 
		V4route v4; 
	}; 
}; 
extern void	v4addroute(char *tag, uchar *a, uchar *mask, uchar *gate, int type); 
extern void	v6addroute(char *tag, uchar *a, uchar *mask, uchar *gate, int type); 
extern void	v4delroute(uchar *a, uchar *mask); 
extern void	v6delroute(uchar *a, uchar *mask); 
extern Route*	v4lookup(uchar *a); 
extern Route*	v6lookup(uchar *a); 
extern long	routeread(char*, ulong, int); 
extern long	routewrite(Chan*, char*, int); 
 
1997/0327    
/* 
1998/0306    
 *  arp.c 
 */ 
struct Arpent 
{ 
	uchar	ip[IPaddrlen]; 
	uchar	mac[MAClen]; 
	Medium	*type;		/* media type */ 
	Arpent*	hash; 
	Block*	hold; 
	Block*	last; 
	uint	time; 
	uint	used; 
	uchar	state; 
}; 
 
extern int	arpread(char*, ulong, int); 
extern int	arpwrite(char*, int); 
extern Arpent*	arpget(Block *bp, int version, Medium *type, uchar *ip, uchar *h); 
extern void	arprelease(Arpent *a); 
extern Block*	arpresolve(Arpent *a, Medium *type, uchar *mac); 
extern void	arpenter(Ipifc *ifc, int version, uchar *ip, uchar *mac, Medium *type, int norefresh); 
 
/* 
1997/0327    
 * ipaux.c 
 */ 
int	myetheraddr(uchar*, char*); 
1997/0423    
ulong	parseip(uchar*, char*); 
1998/0306    
 
typedef struct Cmdbuf	Cmdbuf; 
struct Cmdbuf 
{ 
	char	buf[64]; 
	char	*f[16]; 
	int	nf; 
}; 
 
extern int	myetheraddr(uchar*, char*); 
extern ulong	parseip(uchar*, char*); 
extern ulong	parseipmask(uchar*, char*); 
extern void	maskip(uchar *from, uchar *mask, uchar *to); 
extern int	parsemac(uchar *to, char *from, int len); 
extern uchar*	defmask(uchar*); 
extern int	isv4(uchar*); 
extern void	v4tov6(uchar *v6, uchar *v4); 
extern int	v6tov4(uchar *v4, uchar *v6); 
extern Cmdbuf*	parsecmd(char *a, int n); 
extern int	eipconv(va_list *arg, Fconv *f); 
 
#define	ipcmp(x, y) memcmp(x, y, IPaddrlen) 
#define	ipmove(x, y) memmove(x, y, IPaddrlen) 
 
extern uchar IPv4bcast[IPaddrlen]; 
extern uchar IPv4bcastobs[IPaddrlen]; 
extern uchar IPv4allsys[IPaddrlen]; 
extern uchar IPv4allrouter[IPaddrlen]; 
extern uchar IPnoaddr[IPaddrlen]; 
extern uchar v4prefix[IPaddrlen]; 
extern uchar IPallbits[IPaddrlen]; 
 
#define	msec	TK2MS(MACHP(0)->ticks) 
 
/* 
 *  media 
 */ 
extern Medium	ethermedium; 
extern Medium	nullmedium; 
extern Medium	pktmedium; 
extern Proto	ipifc;	 
 
/* 
 *  ipifc.c 
 */ 
extern Medium*	ipfindmedium(char *name); 
extern int	ipforme(uchar *addr); 
extern int	ipismulticast(uchar *); 
extern Ipifc*	findipifc(uchar *remote, int type); 
extern void	findlocalip(uchar *local, uchar *remote); 
extern int	ipv4local(Ipifc *ifc, uchar *addr); 
extern int	ipv6local(Ipifc *ifc, uchar *addr); 
extern Iplifc*	iplocalonifc(Ipifc *ifc, uchar *ip); 
extern int	ipproxyifc(Ipifc *ifc, uchar *ip); 
extern int	ipismulticast(uchar *ip); 
extern int	ipisbooting(void); 
extern int	ipifccheckin(Ipifc *ifc, Medium *med); 
extern void	ipifccheckout(Ipifc *ifc); 
extern int	ipifcgrab(Ipifc *ifc); 
extern void	ipifcaddroute(int, uchar*, uchar*, uchar*, int); 
extern void	ipifcremroute(int, uchar*, uchar*); 
extern void	ipifcremmulti(Conv *c, uchar *ma, uchar *ia); 
extern void	ipifcaddmulti(Conv *c, uchar *ma, uchar *ia); 
extern char*	ipifcrem(Ipifc *ifc, char **argv, int argc, int dolock); 
extern char*	ipifcadd(Ipifc *ifc, char **argv, int argc); 
 
/* 
 *  ip.c 
 */ 
extern void	closeifcconv(Ifcconv*); 
extern void	icmpnoconv(Block*); 
extern void	initfrag(int); 
extern ushort	ipcsum(uchar*); 
extern void	(*ipextprotoiput)(Block*); 
extern void	ipiput(uchar*, Block*); 
extern void	ipoput(Block*, int, int); 
extern int	ipstats(char*, int); 
extern uchar*	logctl(uchar*); 
extern Ifcconv* newifcconv(void); 
extern void	(*pktifcrcv)(Conv*, Block*); 
extern ushort	ptclbsum(uchar*, int); 
extern ushort	ptclcsum(Block*, int, int); 
 
/* 
 *  iprouter.c 
 */ 
void	useriprouter(uchar*, Block*); 
void	iprouteropen(void); 
void	iprouterclose(void); 
long	iprouterread(void*, int); 
 
/* 
 *  global to all of the stack 
 */ 
extern int	debug; 
extern Fs	fs; 
extern int	iprouting;	/* true if routing turned on */ 
extern void	(*igmpreportfn)(Ipifc*, uchar*); 
1998/0306/sys/src/9/ip/ip.h:116,1211998/0307/sys/src/9/ip/ip.h:116,123 (short | long)
1998/0306    
	/* for routing multicast groups */ 
	void	(*joinmulti)(Ipifc *ifc, uchar *a, uchar *ia, uchar **iap); 
	void	(*leavemulti)(Ipifc *ifc, uchar *a, uchar *ia); 
1998/0307    
 
	int	unbindonclose;	/* if non-zero, unbind on last close */ 
1997/0327    
}; 
 
1998/0306    
/* logical interface associated with a physical one */ 
1998/0306/sys/src/9/ip/ip.h:132,1401998/0307/sys/src/9/ip/ip.h:134,142
1998/0306    
/* binding twixt Ipself and Ipifc */ 
struct Iplink 
1997/0423    
{ 
1998/0306    
	Ipself	*local; 
1998/0307    
	Ipself	*self; 
1998/0306    
	Iplifc	*lifc; 
	Iplink	*locallink;	/* next link for this local address */ 
1998/0307    
	Iplink	*selflink;	/* next link for this local address */ 
1998/0306    
	Iplink	*lifclink;	/* next link for this ifc */ 
	ulong	expire; 
	Iplink	*next;		/* free list */ 
1998/0307/sys/src/9/ip/ip.h:340,3451998/0310/sys/src/9/ip/ip.h:340,346 (short | long)
1998/0306    
extern Route*	v6lookup(uchar *a); 
extern long	routeread(char*, ulong, int); 
extern long	routewrite(Chan*, char*, int); 
1998/0310    
extern void	routetype(int, char*); 
1998/0306    
 
1997/0327    
/* 
1998/0306    
 *  arp.c 
1998/0307/sys/src/9/ip/ip.h:432,4371998/0310/sys/src/9/ip/ip.h:433,439
1998/0306    
extern void	ipifcaddmulti(Conv *c, uchar *ma, uchar *ia); 
extern char*	ipifcrem(Ipifc *ifc, char **argv, int argc, int dolock); 
extern char*	ipifcadd(Ipifc *ifc, char **argv, int argc); 
1998/0310    
extern long	ipselftabread(char *a, ulong offset, int n); 
1998/0306    
 
/* 
 *  ip.c 
1998/0310/sys/src/9/ip/ip.h:2,181998/0313/sys/src/9/ip/ip.h:2,23 (short | long)
1997/0327    
typedef struct	Fs	Fs; 
typedef union	Hwaddr	Hwaddr; 
1997/0423    
typedef struct	Ifcconv	Ifcconv; 
1998/0313    
typedef struct	IP	IP; 
1998/0306    
typedef struct	Ipself	Ipself; 
1998/0313    
typedef struct	Ipselftab	Ipselftab; 
1998/0306    
typedef struct	Iplink	Iplink; 
typedef struct	Iplifc	Iplifc; 
typedef struct	Ipmulti	Ipmulti; 
1997/0327    
typedef struct	Iproute	Iproute; 
1998/0313    
typedef struct	IProuter IProuter; 
1998/0306    
typedef struct	Ipifc	Ipifc; 
1998/0313    
typedef struct	Log	Log; 
1998/0306    
typedef struct	Medium	Medium; 
1997/0327    
typedef struct	Proto	Proto; 
typedef struct	Pstate	Pstate; 
typedef struct	Tcpc	Tcpc; 
1998/0306    
typedef struct	Arpent	Arpent; 
1998/0313    
typedef struct	Arp Arp; 
1998/0306    
typedef struct	Route	Route; 
1997/0327    
 
enum 
1998/0310/sys/src/9/ip/ip.h:34,391998/0313/sys/src/9/ip/ip.h:39,47
1998/0306    
	/* ip versions */ 
	V4=		4, 
	V6=		6, 
1998/0313    
 
	/* 2^Lroot trees in the root table */ 
	Lroot	= 10, 
1997/0327    
}; 
 
enum 
1998/0310/sys/src/9/ip/ip.h:106,1121998/0313/sys/src/9/ip/ip.h:114,120
1998/0306    
	void	(*remmulti)(Ipifc *ifc, uchar *a, uchar *ia); 
 
	/* process packets written to 'data' */ 
	void	(*pktin)(Ipifc *ifc, Block *bp); 
1998/0313    
	void	(*pktin)(Fs *f, Ipifc *ifc, Block *bp); 
1998/0306    
 
	/* routes for router boards */ 
	void	(*addroute)(Ipifc *ifc, int, uchar*, uchar*, uchar*, int); 
1998/0310/sys/src/9/ip/ip.h:114,1201998/0313/sys/src/9/ip/ip.h:122,128
1998/0306    
	void	(*flushroutes)(Ipifc *ifc); 
 
	/* for routing multicast groups */ 
	void	(*joinmulti)(Ipifc *ifc, uchar *a, uchar *ia, uchar **iap); 
1998/0313    
	void	(*joinmulti)(Ipifc *ifc, uchar *a, uchar *ia); 
1998/0306    
	void	(*leavemulti)(Ipifc *ifc, uchar *a, uchar *ia); 
1998/0307    
 
	int	unbindonclose;	/* if non-zero, unbind on last close */ 
1998/0310/sys/src/9/ip/ip.h:196,2081998/0313/sys/src/9/ip/ip.h:204,217
1998/0306    
	int		(*state)(Conv*, char*, int); 
1997/0327    
	void		(*create)(Conv*); 
	void		(*close)(Conv*); 
1998/0306    
	void		(*rcv)(uchar*, Block*); 
1998/0313    
	void		(*rcv)(Proto*, uchar*, Block*); 
1997/0327    
	char*		(*ctl)(Conv*, char**, int); 
	void		(*advise)(Block*, char*); 
1997/0916    
	int		(*stats)(char*, int); 
1998/0313    
	void		(*advise)(Proto*, Block*, char*); 
	int		(*stats)(Proto*, char*, int); 
1998/0306    
	int		(*local)(Conv*, char*, int); 
	int		(*inuse)(Conv*); 
1997/0327    
 
1998/0313    
	Fs		*f;		/* file system this proto is part of */ 
1997/0327    
	Conv		**conv;		/* array of conversations */ 
	int		ptclsize;	/* size of per protocol ctl block */ 
	int		nc;		/* number of conversations */ 
1998/0310/sys/src/9/ip/ip.h:211,2231998/0313/sys/src/9/ip/ip.h:220,240
1997/0327    
	ushort		nextport; 
	ushort		nextrport; 
 
	ulong		csumerr;		/* checksum errors */ 
	ulong		hlenerr;		/* header length error */ 
	ulong		lenerr;			/* short packet */ 
	ulong		order;			/* out of order */ 
	ulong		rexmit;			/* retransmissions */ 
1998/0313    
	void		*priv; 
1997/0327    
}; 
 
1998/0313    
/* 
 *  Stream for sending packets to user level 
 */ 
struct IProuter { 
	QLock; 
	int	opens; 
	Queue	*q; 
}; 
 
/* 
 *  one per IP protocol stack 
 */ 
1997/0327    
struct Fs 
{ 
	Lock; 
1998/0310/sys/src/9/ip/ip.h:225,2331998/0313/sys/src/9/ip/ip.h:242,263
1997/0327    
	int	np; 
	Proto*	p[Maxproto+1];		/* list of supported protocols */ 
	Proto*	t2p[256];		/* vector of all ip protocol handlers */ 
1998/0313    
	Proto*	ipifc;			/* kludge for ipifcremroute & ipifcaddroute */ 
 
	IP	*ip; 
	Ipselftab	*self; 
	Arp	*arp; 
	IProuter iprouter; 
 
	Route	*v4root[1<<Lroot];	/* v4 routing forest */ 
	Route	*v6root[1<<Lroot];	/* v6 routing forest */ 
	Route	*queue;			/* used as temp when reinjecting routes */ 
 
	Log	*alog; 
1997/0327    
}; 
int	Fsconnected(Fs*, Conv*, char*); 
1998/0306    
Conv*	Fsnewcall(Fs*, Conv*, uchar*, ushort, uchar*, ushort); 
1998/0313    
 
int	Fsconnected(Conv*, char*); 
Conv*	Fsnewcall(Conv*, uchar*, ushort, uchar*, ushort); 
1997/0327    
int	Fspcolstats(char*, int); 
int	Fsproto(Fs*, Proto*); 
1998/0306    
int	Fsbuiltinproto(Fs*, uchar); 
1998/0310/sys/src/9/ip/ip.h:258,2731998/0313/sys/src/9/ip/ip.h:288,300
1997/0806    
	Logipmsg=	1<<14, 
1997/0327    
}; 
 
extern int	logmask;	/* mask of things to debug */ 
1998/0306    
extern uchar	iponly[IPaddrlen];		/* ip address to print debugging for */ 
extern int	iponlyset; 
1998/0313    
void	netloginit(Fs*); 
void	netlogopen(Fs*); 
void	netlogclose(Fs*); 
char*	netlogctl(Fs*, char*, int); 
long	netlogread(Fs*, void*, ulong, long); 
void	netlog(Fs*, int, char*, ...); 
1997/0327    
 
void netlogopen(void); 
void netlogclose(void); 
char* netlogctl(char*, int); 
long netlogread(void*, ulong, long); 
void netlog(int, char*, ...); 
                 
1998/0306    
/* 
 *  iproute.c 
 */ 
1998/0310/sys/src/9/ip/ip.h:332,3461998/0313/sys/src/9/ip/ip.h:359,375
1998/0306    
		V4route v4; 
	}; 
}; 
extern void	v4addroute(char *tag, uchar *a, uchar *mask, uchar *gate, int type); 
extern void	v6addroute(char *tag, uchar *a, uchar *mask, uchar *gate, int type); 
extern void	v4delroute(uchar *a, uchar *mask); 
extern void	v6delroute(uchar *a, uchar *mask); 
extern Route*	v4lookup(uchar *a); 
extern Route*	v6lookup(uchar *a); 
extern long	routeread(char*, ulong, int); 
extern long	routewrite(Chan*, char*, int); 
1998/0313    
extern void	v4addroute(Fs *f, char *tag, uchar *a, uchar *mask, uchar *gate, int type); 
extern void	v6addroute(Fs *f, char *tag, uchar *a, uchar *mask, uchar *gate, int type); 
extern void	v4delroute(Fs *f, uchar *a, uchar *mask); 
extern void	v6delroute(Fs *f, uchar *a, uchar *mask); 
extern Route*	v4lookup(Fs *f, uchar *a); 
extern Route*	v6lookup(Fs *f, uchar *a); 
extern long	routeread(Fs *f, char*, ulong, int); 
extern long	routewrite(Fs *f, Chan*, char*, int); 
1998/0310    
extern void	routetype(int, char*); 
1998/0313    
extern void	ipwalkroutes(Fs*, Routewalk*); 
extern void	convroute(Route*, uchar*, uchar*, uchar*, char*, int*); 
1998/0306    
 
1997/0327    
/* 
1998/0306    
 *  arp.c 
1998/0310/sys/src/9/ip/ip.h:358,3691998/0313/sys/src/9/ip/ip.h:387,399
1998/0306    
	uchar	state; 
}; 
 
extern int	arpread(char*, ulong, int); 
extern int	arpwrite(char*, int); 
extern Arpent*	arpget(Block *bp, int version, Medium *type, uchar *ip, uchar *h); 
extern void	arprelease(Arpent *a); 
extern Block*	arpresolve(Arpent *a, Medium *type, uchar *mac); 
extern void	arpenter(Ipifc *ifc, int version, uchar *ip, uchar *mac, Medium *type, int norefresh); 
1998/0313    
extern void	arpinit(Fs*); 
extern int	arpread(Arp*, char*, ulong, int); 
extern int	arpwrite(Arp*, char*, int); 
extern Arpent*	arpget(Arp*, Block *bp, int version, Medium *type, uchar *ip, uchar *h); 
extern void	arprelease(Arp*, Arpent *a); 
extern Block*	arpresolve(Arp*, Arpent *a, Medium *type, uchar *mac); 
extern void	arpenter(Arp*, Ipifc *ifc, int version, uchar *ip, uchar *mac, Medium *type, int norefresh); 
1998/0306    
 
/* 
1997/0327    
 * ipaux.c 
1998/0310/sys/src/9/ip/ip.h:408,4131998/0313/sys/src/9/ip/ip.h:438,444
1998/0306    
extern Medium	ethermedium; 
extern Medium	nullmedium; 
extern Medium	pktmedium; 
1998/0313    
extern Medium	tripmedium; 
1998/0306    
extern Proto	ipifc;	 
 
/* 
1998/0310/sys/src/9/ip/ip.h:414,4641998/0313/sys/src/9/ip/ip.h:445,507
1998/0306    
 *  ipifc.c 
 */ 
extern Medium*	ipfindmedium(char *name); 
extern int	ipforme(uchar *addr); 
1998/0313    
extern int	ipforme(Fs*, uchar *addr); 
1998/0306    
extern int	ipismulticast(uchar *); 
extern Ipifc*	findipifc(uchar *remote, int type); 
extern void	findlocalip(uchar *local, uchar *remote); 
1998/0313    
extern Ipifc*	findipifc(Fs*, uchar *remote, int type); 
extern void	findlocalip(Fs*, uchar *local, uchar *remote); 
1998/0306    
extern int	ipv4local(Ipifc *ifc, uchar *addr); 
extern int	ipv6local(Ipifc *ifc, uchar *addr); 
extern Iplifc*	iplocalonifc(Ipifc *ifc, uchar *ip); 
extern int	ipproxyifc(Ipifc *ifc, uchar *ip); 
1998/0313    
extern int	ipproxyifc(Fs *f, Ipifc *ifc, uchar *ip); 
1998/0306    
extern int	ipismulticast(uchar *ip); 
extern int	ipisbooting(void); 
extern int	ipifccheckin(Ipifc *ifc, Medium *med); 
extern void	ipifccheckout(Ipifc *ifc); 
extern int	ipifcgrab(Ipifc *ifc); 
extern void	ipifcaddroute(int, uchar*, uchar*, uchar*, int); 
extern void	ipifcremroute(int, uchar*, uchar*); 
1998/0313    
extern void	ipifcaddroute(Fs*, int, uchar*, uchar*, uchar*, int); 
extern void	ipifcremroute(Fs*, int, uchar*, uchar*); 
1998/0306    
extern void	ipifcremmulti(Conv *c, uchar *ma, uchar *ia); 
extern void	ipifcaddmulti(Conv *c, uchar *ma, uchar *ia); 
extern char*	ipifcrem(Ipifc *ifc, char **argv, int argc, int dolock); 
extern char*	ipifcadd(Ipifc *ifc, char **argv, int argc); 
1998/0310    
extern long	ipselftabread(char *a, ulong offset, int n); 
1998/0313    
extern long	ipselftabread(Fs*, char *a, ulong offset, int n); 
1998/0306    
 
/* 
 *  ip.c 
 */ 
extern void	closeifcconv(Ifcconv*); 
extern void	icmpnoconv(Block*); 
extern void	initfrag(int); 
1998/0313    
extern void	icmpnoconv(Fs*, Block*); 
extern void	initfrag(IP*, int); 
1998/0306    
extern ushort	ipcsum(uchar*); 
extern void	(*ipextprotoiput)(Block*); 
extern void	ipiput(uchar*, Block*); 
extern void	ipoput(Block*, int, int); 
extern int	ipstats(char*, int); 
1998/0313    
extern void	ipiput(Fs*, uchar*, Block*); 
extern void	ipoput(Fs*, Block*, int, int); 
extern int	ipstats(Fs*, char*, int); 
1998/0306    
extern uchar*	logctl(uchar*); 
extern Ifcconv* newifcconv(void); 
extern void	(*pktifcrcv)(Conv*, Block*); 
extern ushort	ptclbsum(uchar*, int); 
extern ushort	ptclcsum(Block*, int, int); 
1998/0313    
extern void	ip_init(Fs*); 
1998/0306    
 
/* 
1998/0313    
 * bootp.c 
 */ 
extern char*	bootp(Ipifc*); 
extern int	bootpread(char*, ulong, int); 
 
/* 
1998/0306    
 *  iprouter.c 
 */ 
void	useriprouter(uchar*, Block*); 
void	iprouteropen(void); 
void	iprouterclose(void); 
long	iprouterread(void*, int); 
1998/0313    
void	useriprouter(Fs*, uchar*, Block*); 
void	iprouteropen(Fs*); 
void	iprouterclose(Fs*); 
long	iprouterread(Fs*, void*, int); 
 
/* 
 *  resolving inferno/plan9 differences 
 */ 
Chan*		commonfdtochan(int, int, int, int); 
char*		commonuser(void); 
char*		commonerror(void); 
1998/0306    
 
/* 
 *  global to all of the stack 
1998/0313/sys/src/9/ip/ip.h:439,4451998/0314/sys/src/9/ip/ip.h:439,444 (short | long)
1998/0306    
extern Medium	nullmedium; 
extern Medium	pktmedium; 
1998/0313    
extern Medium	tripmedium; 
1998/0306    
extern Proto	ipifc;	 
 
/* 
 *  ipifc.c 
1998/0313/sys/src/9/ip/ip.h:469,4741998/0314/sys/src/9/ip/ip.h:468,474
1998/0306    
/* 
 *  ip.c 
 */ 
1998/0314    
extern void	iprouting(Fs*, int); 
1998/0306    
extern void	closeifcconv(Ifcconv*); 
1998/0313    
extern void	icmpnoconv(Fs*, Block*); 
extern void	initfrag(IP*, int); 
1998/0313/sys/src/9/ip/ip.h:508,5121998/0314/sys/src/9/ip/ip.h:508,511
1998/0306    
 */ 
extern int	debug; 
extern Fs	fs; 
extern int	iprouting;	/* true if routing turned on */ 
extern void	(*igmpreportfn)(Ipifc*, uchar*); 
1998/0314/sys/src/9/ip/ip.h:8,141998/0316/sys/src/9/ip/ip.h:8,13 (short | long)
1998/0306    
typedef struct	Iplink	Iplink; 
typedef struct	Iplifc	Iplifc; 
typedef struct	Ipmulti	Ipmulti; 
1997/0327    
typedef struct	Iproute	Iproute; 
1998/0313    
typedef struct	IProuter IProuter; 
1998/0306    
typedef struct	Ipifc	Ipifc; 
1998/0313    
typedef struct	Log	Log; 
1998/0316/sys/src/9/ip/ip.h:8,131998/0324/sys/src/9/ip/ip.h:8,14 (short | long)
Add Ipmux.
rsc Fri Mar 4 12:44:25 2005
1998/0306    
typedef struct	Iplink	Iplink; 
typedef struct	Iplifc	Iplifc; 
typedef struct	Ipmulti	Ipmulti; 
1998/0324    
typedef struct	Ipmux	Ipmux; 
1998/0313    
typedef struct	IProuter IProuter; 
1998/0306    
typedef struct	Ipifc	Ipifc; 
1998/0313    
typedef struct	Log	Log; 
1998/0316/sys/src/9/ip/ip.h:241,2471998/0324/sys/src/9/ip/ip.h:242,250
1997/0327    
	int	np; 
	Proto*	p[Maxproto+1];		/* list of supported protocols */ 
	Proto*	t2p[256];		/* vector of all ip protocol handlers */ 
1998/0324    
	Ipmux*	t2m[256];		/* vector of all ip multiplexors */ 
1998/0313    
	Proto*	ipifc;			/* kludge for ipifcremroute & ipifcaddroute */ 
1998/0324    
	Proto*	ipmux;			/* kludge for finding an ip multiplexor */ 
1998/0313    
 
	IP	*ip; 
	Ipselftab	*self; 
1998/0324/sys/src/9/ip/ip.h:237,2431998/0325/sys/src/9/ip/ip.h:237,243 (short | long)
Change Lock to RWlock in Fs.
rsc Fri Mar 4 12:44:25 2005
1998/0313    
 */ 
1997/0327    
struct Fs 
{ 
	Lock; 
1998/0325    
	RWlock; 
1997/0327    
 
	int	np; 
	Proto*	p[Maxproto+1];		/* list of supported protocols */ 
1998/0325/sys/src/9/ip/ip.h:241,2481998/0327/sys/src/9/ip/ip.h:241,247 (short | long)
Remove t2m.
rsc Fri Mar 4 12:44:25 2005
1997/0327    
 
	int	np; 
	Proto*	p[Maxproto+1];		/* list of supported protocols */ 
	Proto*	t2p[256];		/* vector of all ip protocol handlers */ 
1998/0324    
	Ipmux*	t2m[256];		/* vector of all ip multiplexors */ 
1998/0327    
	Proto*	t2p[256];		/* vector of all protocols */ 
1998/0313    
	Proto*	ipifc;			/* kludge for ipifcremroute & ipifcaddroute */ 
1998/0324    
	Proto*	ipmux;			/* kludge for finding an ip multiplexor */ 
1998/0313    
 
1998/0327/sys/src/9/ip/ip.h:411,4161998/0328/sys/src/9/ip/ip.h:411,417 (short | long)
Add v4parseip.
rsc Fri Mar 4 12:44:25 2005
1998/0306    
extern int	myetheraddr(uchar*, char*); 
extern ulong	parseip(uchar*, char*); 
extern ulong	parseipmask(uchar*, char*); 
1998/0328    
extern char*	v4parseip(uchar*, char*); 
1998/0306    
extern void	maskip(uchar *from, uchar *mask, uchar *to); 
extern int	parsemac(uchar *to, char *from, int len); 
extern uchar*	defmask(uchar*); 
1998/0328/sys/src/9/ip/ip.h:446,4511998/0423/sys/src/9/ip/ip.h:446,452 (short | long)
Add addipmedium to avoid hard-coded list of media.
rsc Fri Mar 4 12:44:25 2005
1998/0306    
 *  ipifc.c 
 */ 
extern Medium*	ipfindmedium(char *name); 
1998/0423    
extern void	addipmedium(Medium *med); 
1998/0313    
extern int	ipforme(Fs*, uchar *addr); 
1998/0306    
extern int	ipismulticast(uchar *); 
1998/0313    
extern Ipifc*	findipifc(Fs*, uchar *remote, int type); 
1998/0423/sys/src/9/ip/ip.h:264,2691998/0509/sys/src/9/ip/ip.h:264,270 (short | long)
1998/0306    
int	Fsbuiltinproto(Fs*, uchar); 
1997/0327    
Conv*	Fsprotoclone(Proto*, char*); 
1998/0306    
Proto*	Fsrcvpcol(Fs*, uchar); 
1998/0509    
Proto*	Fsrcvpcolx(Fs*, uchar); 
1997/0327    
char*	Fsstdconnect(Conv*, char**, int); 
1997/0403    
char*	Fsstdannounce(Conv*, char**, int); 
1998/0306    
char*	Fsstdbind(Conv*, char**, int); 
1998/0509/sys/src/9/ip/ip.h:125,1301998/0630/sys/src/9/ip/ip.h:125,132 (short | long)
1998/0313    
	void	(*joinmulti)(Ipifc *ifc, uchar *a, uchar *ia); 
1998/0306    
	void	(*leavemulti)(Ipifc *ifc, uchar *a, uchar *ia); 
1998/0307    
 
1998/0630    
	void	(*ares)(Fs*, int, uchar*, uchar*, int, int); 
 
1998/0307    
	int	unbindonclose;	/* if non-zero, unbind on last close */ 
1997/0327    
}; 
 
1998/0509/sys/src/9/ip/ip.h:288,2931998/0630/sys/src/9/ip/ip.h:290,298
1997/0423    
	Logigmp=	1<<12, 
1997/0806    
	Logudpmsg=	1<<13, 
	Logipmsg=	1<<14, 
1998/0630    
	Logrudp=	1<<15, 
	Logrudpmsg=	1<<16, 
 
1997/0327    
}; 
 
1998/0313    
void	netloginit(Fs*); 
1998/0509/sys/src/9/ip/ip.h:363,3701998/0630/sys/src/9/ip/ip.h:368,375
1998/0306    
}; 
1998/0313    
extern void	v4addroute(Fs *f, char *tag, uchar *a, uchar *mask, uchar *gate, int type); 
extern void	v6addroute(Fs *f, char *tag, uchar *a, uchar *mask, uchar *gate, int type); 
extern void	v4delroute(Fs *f, uchar *a, uchar *mask); 
extern void	v6delroute(Fs *f, uchar *a, uchar *mask); 
1998/0630    
extern void	v4delroute(Fs *f, uchar *a, uchar *mask, int dolock); 
extern void	v6delroute(Fs *f, uchar *a, uchar *mask, int dolock); 
1998/0313    
extern Route*	v4lookup(Fs *f, uchar *a); 
extern Route*	v6lookup(Fs *f, uchar *a); 
extern long	routeread(Fs *f, char*, ulong, int); 
1998/0509/sys/src/9/ip/ip.h:391,4011998/0630/sys/src/9/ip/ip.h:396,406
1998/0306    
 
1998/0313    
extern void	arpinit(Fs*); 
extern int	arpread(Arp*, char*, ulong, int); 
extern int	arpwrite(Arp*, char*, int); 
1998/0630    
extern int	arpwrite(Fs*, char*, int); 
1998/0313    
extern Arpent*	arpget(Arp*, Block *bp, int version, Medium *type, uchar *ip, uchar *h); 
extern void	arprelease(Arp*, Arpent *a); 
extern Block*	arpresolve(Arp*, Arpent *a, Medium *type, uchar *mac); 
extern void	arpenter(Arp*, Ipifc *ifc, int version, uchar *ip, uchar *mac, Medium *type, int norefresh); 
1998/0630    
extern void	arpenter(Fs*, int version, uchar *ip, uchar *mac, int len, int norefresh); 
1998/0306    
 
/* 
1997/0327    
 * ipaux.c 
1998/0630/sys/src/9/ip/ip.h:454,4591998/0728/sys/src/9/ip/ip.h:454,460 (short | long)
1998/0306    
extern Medium*	ipfindmedium(char *name); 
1998/0423    
extern void	addipmedium(Medium *med); 
1998/0313    
extern int	ipforme(Fs*, uchar *addr); 
1998/0728    
extern int	ipisbm(uchar *); 
1998/0306    
extern int	ipismulticast(uchar *); 
1998/0313    
extern Ipifc*	findipifc(Fs*, uchar *remote, int type); 
extern void	findlocalip(Fs*, uchar *local, uchar *remote); 
1998/0728/sys/src/9/ip/ip.h:481,4861998/0813/sys/src/9/ip/ip.h:481,487 (short | long)
1998/0314    
extern void	iprouting(Fs*, int); 
1998/0306    
extern void	closeifcconv(Ifcconv*); 
1998/0313    
extern void	icmpnoconv(Fs*, Block*); 
1998/0813    
extern void	icmpttlexceeded(Fs*, uchar*, Block*); 
1998/0313    
extern void	initfrag(IP*, int); 
1998/0306    
extern ushort	ipcsum(uchar*); 
extern void	(*ipextprotoiput)(Block*); 
1998/0813/sys/src/9/ip/ip.h:322,3281998/0815/sys/src/9/ip/ip.h:322,329 (short | long)
1998/0306    
	Rmulti=		(1<<5),		/* a multicast self address */ 
}; 
1997/0327    
 
1998/0306    
struct Routewalk { 
1998/0815    
struct Routewalk 
{ 
1998/0306    
	int	n; 
	int	o; 
	int	h; 
1998/0815/sys/src/9/ip/ip.h:240,2451998/0924/sys/src/9/ip/ip.h:240,246 (short | long)
1997/0327    
struct Fs 
{ 
1998/0325    
	RWlock; 
1998/0924    
	int	dev; 
1997/0327    
 
	int	np; 
	Proto*	p[Maxproto+1];		/* list of supported protocols */ 
Too many diffs (26 > 25). Stopping.


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