⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ip.h

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 H
📖 第 1 页 / 共 2 页
字号:
	int	np;	Proto*	p[Maxproto+1];		/* list of supported protocols */	Proto*	t2p[256];		/* vector of all protocols */	Proto*	ipifc;			/* kludge for ipifcremroute & ipifcaddroute */	Proto*	ipmux;			/* kludge for finding an ip multiplexor */	IP	*ip;	Ipselftab	*self;	Arp	*arp;	v6params	*v6p;	Route	*v4root[1<<Lroot];	/* v4 routing forest */	Route	*v6root[1<<Lroot];	/* v6 routing forest */	Route	*queue;			/* used as temp when reinjecting routes */	Netlog	*alog;	char	ndb[1024];		/* an ndb entry for this interface */	int	ndbvers;	long	ndbmtime;};/* one per default router known to host */struct v6router {	uchar	inuse;	Ipifc	*ifc;	int	ifcid;	uchar	routeraddr[IPaddrlen];	long	ltorigin;	Routerparams	rp;};struct v6params{	Routerparams	rp;		/* v6 params, one copy per node now */	Hostparams	hp;	v6router	v6rlist[3];	/* max 3 default routers, currently */	int		cdrouter;	/* uses only v6rlist[cdrouter] if   */ 					/* cdrouter >= 0. */};int	Fsconnected(Conv*, char*);Conv*	Fsnewcall(Conv*, uchar*, ushort, uchar*, ushort, uchar);int	Fspcolstats(char*, int);int	Fsproto(Fs*, Proto*);int	Fsbuiltinproto(Fs*, uchar);Conv*	Fsprotoclone(Proto*, char*);Proto*	Fsrcvpcol(Fs*, uchar);Proto*	Fsrcvpcolx(Fs*, uchar);char*	Fsstdconnect(Conv*, char**, int);char*	Fsstdannounce(Conv*, char**, int);char*	Fsstdbind(Conv*, char**, int);ulong	scalednconv(void);void	closeconv(Conv*);/*  *  logging */enum{	Logip=		1<<1,	Logtcp=		1<<2,	Logfs=		1<<3,	Logil=		1<<4,	Logicmp=	1<<5,	Logudp=		1<<6,	Logcompress=	1<<7,	Logilmsg=	1<<8,	Loggre=		1<<9,	Logppp=		1<<10,	Logtcprxmt=	1<<11,	Logigmp=	1<<12,	Logudpmsg=	1<<13,	Logipmsg=	1<<14,	Logrudp=	1<<15,	Logrudpmsg=	1<<16,	Logesp=		1<<17,	Logtcpwin=	1<<18,};void	netloginit(Fs*);void	netlogopen(Fs*);void	netlogclose(Fs*);void	netlogctl(Fs*, char*, int);long	netlogread(Fs*, void*, ulong, long);void	netlog(Fs*, int, char*, ...);void	ifcloginit(Fs*);long	ifclogread(Fs*, Chan *,void*, ulong, long);void	ifclog(Fs*, uchar *, int);void	ifclogopen(Fs*, Chan*);void	ifclogclose(Fs*, Chan*);/* *  iproute.c */typedef	struct RouteTree RouteTree;typedef struct Routewalk Routewalk;typedef struct V4route V4route;typedef struct V6route V6route;enum{	/* 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 */	Rproxy=		(1<<6),		/* this route should be proxied */};struct Routewalk{	int	o;	int	h;	char*	p;	char*	e;	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];	int	ref;};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(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, int dolock);extern void	v6delroute(Fs *f, uchar *a, uchar *mask, int dolock);extern Route*	v4lookup(Fs *f, uchar *a, Conv *c);extern Route*	v6lookup(Fs *f, uchar *a, Conv *c);extern long	routeread(Fs *f, char*, ulong, int);extern long	routewrite(Fs *f, Chan*, char*, int);extern void	routetype(int, char*);extern void	ipwalkroutes(Fs*, Routewalk*);extern void	convroute(Route*, uchar*, uchar*, uchar*, char*, int*);/* *  devip.c *//* *  Hanging off every ip channel's ->aux is the following structure. *  It maintains the state used by devip and iproute. */struct IPaux{	char	*owner;		/* the user that did the attach */	char	tag[4];};extern IPaux*	newipaux(char*, char*);/* *  arp.c */struct Arpent{	uchar	ip[IPaddrlen];	uchar	mac[MAClen];	Medium	*type;			/* media type */	Arpent*	hash;	Block*	hold;	Block*	last;	uint	ctime;			/* time entry was created or refreshed */	uint	utime;			/* time entry was last used */	uchar	state;	Arpent	*nextrxt;		/* re-transmit chain */	uint	rtime;			/* time for next retransmission */	uchar	rxtsrem;	Ipifc	*ifc;	uchar	ifcid;			/* must match ifc->id */};extern void	arpinit(Fs*);extern int	arpread(Arp*, char*, ulong, int);extern int	arpwrite(Fs*, char*, int);extern Arpent*	arpget(Arp*, Block *bp, int version, Ipifc *ifc, uchar *ip, uchar *h);extern void	arprelease(Arp*, Arpent *a);extern Block*	arpresolve(Arp*, Arpent *a, Medium *type, uchar *mac);extern void	arpenter(Fs*, int version, uchar *ip, uchar *mac, int len, int norefresh);/* * ipaux.c */extern int	myetheraddr(uchar*, char*);extern ulong	parseip(uchar*, char*);extern ulong	parseipmask(uchar*, char*);extern char*	v4parseip(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 int	eipfmt(Fmt*);#define	ipmove(x, y) memmove(x, y, IPaddrlen)#define	ipcmp(x, y) ( (x)[IPaddrlen-1] != (y)[IPaddrlen-1] || memcmp(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	NOW	TK2MS(MACHP(0)->ticks)/* *  media */extern Medium	ethermedium;extern Medium	nullmedium;extern Medium	pktmedium;extern Medium	tripmedium;/* *  ipifc.c */extern Medium*	ipfindmedium(char *name);extern void	addipmedium(Medium *med);extern int	ipforme(Fs*, uchar *addr);extern int	iptentative(Fs*, uchar *addr);extern int	ipisbm(uchar *);extern int	ipismulticast(uchar *);extern Ipifc*	findipifc(Fs*, uchar *remote, int type);extern void	findlocalip(Fs*, uchar *local, uchar *remote);extern int	ipv4local(Ipifc *ifc, uchar *addr);extern int	ipv6local(Ipifc *ifc, uchar *addr);extern int	ipv6anylocal(Ipifc *ifc, uchar *addr);extern Iplifc*	iplocalonifc(Ipifc *ifc, uchar *ip);extern int	ipproxyifc(Fs *f, 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(Fs*, int, uchar*, uchar*, uchar*, int);extern void	ipifcremroute(Fs*, 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);extern char*	ipifcadd(Ipifc *ifc, char **argv, int argc, int tentative, Iplifc *lifcp);extern long	ipselftabread(Fs*, char *a, ulong offset, int n);extern char*	ipifcaddpref6(Ipifc *ifc, char**argv, int argc);extern void	ipsendra6(Fs *f, int on);/* *  ip.c */extern void	iprouting(Fs*, int);extern void	icmpnoconv(Fs*, Block*);extern void	icmpcantfrag(Fs*, Block*, int);extern void	icmpttlexceeded(Fs*, uchar*, Block*);extern ushort	ipcsum(uchar*);extern void	ipiput4(Fs*, Ipifc*, Block*);extern void	ipiput6(Fs*, Ipifc*, Block*);extern int	ipoput4(Fs*, Block*, int, int, int, Conv*);extern int	ipoput6(Fs*, Block*, int, int, int, Conv*);extern int	ipstats(Fs*, char*, int);extern ushort	ptclbsum(uchar*, int);extern ushort	ptclcsum(Block*, int, int);extern void	ip_init(Fs*);extern void	update_mtucache(uchar*, ulong);extern ulong	restrict_mtu(uchar*, ulong);/* * bootp.c */extern char*	bootp(Ipifc*);extern int	bootpread(char*, ulong, int);/* *  resolving inferno/plan9 differences */Chan*		commonfdtochan(int, int, int, int);char*		commonuser(void);char*		commonerror(void);/* * chandial.c */extern Chan*	chandial(char*, char*, char*, Chan**);/* *  global to all of the stack */extern void	(*igmpreportfn)(Ipifc*, uchar*);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -