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

1991/1014/port/ipdat.h (diff list | history)

1991/0424/sys/src/9/port/ipdat.h:248,2531991/0705/sys/src/9/port/ipdat.h:248,255 (short | long)
Add Nreseq.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
#define TIMER_RUN	1 
#define TIMER_EXPIRE	2 
 
1991/0705    
#define Nreseq		64 
 
1991/0424    
#define	set_timer(t,x)	(((t)->start) = (x)/MSPTICK) 
#define	dur_timer(t)	((t)->start) 
#define	read_timer(t)	((t)->count) 
1991/0705/sys/src/9/port/ipdat.h:12,191991/1012/sys/src/9/port/ipdat.h:12,22 (short | long)
Format edits. Add Ilhdr, IL constants, IL queue. Remove Ipconv.tcpctl.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
typedef struct Tcpctl	Tcpctl; 
typedef struct Tcphdr	Tcphdr; 
typedef struct Timer	Timer; 
1991/1012    
typedef struct Ilhdr	Ilhdr; 
typedef struct Ilcb	Ilcb; 
1991/0424    
 
struct Etherhdr { 
1991/1012    
struct Etherhdr 
{ 
1991/0424    
#define ETHER_HDR	14 
	uchar	d[6]; 
	uchar	s[6]; 
1991/0705/sys/src/9/port/ipdat.h:37,431991/1012/sys/src/9/port/ipdat.h:40,47
1991/0424    
#define ET_IP	0x0800 
 
/* A userlevel data gram */ 
struct Udphdr { 
1991/1012    
struct Udphdr 
{ 
1991/0424    
#define UDP_EHSIZE	22 
	uchar	d[6];		/* Ethernet destination */ 
	uchar	s[6];		/* Ethernet source */ 
1991/0705/sys/src/9/port/ipdat.h:62,701991/1012/sys/src/9/port/ipdat.h:66,119
1991/0424    
	uchar	udpcksum[2];	/* Checksum */ 
}; 
 
1991/1012    
struct Ilhdr 
{ 
#define IL_EHSIZE	22 
	uchar	d[6];		/* Ethernet destination */ 
	uchar	s[6];		/* Ethernet source */ 
	uchar	type[2];	/* Ethernet packet type */ 
	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 */ 
#define IL_HDRSIZE	16	 
	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 Ilcb 
{ 
	int	state; 
	Block	*unacked; 
	Block	*unackedtail; 
	Block	*outoforder; 
	Block	*outofordertail; 
	ulong	sent; 
	ulong	recvd; 
	ulong	lastack; 
}; 
 
enum 
{ 
	Ilsync, 
	Ildata, 
	Ildataquery, 
	Ilack, 
	Ilquerey, 
	Ilstate, 
}; 
 
1991/0424    
#define TCP_PKT	(TCP_EHSIZE+TCP_IPLEN+TCP_PHDRSIZE) 
 
struct Tcphdr { 
1991/1012    
struct Tcphdr 
{ 
1991/0424    
#define TCP_EHSIZE	14 
	uchar	d[6];		/* Ethernet destination */ 
	uchar	s[6];		/* Ethernet source */ 
1991/0705/sys/src/9/port/ipdat.h:96,1061991/1012/sys/src/9/port/ipdat.h:145,156
1991/0424    
	/* Options segment */ 
	uchar	tcpopt[2]; 
	uchar	tcpmss[2]; 
	}; 
1991/1012    
}; 
1991/0424    
 
 
 
struct Timer { 
1991/1012    
struct Timer 
{ 
1991/0424    
	Timer	*next; 
	Timer	*prev; 
	int	state; 
1991/0705/sys/src/9/port/ipdat.h:108,1161991/1012/sys/src/9/port/ipdat.h:158,167
1991/0424    
	int	count; 
	void	(*func)(void*); 
	void	*arg; 
	}; 
1991/1012    
}; 
1991/0424    
 
struct Tcpctl { 
1991/1012    
struct Tcpctl 
{ 
1991/0424    
	QLock; 
	uchar	state;		/* Connection state */ 
	uchar	type;		/* Listening or active connection */ 
1991/0705/sys/src/9/port/ipdat.h:166,1721991/1012/sys/src/9/port/ipdat.h:217,224
1991/0424    
	int	mdev;			/* Mean deviation of round trip */ 
}; 
 
struct	Tcp { 
1991/1012    
struct	Tcp 
{ 
1991/0424    
	Port	source; 
	Port	dest; 
	int	seq; 
1991/0705/sys/src/9/port/ipdat.h:175,1921991/1012/sys/src/9/port/ipdat.h:227,246
1991/0424    
	ushort	wnd; 
	ushort	up; 
	ushort	mss; 
	}; 
1991/1012    
}; 
1991/0424    
 
struct Reseq { 
1991/1012    
struct Reseq 
{ 
1991/0424    
	Reseq 	*next; 
	Tcp	seg; 
	Block	*bp; 
	ushort	length; 
	char	tos; 
	}; 
1991/1012    
}; 
1991/0424    
 
/* An ip interface used for UDP/TCP/ARP/ICMP */ 
struct Ipconv { 
1991/1012    
struct Ipconv 
{ 
1991/0424    
	QLock;				/* Ref count lock */ 
	int 	ref; 
	Qinfo	*stproto;		/* Stream protocol for this device */ 
1991/0705/sys/src/9/port/ipdat.h:207,2131991/1012/sys/src/9/port/ipdat.h:261,270
1991/0424    
	int	backlog;		/* Maximum number of waiting connections */ 
	int	curlog;			/* Number of waiting connections */ 
	int 	contype; 
	Tcpctl	tcpctl;			/* Tcp control block */ 
1991/1012    
	union { 
		Tcpctl	tcpctl;			/* Tcp control block */ 
		Ilcb	ilctl;			/* Il control block */ 
	}; 
1991/0424    
}; 
 
#define	MAX_TIME	100000000	/* Forever */ 
1991/0705/sys/src/9/port/ipdat.h:255,2611991/1012/sys/src/9/port/ipdat.h:312,319
1991/0424    
#define	read_timer(t)	((t)->count) 
#define	run_timer(t)	((t)->state == TIMER_RUN) 
 
enum { 
1991/1012    
enum 
{ 
1991/0424    
	CLOSED = 0, 
	LISTEN, 
	SYN_SENT, 
1991/0705/sys/src/9/port/ipdat.h:267,2781991/1012/sys/src/9/port/ipdat.h:325,337
1991/0424    
	CLOSING, 
	LAST_ACK, 
	TIME_WAIT 
	}; 
1991/1012    
}; 
1991/0424    
 
/* 
 * Ip interface structure. We have one for each active protocol driver 
 */ 
struct Ipifc { 
1991/1012    
struct Ipifc  
{ 
1991/0424    
	QLock; 
	int 		ref; 
	uchar		protocol;		/* Ip header protocol number */ 
1991/0705/sys/src/9/port/ipdat.h:285,2911991/1012/sys/src/9/port/ipdat.h:344,351
1991/0424    
	Lock;	 
}; 
 
struct Fragq { 
1991/1012    
struct Fragq 
{ 
1991/0424    
	QLock; 
	Block  *blist; 
	Fragq  *next; 
1991/0705/sys/src/9/port/ipdat.h:292,3051991/1012/sys/src/9/port/ipdat.h:352,367
1991/0424    
	Ipaddr src; 
	Ipaddr dst; 
	ushort id; 
	}; 
1991/1012    
}; 
1991/0424    
 
struct Ipfrag { 
1991/1012    
struct Ipfrag 
{ 
1991/0424    
	ushort	foff; 
	ushort	flen; 
	}; 
1991/1012    
}; 
1991/0424    
 
struct Arpcache { 
1991/1012    
struct Arpcache 
{ 
1991/0424    
	uchar	status;		/* Entry status */ 
	uchar	type;		/* Entry type */ 
	Ipaddr	ip;		/* Host byte order */ 
1991/0705/sys/src/9/port/ipdat.h:311,3161991/1012/sys/src/9/port/ipdat.h:373,379
1991/0424    
	Arpcache *frwd; 
	Arpcache *prev; 
}; 
1991/1012    
 
1991/0424    
#define ARP_FREE	0 
#define ARP_OK		1 
#define ARP_ASKED	2 
1991/0705/sys/src/9/port/ipdat.h:341,3501991/1012/sys/src/9/port/ipdat.h:404,415
1991/0424    
#define IP_MAX		8192			/* Maximum Internet packet size */ 
#define UDP_MAX		(IP_MAX-ETHER_IPHDR)	/* Maximum UDP datagram size */ 
#define UDP_DATMAX	(UDP_MAX-UDP_HDRSIZE)	/* Maximum amount of udp data */ 
1991/1012    
#define IL_DATMAX	(IP_MAX-IL_HDRSIZE)	/* Maximum IL data in one ip packet */ 
1991/0424    
 
/* Protocol numbers */ 
#define IP_UDPPROTO	17 
#define IP_TCPPROTO	6 
1991/1012    
#define	IP_ILPROTO	190		/* I have no idea */ 
1991/0424    
 
/* Protocol port numbers */ 
#define PORTALLOC	5000		/* First automatic allocated port */ 
1991/0705/sys/src/9/port/ipdat.h:440,4421991/1012/sys/src/9/port/ipdat.h:505,508
1991/0424    
extern Qinfo tcpinfo; 
extern Qinfo ipinfo; 
extern Qinfo udpinfo; 
1991/1012    
extern Qinfo ilinfo; 
1991/1012/sys/src/9/port/ipdat.h:108,1131991/1013/sys/src/9/port/ipdat.h:108,114 (short | long)
Add Ilreset state.
rsc Fri Mar 4 12:44:25 2005
1991/1012    
	Ilack, 
	Ilquerey, 
	Ilstate, 
1991/1013    
	Ilreset, 
1991/1012    
}; 
 
1991/0424    
#define TCP_PKT	(TCP_EHSIZE+TCP_IPLEN+TCP_PHDRSIZE) 
1991/1013/sys/src/9/port/ipdat.h:68,741991/1014/sys/src/9/port/ipdat.h:68,74 (short | long)
Add IP header fields to Ilhdr. Add Ilcb.window. Add IL connection states. Rename open_tcp to tcpstart.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
 
1991/1012    
struct Ilhdr 
{ 
#define IL_EHSIZE	22 
1991/1014    
#define IL_EHSIZE	34 
1991/1012    
	uchar	d[6];		/* Ethernet destination */ 
	uchar	s[6];		/* Ethernet source */ 
	uchar	type[2];	/* Ethernet packet type */ 
1991/1013/sys/src/9/port/ipdat.h:77,821991/1014/sys/src/9/port/ipdat.h:77,87
1991/1012    
	uchar	length[2];	/* packet length */ 
	uchar	id[2];		/* Identification */ 
	uchar	frag[2];	/* Fragment information */ 
1991/1014    
	uchar	ttl;		/* Time to live */ 
	uchar	proto;		/* Protocol */ 
	uchar	cksum[2];	/* Header checksum */ 
	uchar	src[4];		/* Ip source */ 
	uchar	dst[4];		/* Ip destination */ 
1991/1012    
#define IL_HDRSIZE	16	 
	uchar	ilsum[2];	/* Checksum including header */ 
	uchar	illen[2];	/* Packet length */ 
1991/1013/sys/src/9/port/ipdat.h:88,941991/1014/sys/src/9/port/ipdat.h:93,99
1991/1012    
	uchar	ilack[4];	/* Acked sequence */ 
}; 
 
struct Ilcb 
1991/1014    
struct Ilcb				/* Control block */ 
1991/1012    
{ 
	int	state; 
	Block	*unacked; 
1991/1013/sys/src/9/port/ipdat.h:98,1061991/1014/sys/src/9/port/ipdat.h:103,112
1991/1012    
	ulong	sent; 
	ulong	recvd; 
	ulong	lastack; 
1991/1014    
	int	window; 
1991/1012    
}; 
 
enum 
1991/1014    
enum					/* Packet types */ 
1991/1012    
{ 
	Ilsync, 
	Ildata, 
1991/1013/sys/src/9/port/ipdat.h:111,1161991/1014/sys/src/9/port/ipdat.h:117,132
1991/1013    
	Ilreset, 
1991/1012    
}; 
 
1991/1014    
enum					/* Connection state */ 
{ 
	Ilclosed, 
	Ilsyncer, 
	Ilsyncee, 
	Ilestablished, 
	Illistening, 
	Ilclosing, 
}; 
 
1991/0424    
#define TCP_PKT	(TCP_EHSIZE+TCP_IPLEN+TCP_PHDRSIZE) 
 
1991/1012    
struct Tcphdr 
1991/1013/sys/src/9/port/ipdat.h:292,2971991/1014/sys/src/9/port/ipdat.h:308,315
1991/0424    
 
#define TCP_PASSIVE	0 
#define TCP_ACTIVE	1 
1991/1014    
#define IL_PASSIVE	0 
#define IL_ACTIVE	1 
1991/0424    
 
#define MAXBACKOFF	5 
#define FORCE		1 
1991/1013/sys/src/9/port/ipdat.h:481,4871991/1014/sys/src/9/port/ipdat.h:499,505
1991/0424    
int	dupb(Block **, Block *, int, int); 
void	tcp_input(Ipconv *, Block *); 
void 	tcprcvwin(Ipconv *); 
void	open_tcp(Ipconv *, int, ushort, char); 
1991/1014    
void	tcpstart(Ipconv *, int, ushort, char); 
1991/0424    
void	tcpflow(void*); 
void 	tcp_timeout(void *); 
void	tcp_acktimer(void *); 
1991/1014/sys/src/9/port/ipdat.h:500,5051991/1015/sys/src/9/port/ipdat.h:500,506 (short | long)
Add ilstart, ilstate.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
void	tcp_input(Ipconv *, Block *); 
void 	tcprcvwin(Ipconv *); 
1991/1014    
void	tcpstart(Ipconv *, int, ushort, char); 
1991/1015    
void	ilstart(Ipconv *, int, int); 
1991/0424    
void	tcpflow(void*); 
void 	tcp_timeout(void *); 
void	tcp_acktimer(void *); 
1991/1014/sys/src/9/port/ipdat.h:520,5251991/1015/sys/src/9/port/ipdat.h:521,527
1991/0424    
extern Ipaddr classmask[4]; 
extern Ipconv *ipconv[]; 
extern char *tcpstate[]; 
1991/1015    
extern char *ilstate[]; 
1991/0424    
extern Rendez tcpflowr; 
extern Qinfo tcpinfo; 
extern Qinfo ipinfo; 
1991/1015/sys/src/9/port/ipdat.h:82,881991/1019/sys/src/9/port/ipdat.h:82,88 (short | long)
Bug fix: correct IL_HDRSIZE. Add Lock to Ilcb. Add Ipoutput queue.
rsc Fri Mar 4 12:44:25 2005
1991/1014    
	uchar	cksum[2];	/* Header checksum */ 
	uchar	src[4];		/* Ip source */ 
	uchar	dst[4];		/* Ip destination */ 
1991/1012    
#define IL_HDRSIZE	16	 
1991/1019    
#define IL_HDRSIZE	18	 
1991/1012    
	uchar	ilsum[2];	/* Checksum including header */ 
	uchar	illen[2];	/* Packet length */ 
	uchar	iltype;		/* Packet type */ 
1991/1015/sys/src/9/port/ipdat.h:95,1001991/1019/sys/src/9/port/ipdat.h:95,101
1991/1012    
 
1991/1014    
struct Ilcb				/* Control block */ 
1991/1012    
{ 
1991/1019    
	Lock; 
1991/1012    
	int	state; 
	Block	*unacked; 
	Block	*unackedtail; 
1991/1015/sys/src/9/port/ipdat.h:527,5291991/1019/sys/src/9/port/ipdat.h:528,531
1991/0424    
extern Qinfo ipinfo; 
extern Qinfo udpinfo; 
1991/1012    
extern Qinfo ilinfo; 
1991/1019    
extern Queue *Ipoutput; 
1991/1019/sys/src/9/port/ipdat.h:263,2841991/1023/sys/src/9/port/ipdat.h:263,281 (short | long)
Add ipincoming. In Ipconv: remove ptype, listen, contype. Add newcon.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
	int 	ref; 
	Qinfo	*stproto;		/* Stream protocol for this device */ 
	Ipaddr	dst;			/* Destination from connect */ 
                 
	Port	psrc;			/* Source port */ 
	Port	pdst;			/* Destination port */ 
 
	uchar	ptype;			/* Source port type */ 
	Ipifc	*ipinterface;		/* Ip protocol interface */ 
	Queue	*readq;			/* Pointer to upstream read q */ 
                 
	QLock	listenq;		/* List of people waiting incoming cons */ 
	Rendez	listenr;		/* Some where to sleep while waiting */ 
	Ipconv	*listen; 
		 
	char	err;			/* Async protocol error */ 
	int	backlog;		/* Maximum number of waiting connections */ 
	int	curlog;			/* Number of waiting connections */ 
	int 	contype; 
1991/1023    
	int 	newcon;			/* Flags that this is the start of a connection */ 
 
1991/1012    
	union { 
		Tcpctl	tcpctl;			/* Tcp control block */ 
		Ilcb	ilctl;			/* Il control block */ 
1991/1019/sys/src/9/port/ipdat.h:476,4811991/1023/sys/src/9/port/ipdat.h:473,479
1991/0424    
void	appendb(Block **, Block *); 
Ipconv	*ip_conn(Ipconv *, Port, Port, Ipaddr dest, char proto); 
void	ipmkdir(Qinfo *, Dirtab *, Ipconv *); 
1991/1023    
Ipconv	*ipincoming(Ipconv*); 
1991/0424    
int	inb_window(Tcpctl *, int); 
Block	*htontcp(Tcp *, Block *, Tcphdr *); 
void	start_timer(Timer *); 
1991/1023/sys/src/9/port/ipdat.h:46,511991/1024/sys/src/9/port/ipdat.h:46,52 (short | long)
Add blank lines. Add Ipconv.ptype.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
	uchar	d[6];		/* Ethernet destination */ 
	uchar	s[6];		/* Ethernet source */ 
	uchar	type[2];	/* Ethernet packet type */ 
1991/1024    
 
1991/0424    
	uchar	vihl;		/* Version and header length */ 
	uchar	tos;		/* Type of service */ 
	uchar	length[2];	/* packet length */ 
1991/1023/sys/src/9/port/ipdat.h:72,771991/1024/sys/src/9/port/ipdat.h:73,79
1991/1012    
	uchar	d[6];		/* Ethernet destination */ 
	uchar	s[6];		/* Ethernet source */ 
	uchar	type[2];	/* Ethernet packet type */ 
1991/1024    
 
1991/1012    
	uchar	vihl;		/* Version and header length */ 
	uchar	tos;		/* Type of service */ 
	uchar	length[2];	/* packet length */ 
1991/1023/sys/src/9/port/ipdat.h:265,2701991/1024/sys/src/9/port/ipdat.h:267,273
1991/0424    
	Ipaddr	dst;			/* Destination from connect */ 
	Port	psrc;			/* Source port */ 
	Port	pdst;			/* Destination port */ 
1991/1024    
	char	ptype;			/* Port type */ 
1991/0424    
 
	Ipifc	*ipinterface;		/* Ip protocol interface */ 
	Queue	*readq;			/* Pointer to upstream read q */ 
1991/1024/sys/src/9/port/ipdat.h:102,1081991/1025/sys/src/9/port/ipdat.h:102,107 (short | long)
Remove Ilcb.outofordertail. Add iloutoforder.
rsc Fri Mar 4 12:44:25 2005
1991/1012    
	Block	*unacked; 
	Block	*unackedtail; 
	Block	*outoforder; 
	Block	*outofordertail; 
	ulong	sent; 
	ulong	recvd; 
	ulong	lastack; 
1991/1024/sys/src/9/port/ipdat.h:508,5131991/1025/sys/src/9/port/ipdat.h:507,513
1991/0424    
void	tcp_acktimer(void *); 
Ipconv  *ipclonecon(Chan *); 
void	iplisten(Chan *, Ipconv *, Ipconv *); 
1991/1025    
void	iloutoforder(Ipconv*, Ilhdr*, Block*); 
1991/0424    
 
#define	fmtaddr(xx)	(xx>>24)&0xff,(xx>>16)&0xff,(xx>>8)&0xff,xx&0xff 
#define	MIN(a, b)	((a) < (b) ? (a) : (b)) 
1991/1025/sys/src/9/port/ipdat.h:104,1091991/1026/sys/src/9/port/ipdat.h:104,110 (short | long)
Add Ilcb.start.
rsc Fri Mar 4 12:44:25 2005
1991/1012    
	Block	*outoforder; 
	ulong	sent; 
	ulong	recvd; 
1991/1026    
	ulong	start; 
1991/1012    
	ulong	lastack; 
1991/1014    
	int	window; 
1991/1012    
}; 
1991/1026/sys/src/9/port/ipdat.h:453,4611991/1027/sys/src/9/port/ipdat.h:453,462 (short | long)
Rename arp_* to arp*. Add pusharpq, arpsendpkt.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
Block	*ip_reassemble(int, Block*, Etherhdr*); 
Ipconv	*portused(Ipconv *, Port); 
Port	nextport(Ipconv *, Port); 
void	arp_enter(Arpentry*, int); 
void	arp_flush(void); 
int	arp_delete(char*); 
1991/1027    
void	arpenter(Arpentry*, int); 
void	arpflush(void); 
int	arpdelete(char*); 
void	pusharpq(void); 
1991/0424    
void	arplinkhead(Arpcache*); 
Fragq   *ipfragallo(void); 
void	ipfragfree(Fragq*); 
1991/1026/sys/src/9/port/ipdat.h:509,5141991/1027/sys/src/9/port/ipdat.h:510,516
1991/0424    
Ipconv  *ipclonecon(Chan *); 
void	iplisten(Chan *, Ipconv *, Ipconv *); 
1991/1025    
void	iloutoforder(Ipconv*, Ilhdr*, Block*); 
1991/1027    
void	arpsendpkt(uchar*, uchar*, Queue*, Block*); 
1991/0424    
 
#define	fmtaddr(xx)	(xx>>24)&0xff,(xx>>16)&0xff,(xx>>8)&0xff,xx&0xff 
#define	MIN(a, b)	((a) < (b) ? (a) : (b)) 
1991/1027/sys/src/9/port/ipdat.h:3,91991/1028/sys/src/9/port/ipdat.h:3,8 (short | long)
Remove typedef Arpcache, arp constants. (See XXX).
rsc Fri Mar 4 12:44:25 2005
1991/0424    
typedef struct Fragq	Fragq; 
typedef struct Ipfrag	Ipfrag; 
typedef ulong		Ipaddr; 
typedef struct Arpcache	Arpcache; 
typedef ushort		Port; 
typedef struct Udphdr	Udphdr; 
typedef struct Etherhdr	Etherhdr; 
1991/1027/sys/src/9/port/ipdat.h:379,4071991/1028/sys/src/9/port/ipdat.h:378,383
1991/0424    
	ushort	foff; 
	ushort	flen; 
1991/1012    
}; 
1991/0424    
                 
1991/1012    
struct Arpcache 
{ 
1991/0424    
	uchar	status;		/* Entry status */ 
	uchar	type;		/* Entry type */ 
	Ipaddr	ip;		/* Host byte order */ 
	uchar	eip[4];		/* Network byte order */ 
	uchar	et[6];		/* Ethernet address for this ip */ 
	int	age;		/* Entry timeout */ 
	Arpcache *hash; 
	Arpcache **hashhd; 
	Arpcache *frwd; 
	Arpcache *prev; 
}; 
1991/1012    
                 
1991/0424    
#define ARP_FREE	0 
#define ARP_OK		1 
#define ARP_ASKED	2 
#define ARP_TEMP	0 
#define ARP_PERM	1 
#define Arphashsize	32 
#define ARPHASH(p)	arphash[((p[2]^p[3])%Arphashsize)] 
#define ARP_WAITMS	2500		/* Wait for arp replys */ 
 
#define IP_VER	0x40			/* Using IP version 4 */ 
#define IP_HLEN 0x05			/* Header length in characters */ 
1991/1028/sys/src/9/port/ipdat.h:429,4391991/1029/sys/src/9/port/ipdat.h:429,434 (short | long)
Remove arp functions. Add arpinfo queue.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
Block	*ip_reassemble(int, Block*, Etherhdr*); 
Ipconv	*portused(Ipconv *, Port); 
Port	nextport(Ipconv *, Port); 
1991/1027    
void	arpenter(Arpentry*, int); 
void	arpflush(void); 
int	arpdelete(char*); 
void	pusharpq(void); 
1991/0424    
void	arplinkhead(Arpcache*); 
Fragq   *ipfragallo(void); 
void	ipfragfree(Fragq*); 
void	iproute(uchar*, uchar*); 
1991/1028/sys/src/9/port/ipdat.h:486,4921991/1029/sys/src/9/port/ipdat.h:481,486
1991/0424    
Ipconv  *ipclonecon(Chan *); 
void	iplisten(Chan *, Ipconv *, Ipconv *); 
1991/1025    
void	iloutoforder(Ipconv*, Ilhdr*, Block*); 
1991/1027    
void	arpsendpkt(uchar*, uchar*, Queue*, Block*); 
1991/0424    
 
#define	fmtaddr(xx)	(xx>>24)&0xff,(xx>>16)&0xff,(xx>>8)&0xff,xx&0xff 
#define	MIN(a, b)	((a) < (b) ? (a) : (b)) 
1991/1028/sys/src/9/port/ipdat.h:508,5111991/1029/sys/src/9/port/ipdat.h:502,506
1991/0424    
extern Qinfo ipinfo; 
extern Qinfo udpinfo; 
1991/1012    
extern Qinfo ilinfo; 
1991/1029    
extern Qinfo arpinfo; 
1991/1019    
extern Queue *Ipoutput; 
1991/1029/sys/src/9/port/ipdat.h:116,1221991/1101/sys/src/9/port/ipdat.h:116,122 (short | long)
Rename Ilreset to Ilclose.
rsc Fri Mar 4 12:44:25 2005
1991/1012    
	Ilack, 
	Ilquerey, 
	Ilstate, 
1991/1013    
	Ilreset, 
1991/1101    
	Ilclose, 
1991/1012    
}; 
 
1991/1014    
enum					/* Connection state */ 
1991/1101/sys/src/9/port/ipdat.h:105,1101991/1102/sys/src/9/port/ipdat.h:105,111 (short | long)
Add Ilcb.timeout.
rsc Fri Mar 4 12:44:25 2005
1991/1012    
	ulong	recvd; 
1991/1026    
	ulong	start; 
1991/1012    
	ulong	lastack; 
1991/1102    
	int	timeout; 
1991/1014    
	int	window; 
1991/1012    
}; 
 
1991/1102/sys/src/9/port/ipdat.h:258,2641991/1104/sys/src/9/port/ipdat.h:258,264 (short | long)
Comment edit. Remove I[conv.ptype.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
	char	tos; 
1991/1012    
}; 
1991/0424    
 
/* An ip interface used for UDP/TCP/ARP/ICMP */ 
1991/1104    
/* An ip interface used for UDP/TCP/IL */ 
1991/1012    
struct Ipconv 
{ 
1991/0424    
	QLock;				/* Ref count lock */ 
1991/1102/sys/src/9/port/ipdat.h:267,2731991/1104/sys/src/9/port/ipdat.h:267,272
1991/0424    
	Ipaddr	dst;			/* Destination from connect */ 
	Port	psrc;			/* Source port */ 
	Port	pdst;			/* Destination port */ 
1991/1024    
	char	ptype;			/* Port type */ 
1991/0424    
 
