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

📄 ip.h

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 H
字号:
typedef	struct	Enpkt	Enpkt;typedef	struct	Arppkt	Arppkt;typedef	struct	Ippkt	Ippkt;typedef	struct	Ilpkt	Ilpkt;typedef	struct	Udppkt	Udppkt;typedef	struct	Icmppkt	Icmppkt;typedef	struct	Ifc	Ifc;enum{	Easize		= 6,		/* Ether address size */	Pasize		= 4,		/* IP protocol address size */};enum{	Nqt=	8,};typedefstruct	Ilp{	Queue*	reply;		/* ethernet output */	uchar	iphis[Pasize];	/* his ip address (index) */	uchar	ipgate[Pasize];	/* his ip/gateway address */	Chan*	chan;		/* list of il channels */	int	alloc;		/* 1 means allocated */	int	srcp;		/* source port (index) */	int	dstp;		/* dest port (index) */	int	state;		/* connection state */	Lock;	Msgbuf*	unacked;	Msgbuf*	unackedtail;	Msgbuf*	outoforder;	ulong	next;		/* id of next to send */	ulong	recvd;		/* last packet received */	ulong	start;		/* local start id */	ulong	rstart;		/* remote start id */	ulong	acksent;	/* Last packet acked */	Timet	lastxmit;	/* time of last xmit */	Timet	lastrecv;	/* time of last recv */	Timet	timeout;	/* time out counter */	Timet	acktime;	/* acknowledge timer */	Timet	querytime;	/* Query timer */	ulong	delay;		/* Average of the fixed rtt delay */	ulong	rate;		/* Average byte rate */	ulong	mdev;		/* Mean deviation of predicted to real rtt */	ulong	maxrtt;		/* largest rtt seen */	ulong	rttack;		/* The ack we are waiting for */	int	rttlen;		/* Length of rttack packet */	ulong	rttstart;	/* Time we issued rttack packet */	ulong	unackedbytes;	int	rexmit;		/* number of rexmits of *unacked */	ulong	qt[Nqt+1];	/* state table for query messages */	int	qtx;		/* ... index into qt */	int	window;		/* maximum receive window */	Rendez	syn;		/* connect hang out */} Ilp;/* * Ethernet header */enum{	ETHERMINTU	= 60,		/* minimum transmit size */	ETHERMAXTU	= 1514,		/* maximum transmit size */	Arptype		= 0x0806,	Iptype		= 0x0800,	Icmpproto	= 1,	Igmpproto	= 2,	Tcpproto	= 6,	Udpproto	= 17,	Ilproto		= 40,	Nqueue		= 20,	Nfrag		= 6,		/* max number of non-contig ip fragments */	Nrock		= 20,		/* number of partial ip assembly stations */	Nb		= 211,		/* number of arp hash buckets */	Ne		= 10,		/* number of entries in each arp hash bucket */	Ensize		= 14,		/* ether header size */	Ipsize		= 20,		/* ip header size -- doesnt include Ensize */	Arpsize		= 28,		/* arp header size -- doesnt include Ensize */	Ilsize		= 18,		/* il header size -- doesnt include Ipsize/Ensize */	Udpsize		= 8,		/* il header size -- doesnt include Ipsize/Ensize */	Udpphsize	= 12,		/* udp pseudo ip header size */	IP_VER		= 0x40,			/* Using IP version 4 */	IP_HLEN		= Ipsize/4,		/* Header length in longs */	IP_DF		= 0x4000,		/* Don't fragment */	IP_MF		= 0x2000,		/* More fragments */	Arprequest	= 1,	Arpreply,	Ilfsport	= 17008,	Ilauthport	= 17020,	Ilfsout		= 5000,	SNTP		= 123,	SNTP_LOCAL	= 6001,};struct	Enpkt{	uchar	d[Easize];		/* destination address */	uchar	s[Easize];		/* source address */	uchar	type[2];		/* packet type */	uchar	data[ETHERMAXTU-(6+6+2)];	uchar	crc[4];};struct	Arppkt{	uchar	d[Easize];			/* ether header */	uchar	s[Easize];	uchar	type[2];	uchar	hrd[2];				/* hardware type, must be ether==1 */	uchar	pro[2];				/* protocol, must be ip */	uchar	hln;				/* hardware address len, must be Easize */	uchar	pln;				/* protocol address len, must be Pasize */	uchar	op[2];	uchar	sha[Easize];	uchar	spa[Pasize];	uchar	tha[Easize];	uchar	tpa[Pasize];};struct	Ippkt{	uchar	d[Easize];		/* ether header */	uchar	s[Easize];	uchar	type[2];	uchar	vihl;			/* Version and header length */	uchar	tos;			/* Type of service */	uchar	length[2];		/* packet length */	uchar	id[2];			/* Identification */	uchar	frag[2];		/* Fragment information */	uchar	ttl;			/* Time to live */	uchar	proto;			/* Protocol */	uchar	cksum[2];		/* Header checksum */	uchar	src[Pasize];		/* Ip source */	uchar	dst[Pasize];		/* Ip destination */};struct	Ilpkt{	uchar	d[Easize];		/* ether header */	uchar	s[Easize];	uchar	type[2];	uchar	vihl;			/* ip header */	uchar	tos;	uchar	length[2];	uchar	id[2];	uchar	frag[2];	uchar	ttl;	uchar	proto;	uchar	cksum[2];	uchar	src[Pasize];	uchar	dst[Pasize];	uchar	ilsum[2];		/* Checksum including header */	uchar	illen[2];		/* Packet length */	uchar	iltype;			/* Packet type */	uchar	ilspec;			/* Special */	uchar	ilsrc[2];		/* Src port */	uchar	ildst[2];		/* Dst port */	uchar	ilid[4];		/* Sequence id */	uchar	ilack[4];		/* Acked sequence */};struct	Udppkt{	uchar	d[Easize];		/* ether header */	uchar	s[Easize];	uchar	type[2];	uchar	vihl;			/* ip header */	uchar	tos;	uchar	length[2];	uchar	id[2];	uchar	frag[2];	uchar	ttl;	uchar	proto;	uchar	cksum[2];	uchar	src[Pasize];	uchar	dst[Pasize];	uchar	udpsrc[2];		/* Src port */	uchar	udpdst[2];		/* Dst port */	uchar	udplen[2];		/* Packet length */	uchar	udpsum[2];		/* Checksum including header */};struct	Icmppkt{	uchar	d[Easize];		/* ether header */	uchar	s[Easize];	uchar	type[2];	uchar	vihl;			/* ip header */	uchar	tos;	uchar	length[2];	uchar	id[2];	uchar	frag[2];	uchar	ttl;	uchar	proto;	uchar	cksum[2];	uchar	src[Pasize];	uchar	dst[Pasize];	uchar	icmptype;		/* Src port */	uchar	icmpcode;		/* Dst port */	uchar	icmpsum[2];		/* Checksum including header */	uchar	icmpbody[10];		/* Depends on type */};struct	Ifc{	Lock;	Queue*	reply;	Filter	work[3];	Filter	rate[3];	ulong	rcverr;	ulong	txerr;	ulong	sumerr;	ulong	rxpkt;	ulong	txpkt;	uchar	ea[Easize];		/* my ether address */	uchar	ipa[Pasize];		/* my ip address, pulled from netdb */	uchar	netgate[Pasize];	/* my ip gateway, pulled from netdb */	ulong	ipaddr;	ulong	mask;	ulong	cmask;	Ifc	*next;			/* List of configured interfaces */};Ifc*	enets;			/* List of configured interfaces */void	riprecv(Msgbuf*, Ifc*);void	sntprecv(Msgbuf *mb, Ifc *ifc);void	arpreceive(Enpkt*, int, Ifc*);void	ipreceive(Enpkt*, int, Ifc*);void	ilrecv(Msgbuf*, Ifc*);void	udprecv(Msgbuf*, Ifc*);void	ilrecv(Msgbuf*, Ifc*);void	icmprecv(Msgbuf*, Ifc*);void	igmprecv(Msgbuf*, Ifc*);void	tcprecv(Msgbuf*, Ifc*);void	iprouteinit(void);long	ipclassmask(uchar*);void	iproute(uchar*, uchar*, uchar*);void	getipa(Ifc*, int);int	ipforme(uchar*, Ifc*);int	ipcsum(uchar*);int	ptclcsum(uchar*, int);void	ipsend(Msgbuf*);void	ipsend1(Msgbuf*, Ifc*, uchar*);uchar 	authip[Pasize];		/* ip address of server - from config block */uchar	sntpip[Pasize];		/* ip address of sntp server */struct{	uchar	sysip[Pasize];	/* my ip - from config block */	uchar	defmask[Pasize];/* ip mask - from config block */	uchar	defgwip[Pasize];/* gateway ip - from config block */} ipaddr[10];

⌨️ 快捷键说明

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