	Ipifc	*ipinterface;		/* Ip protocol interface */ 
	Queue	*readq;			/* Pointer to upstream read q */ 
1991/1104/sys/src/9/port/ipdat.h:104,1091991/1106/sys/src/9/port/ipdat.h:104,110 (short | long)
Add Ilcb.rstart.
rsc Fri Mar 4 12:44:25 2005
1991/1012    
	ulong	sent; 
	ulong	recvd; 
1991/1026    
	ulong	start; 
1991/1106    
	ulong	rstart; 
1991/1012    
	ulong	lastack; 
1991/1102    
	int	timeout; 
1991/1014    
	int	window; 
1991/1106/sys/src/9/port/ipdat.h:101,1071991/1107/sys/src/9/port/ipdat.h:101,107 (short | long)
Rename Ilcb.sent to Ilcb.next.
rsc Fri Mar 4 12:44:25 2005
1991/1012    
	Block	*unacked; 
	Block	*unackedtail; 
	Block	*outoforder; 
	ulong	sent; 
1991/1107    
	ulong	next; 
1991/1012    
	ulong	recvd; 
1991/1026    
	ulong	start; 
1991/1106    
	ulong	rstart; 
1991/1107/sys/src/9/port/ipdat.h:361,3661991/1114/sys/src/9/port/ipdat.h:361,367 (short | long)
Add Ipifc.net. Change ipclonecon, iplisten, add ip*fill.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
	int		maxmtu;			/* Maximum transfer unit */ 
	int		minmtu;			/* Minumum tranfer unit */ 
	int		hsize;			/* Media header size */	 
1991/1114    
	Network		net; 
1991/0424    
	Lock;	 
}; 
 
1991/1107/sys/src/9/port/ipdat.h:479,4871991/1114/sys/src/9/port/ipdat.h:480,491
1991/0424    
void	tcpflow(void*); 
void 	tcp_timeout(void *); 
void	tcp_acktimer(void *); 
Ipconv  *ipclonecon(Chan *); 
void	iplisten(Chan *, Ipconv *, Ipconv *); 
1991/1114    
int	ipclonecon(Chan *); 
int	iplisten(Chan *); 
1991/1025    
void	iloutoforder(Ipconv*, Ilhdr*, Block*); 
1991/1114    
void	iplocalfill(Chan*, char*, int); 
void	ipremotefill(Chan*, char*, int); 
void	ipstatusfill(Chan*, char*, int); 
1991/0424    
 
#define	fmtaddr(xx)	(xx>>24)&0xff,(xx>>16)&0xff,(xx>>8)&0xff,xx&0xff 
#define	MIN(a, b)	((a) < (b) ? (a) : (b)) 
1991/1114/sys/src/9/port/ipdat.h:264,2691991/1115/sys/src/9/port/ipdat.h:264,270 (short | long)
Add Ipconv.index. Change ipincoming.
rsc Fri Mar 4 12:44:25 2005
1991/1012    
{ 
1991/0424    
	QLock;				/* Ref count lock */ 
	int 	ref; 
1991/1115    
	int	index; 
1991/0424    
	Qinfo	*stproto;		/* Stream protocol for this device */ 
	Ipaddr	dst;			/* Destination from connect */ 
	Port	psrc;			/* Source port */ 
1991/1114/sys/src/9/port/ipdat.h:450,4561991/1115/sys/src/9/port/ipdat.h:451,457
1991/0424    
void	appendb(Block **, Block *); 
Ipconv	*ip_conn(Ipconv *, Port, Port, Ipaddr dest, char proto); 
void	ipmkdir(Qinfo *, Dirtab *, Ipconv *); 
1991/1023    
Ipconv	*ipincoming(Ipconv*); 
1991/1115    
Ipconv	*ipincoming(Ipconv*, Ipconv*); 
1991/0424    
int	inb_window(Tcpctl *, int); 
Block	*htontcp(Tcp *, Block *, Tcphdr *); 
void	start_timer(Timer *); 
1991/1115/sys/src/9/port/ipdat.h:436,4421991/1121/sys/src/9/port/ipdat.h:436,441 (short | long)
Remove copyb.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
void	ipfragfree(Fragq*); 
void	iproute(uchar*, uchar*); 
void	initfrag(int); 
Block	*copyb(Block*, int); 
int	ntohtcp(Tcp*, Block**); 
void	reset(Ipaddr, Ipaddr, char, ushort, Tcp*); 
void	proc_syn(Ipconv*, char, Tcp*); 
1991/1121/sys/src/9/port/ipdat.h:96,1131991/1124/sys/src/9/port/ipdat.h:96,126 (short | long)
Fiddle with Ilcb. Increase IP_MAX to 32kB.
In Ilcb: add QLocks for block queues; comment edits; add oblks, slowtime, fasttime, acktime], rtt, rttack, ackms; remove lastack.
rsc Fri Mar 4 12:44:25 2005
1991/1012    
 
1991/1014    
struct Ilcb				/* Control block */ 
1991/1012    
{ 
1991/1019    
	Lock; 
1991/1012    
	int	state; 
1991/1124    
	int	state;			/* Connection state */ 
 
	QLock	ackq;			/* Unacknowledged queue */ 
1991/1012    
	Block	*unacked; 
	Block	*unackedtail; 
1991/1124    
 
	QLock	outo;			/* Out of order packet queue */ 
1991/1012    
	Block	*outoforder; 
1991/1107    
	ulong	next; 
1991/1012    
	ulong	recvd; 
1991/1026    
	ulong	start; 
1991/1106    
	ulong	rstart; 
1991/1012    
	ulong	lastack; 
1991/1102    
	int	timeout; 
1991/1014    
	int	window; 
1991/1124    
	int	oblks;			/* Number of blocks in queue */ 
 
	ulong	next;			/* Id of next to send */ 
	ulong	recvd;			/* Last packet received */ 
	ulong	start;			/* Local start id */ 
	ulong	rstart;			/* Remote start id */ 
 
	int	timeout;		/* Time out counter */ 
	int	slowtime;		/* Slow time counter */ 
	int	fasttime;		/* Retransmission timer */ 
	int	acktime;		/* Acknowledge timer */ 
 
	int	rtt;			/* Average round trip time */ 
	ulong	rttack;			/* The ack we are waiting for */ 
	ulong	ackms;			/* Time we issued */ 
 
	int	window;			/* Maximum receive window */ 
1991/1012    
}; 
 
1991/1014    
enum					/* Packet types */ 
1991/1121/sys/src/9/port/ipdat.h:400,4061991/1124/sys/src/9/port/ipdat.h:413,419
1991/0424    
#define	ICMP_IREQREPLY		16	/* Information Reply */ 
 
/* Sizes */ 
#define IP_MAX		8192			/* Maximum Internet packet size */ 
1991/1124    
#define IP_MAX		(32*1024)		/* Maximum Internet packet size */ 
1991/0424    
#define UDP_MAX		(IP_MAX-ETHER_IPHDR)	/* Maximum UDP datagram size */ 
#define UDP_DATMAX	(UDP_MAX-UDP_HDRSIZE)	/* Maximum amount of udp data */ 
1991/1012    
#define IL_DATMAX	(IP_MAX-IL_HDRSIZE)	/* Maximum IL data in one ip packet */ 
1991/1124/sys/src/9/port/ipdat.h:231,2471991/1126/sys/src/9/port/ipdat.h:231,239 (short | long)
In Tcpctl, remove out-of-band data. In Ipconv, add net. Remove appendb. Add ipforme.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
	Block	*rcvq; 
	ushort	rcvcnt; 
 
	Block	*rcvoobq; 
	ushort	rcvoobcnt; 
                 
	Block	*sndq;			/* List of data going out */ 
	ushort	sndcnt;			/* Amount of data in send queue */ 
 
	Block	*sndoobq;		/* List of blocks going oob */ 
	ushort	sndoobcnt;		/* Size of out of band queue */ 
	ushort	oobmark;		/* Out of band sequence mark */ 
	char	oobflags;		/* Out of band data flags */ 
                 
	Reseq	*reseq;			/* Resequencing queue */ 
	Timer	timer;			  
	Timer	acktimer;		/* Acknoledge timer */ 
1991/1124/sys/src/9/port/ipdat.h:279,2841991/1126/sys/src/9/port/ipdat.h:271,277
1991/0424    
	int 	ref; 
1991/1115    
	int	index; 
1991/0424    
	Qinfo	*stproto;		/* Stream protocol for this device */ 
1991/1126    
	Network	*net;			/* user level network interface */ 
1991/0424    
	Ipaddr	dst;			/* Destination from connect */ 
	Port	psrc;			/* Source port */ 
	Port	pdst;			/* Destination port */ 
1991/1124/sys/src/9/port/ipdat.h:375,3811991/1126/sys/src/9/port/ipdat.h:368,373
1991/0424    
	int		maxmtu;			/* Maximum transfer unit */ 
	int		minmtu;			/* Minumum tranfer unit */ 
	int		hsize;			/* Media header size */	 
1991/1114    
	Network		net; 
1991/0424    
	Lock;	 
}; 
 
1991/1124/sys/src/9/port/ipdat.h:460,4661991/1126/sys/src/9/port/ipdat.h:452,457
1991/0424    
void	add_reseq(Tcpctl *, char, Tcp *, Block *, ushort); 
void	close_self(Ipconv *, int); 
int	seq_gt(int, int); 
void	appendb(Block **, Block *); 
Ipconv	*ip_conn(Ipconv *, Port, Port, Ipaddr dest, char proto); 
void	ipmkdir(Qinfo *, Dirtab *, Ipconv *); 
1991/1115    
Ipconv	*ipincoming(Ipconv*, Ipconv*); 
1991/1124/sys/src/9/port/ipdat.h:499,5041991/1126/sys/src/9/port/ipdat.h:490,496
1991/1114    
void	iplocalfill(Chan*, char*, int); 
void	ipremotefill(Chan*, char*, int); 
void	ipstatusfill(Chan*, char*, int); 
1991/1126    
int	ipforme(uchar*); 
1991/0424    
 
#define	fmtaddr(xx)	(xx>>24)&0xff,(xx>>16)&0xff,(xx>>8)&0xff,xx&0xff 
#define	MIN(a, b)	((a) < (b) ? (a) : (b)) 
1991/1126/sys/src/9/port/ipdat.h:309,3151991/1204/sys/src/9/port/ipdat.h:309,315 (short | long)
Halve DEF_MSS to 512.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
#define MSS_LENGTH	4 
#define MSL2		10 
#define MSPTICK		200 
#define DEF_MSS		1024 
1991/1204    
#define DEF_MSS		512 
1991/0424    
#define DEF_RTT		1000 
#define	TCPOOB_HADDATA	1 
#define	TCPOOB_HAVEDATA 2 
1991/1204/sys/src/9/port/ipdat.h:309,3181991/1205/sys/src/9/port/ipdat.h:309,316 (short | long)
Put DEF_MSS back to 1024. Remove out-of-band defines.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
#define MSS_LENGTH	4 
#define MSL2		10 
#define MSPTICK		200 
1991/1204    
#define DEF_MSS		512 
1991/1205    
#define DEF_MSS		1024 
1991/0424    
#define DEF_RTT		1000 
#define	TCPOOB_HADDATA	1 
#define	TCPOOB_HAVEDATA 2 
 
#define TCP_PASSIVE	0 
#define TCP_ACTIVE	1 
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)