Plan 9 from Bell Labs’s /usr/web/sources/extra/9hist/port/ipdat.h

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


## diffname port/ipdat.h 1991/0424
## diff -e /dev/null /n/bootesdump/1991/0424/sys/src/9/port/ipdat.h
0a
typedef struct Ipconv	Ipconv;
typedef struct Ipifc	Ipifc;
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;
typedef struct Reseq	Reseq;
typedef struct Tcp	Tcp;
typedef struct Tcpctl	Tcpctl;
typedef struct Tcphdr	Tcphdr;
typedef struct Timer	Timer;

struct Etherhdr {
#define ETHER_HDR	14
	uchar	d[6];
	uchar	s[6];
	uchar	type[2];

	/* Now we have the ip fields */
#define ETHER_IPHDR	20
	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[4];		/* Ip source */
	uchar	dst[4];		/* Ip destination */
};

/* Ethernet packet types */
#define ET_IP	0x0800

/* A userlevel data gram */
struct Udphdr {
#define UDP_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 */

	/* Udp pseudo ip really starts here */
#define UDP_PHDRSIZE	12
#define UDP_HDRSIZE	20
	uchar	Unused;	
	uchar	udpproto;	/* Protocol */
	uchar	udpplen[2];	/* Header plus data length */
	uchar	udpsrc[4];	/* Ip source */
	uchar	udpdst[4];	/* Ip destination */
	uchar	udpsport[2];	/* Source port */
	uchar	udpdport[2];	/* Destination port */
	uchar	udplen[2];	/* data length */
	uchar	udpcksum[2];	/* Checksum */
};

#define TCP_PKT	(TCP_EHSIZE+TCP_IPLEN+TCP_PHDRSIZE)

struct Tcphdr {
#define TCP_EHSIZE	14
	uchar	d[6];		/* Ethernet destination */
	uchar	s[6];		/* Ethernet source */
	uchar	type[2];	/* Ethernet packet type */
#define TCP_IPLEN	8
	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 TCP_PHDRSIZE	12	
	uchar	Unused;
	uchar	proto;
	uchar	tcplen[2];
	uchar	tcpsrc[4];
	uchar	tcpdst[4];

#define TCP_HDRSIZE	20
	uchar	tcpsport[2];
	uchar	tcpdport[2];
	uchar	tcpseq[4];
	uchar	tcpack[4];
	uchar	tcpflag[2];
	uchar	tcpwin[2];
	uchar	tcpcksum[2];
	uchar	tcpurg[2];

	/* Options segment */
	uchar	tcpopt[2];
	uchar	tcpmss[2];
	};



struct Timer {
	Timer	*next;
	Timer	*prev;
	int	state;
	int	start;
	int	count;
	void	(*func)(void*);
	void	*arg;
	};

struct Tcpctl {
	QLock;
	uchar	state;		/* Connection state */
	uchar	type;		/* Listening or active connection */
	uchar	code;		/* Icmp code */		
	struct {
		int una;	/* Unacked data pointer */
		int nxt;	/* Next sequence expected */
		int ptr;	/* Data pointer */
		ushort wnd;	/* Tcp send window */
		int up;		/* Urgent data pointer */
		int wl1;
		int wl2;
	} snd;
	int	iss;
	ushort	cwind;
	ushort	ssthresh;
	int	resent;
	struct {
		int nxt;
		ushort wnd;
		int up;
	} rcv;
	int	irs;
	ushort	mss;
	int	rerecv;
	ushort	window;
	int	max_snd;
	int	last_ack;
	char	backoff;
	char	flags;
	char	tos;

	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 */
	Timer	rtt_timer;		/* Round trip timer */
	int	rttseq;			/* Round trip sequence */
	int	srtt;			/* Shortened round trip */
	int	mdev;			/* Mean deviation of round trip */
};

struct	Tcp {
	Port	source;
	Port	dest;
	int	seq;
	int	ack;
	char	flags;
	ushort	wnd;
	ushort	up;
	ushort	mss;
	};

struct Reseq {
	Reseq 	*next;
	Tcp	seg;
	Block	*bp;
	ushort	length;
	char	tos;
	};

/* An ip interface used for UDP/TCP/ARP/ICMP */
struct Ipconv {
	QLock;				/* Ref count lock */
	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;
	Tcpctl	tcpctl;			/* Tcp control block */
};

#define	MAX_TIME	100000000	/* Forever */
#define TCP_ACK		200		/* Timed ack sequence every 200ms */

#define URG	0x20
#define ACK	0x10
#define PSH	0x08
#define RST	0x04
#define SYN	0x02
#define FIN	0x01

#define EOL_KIND	0
#define NOOP_KIND	1
#define MSS_KIND	2

#define MSS_LENGTH	4
#define MSL2		10
#define MSPTICK		200
#define DEF_MSS		1024
#define DEF_RTT		1000
#define	TCPOOB_HADDATA	1
#define	TCPOOB_HAVEDATA 2

#define TCP_PASSIVE	0
#define TCP_ACTIVE	1

#define MAXBACKOFF	5
#define FORCE		1
#define	CLONE		2
#define RETRAN		4
#define ACTIVE		8
#define SYNACK		16
#define AGAIN		8
#define DGAIN		4

#define TIMER_STOP	0
#define TIMER_RUN	1
#define TIMER_EXPIRE	2

#define	set_timer(t,x)	(((t)->start) = (x)/MSPTICK)
#define	dur_timer(t)	((t)->start)
#define	read_timer(t)	((t)->count)
#define	run_timer(t)	((t)->state == TIMER_RUN)

enum {
	CLOSED = 0,
	LISTEN,
	SYN_SENT,
	SYN_RECEIVED,
	ESTABLISHED,
	FINWAIT1,
	FINWAIT2,
	CLOSE_WAIT,
	CLOSING,
	LAST_ACK,
	TIME_WAIT
	};

/*
 * Ip interface structure. We have one for each active protocol driver
 */
struct Ipifc {
	QLock;
	int 		ref;
	uchar		protocol;		/* Ip header protocol number */
	char		name[NAMELEN];		/* Protocol name */
	void (*iprcv)	(Ipconv *, Block *);	/* Receive demultiplexor */
	Ipconv		*connections;		/* Connection list */
	int		maxmtu;			/* Maximum transfer unit */
	int		minmtu;			/* Minumum tranfer unit */
	int		hsize;			/* Media header size */	
	Lock;	
};

struct Fragq {
	QLock;
	Block  *blist;
	Fragq  *next;
	Ipaddr src;
	Ipaddr dst;
	ushort id;
	};

struct Ipfrag {
	ushort	foff;
	ushort	flen;
	};

struct Arpcache {
	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;
};
#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 */
#define IP_DF	0x4000			/* Don't fragment */
#define IP_MF	0x2000			/* More fragments */

#define	ICMP_ECHOREPLY		0	/* Echo Reply */
#define	ICMP_UNREACH		3	/* Destination Unreachable */
#define	ICMP_SOURCEQUENCH	4	/* Source Quench */
#define	ICMP_REDIRECT		5	/* Redirect */
#define	ICMP_ECHO		8	/* Echo Request */
#define	ICMP_TIMXCEED		11	/* Time-to-live Exceeded */
#define	ICMP_PARAMPROB		12	/* Parameter Problem */
#define	ICMP_TSTAMP		13	/* Timestamp */
#define	ICMP_TSTAMPREPLY	14	/* Timestamp Reply */
#define	ICMP_IREQ		15	/* Information Request */
#define	ICMP_IREQREPLY		16	/* Information Reply */

/* Sizes */
#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 */

/* Protocol numbers */
#define IP_UDPPROTO	17
#define IP_TCPPROTO	6

/* Protocol port numbers */
#define PORTALLOC	5000		/* First automatic allocated port */
#define PRIVPORTALLOC	600		/* First priveleged port allocated */
#define PORTMAX		30000		/* Last port to allocte */

/* Stuff to go in funs.h someday */
Ipifc   *newipifc(uchar, void (*)(Ipconv *, Block*), Ipconv *, int, int, int, char*);
void	closeipifc(Ipifc*);
ushort	ip_csum(uchar*);
int	arp_lookup(uchar*, uchar*);
Ipaddr	ipparse(char*);
void	hnputs(uchar*, ushort);
void	hnputl(uchar*, ulong);
ulong	nhgetl(uchar*);
ushort	nhgets(uchar*);
ushort	ptcl_csum(Block*bp, int, int);
void	ppkt(Block*);
void	udprcvmsg(Ipconv *, Block*);
Block	*btrim(Block*, int, int);
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*);
void	arplinkhead(Arpcache*);
Fragq   *ipfragallo(void);
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*);
void	send_syn(Tcpctl*);
void	tcp_output(Ipconv*);
int	seq_within(int, int, int);
void	update(Ipconv *, Tcp *);
int	trim(Tcpctl *, Tcp *, Block **, ushort *);
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 *);
int	inb_window(Tcpctl *, int);
Block	*htontcp(Tcp *, Block *, Tcphdr *);
void	start_timer(Timer *);
void	stop_timer(Timer *);
int	copyupb(Block **, uchar *, int);
void	init_tcpctl(Ipconv *);
void	close_self(Ipconv *, int);
int	iss(void);
int	seq_within(int, int, int);
int	seq_lt(int, int);
int	seq_le(int, int);
int	seq_gt(int, int);
int	seq_ge(int, int);
void	setstate(Ipconv *, char);
void	tcpackproc(void*);
Block 	*htontcp(Tcp *, Block *, Tcphdr *);
int	ntohtcp(Tcp *, Block **);
void	extract_oob(Block **, Block **, Tcp *);
void	get_reseq(Tcpctl *, char *, Tcp *, Block **, ushort *);
void	state_upcall(Ipconv*, char oldstate, char newstate);
int	backoff(int);
int	dupb(Block **, Block *, int, int);
void	tcp_input(Ipconv *, Block *);
void 	tcprcvwin(Ipconv *);
void	open_tcp(Ipconv *, int, ushort, char);
void	tcpflow(void*);
void 	tcp_timeout(void *);
void	tcp_acktimer(void *);
Ipconv  *ipclonecon(Chan *);
void	iplisten(Chan *, Ipconv *, Ipconv *);

#define	fmtaddr(xx)	(xx>>24)&0xff,(xx>>16)&0xff,(xx>>8)&0xff,xx&0xff
#define	MIN(a, b)	((a) < (b) ? (a) : (b))
#define MAX(a, b)	((a) > (b) ? (a) : (b))
#define BLKIP(xp)	((Etherhdr *)((xp)->rptr))
#define BLKFRAG(xp)	((Ipfrag *)((xp)->rptr))
#define PREC(x)		((x)>>5 & 7)

#define WORKBUF		64

extern Ipaddr Myip;
extern Ipaddr Mymask;
extern Ipaddr classmask[4];
extern Ipconv *ipconv[];
extern char *tcpstate[];
extern Rendez tcpflowr;
extern Qinfo tcpinfo;
extern Qinfo ipinfo;
extern Qinfo udpinfo;
.
## diffname port/ipdat.h 1991/0705
## diff -e /n/bootesdump/1991/0424/sys/src/9/port/ipdat.h /n/bootesdump/1991/0705/sys/src/9/port/ipdat.h
250a
#define Nreseq		64

.
## diffname port/ipdat.h 1991/1012
## diff -e /n/bootesdump/1991/0705/sys/src/9/port/ipdat.h /n/bootesdump/1991/1012/sys/src/9/port/ipdat.h
442a
extern Qinfo ilinfo;
.
347a
#define	IP_ILPROTO	190		/* I have no idea */
.
343a
#define IL_DATMAX	(IP_MAX-IL_HDRSIZE)	/* Maximum IL data in one ip packet */
.
313a

.
302c
struct Arpcache
{
.
300c
};
.
297c
struct Ipfrag
{
.
295c
};
.
288c
struct Fragq
{
.
275c
struct Ipifc 
{
.
270c
};
.
258c
enum
{
.
210c
	union {
		Tcpctl	tcpctl;			/* Tcp control block */
		Ilcb	ilctl;			/* Il control block */
	};
.
189c
struct Ipconv
{
.
186c
};
.
180c
struct Reseq
{
.
178c
};
.
169c
struct	Tcp
{
.
113c
struct Tcpctl
{
.
111c
};
.
103c
struct Timer
{
.
99c
};
.
67c
struct Tcphdr
{
.
64a
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,
};

.
40c
struct Udphdr
{
.
16c
struct Etherhdr
{
.
14a
typedef struct Ilhdr	Ilhdr;
typedef struct Ilcb	Ilcb;
.
## diffname port/ipdat.h 1991/1013
## diff -e /n/bootesdump/1991/1012/sys/src/9/port/ipdat.h /n/bootesdump/1991/1013/sys/src/9/port/ipdat.h
110a
	Ilreset,
.
## diffname port/ipdat.h 1991/1014
## diff -e /n/bootesdump/1991/1013/sys/src/9/port/ipdat.h /n/bootesdump/1991/1014/sys/src/9/port/ipdat.h
484c
void	tcpstart(Ipconv *, int, ushort, char);
.
294a
#define IL_PASSIVE	0
#define IL_ACTIVE	1
.
113a
enum					/* Connection state */
{
	Ilclosed,
	Ilsyncer,
	Ilsyncee,
	Ilestablished,
	Illistening,
	Ilclosing,
};

.
103c
enum					/* Packet types */
.
100a
	int	window;
.
91c
struct Ilcb				/* Control block */
.
79a
	uchar	ttl;		/* Time to live */
	uchar	proto;		/* Protocol */
	uchar	cksum[2];	/* Header checksum */
	uchar	src[4];		/* Ip source */
	uchar	dst[4];		/* Ip destination */
.
71c
#define IL_EHSIZE	34
.
## diffname port/ipdat.h 1991/1015
## diff -e /n/bootesdump/1991/1014/sys/src/9/port/ipdat.h /n/bootesdump/1991/1015/sys/src/9/port/ipdat.h
522a
extern char *ilstate[];
.
502a
void	ilstart(Ipconv *, int, int);
.
## diffname port/ipdat.h 1991/1019
## diff -e /n/bootesdump/1991/1015/sys/src/9/port/ipdat.h /n/bootesdump/1991/1019/sys/src/9/port/ipdat.h
529a
extern Queue *Ipoutput;
.
97a
	Lock;
.
85c
#define IL_HDRSIZE	18	
.
## diffname port/ipdat.h 1991/1023
## diff -e /n/bootesdump/1991/1019/sys/src/9/port/ipdat.h /n/bootesdump/1991/1023/sys/src/9/port/ipdat.h
478a
Ipconv	*ipincoming(Ipconv*);
.
281c
	int 	newcon;			/* Flags that this is the start of a connection */

.
276d
273d
270d
266d
## diffname port/ipdat.h 1991/1024
## diff -e /n/bootesdump/1991/1023/sys/src/9/port/ipdat.h /n/bootesdump/1991/1024/sys/src/9/port/ipdat.h
267a
	char	ptype;			/* Port type */
.
74a

.
48a

.
## diffname port/ipdat.h 1991/1025
## diff -e /n/bootesdump/1991/1024/sys/src/9/port/ipdat.h /n/bootesdump/1991/1025/sys/src/9/port/ipdat.h
510a
void	iloutoforder(Ipconv*, Ilhdr*, Block*);
.
105d
## diffname port/ipdat.h 1991/1026
## diff -e /n/bootesdump/1991/1025/sys/src/9/port/ipdat.h /n/bootesdump/1991/1026/sys/src/9/port/ipdat.h
106a
	ulong	start;
.
## diffname port/ipdat.h 1991/1027
## diff -e /n/bootesdump/1991/1026/sys/src/9/port/ipdat.h /n/bootesdump/1991/1027/sys/src/9/port/ipdat.h
511a
void	arpsendpkt(uchar*, uchar*, Queue*, Block*);
.
456,458c
void	arpenter(Arpentry*, int);
void	arpflush(void);
int	arpdelete(char*);
void	pusharpq(void);
.
## diffname port/ipdat.h 1991/1028
## diff -e /n/bootesdump/1991/1027/sys/src/9/port/ipdat.h /n/bootesdump/1991/1028/sys/src/9/port/ipdat.h
382,404d
6d
## diffname port/ipdat.h 1991/1029
## diff -e /n/bootesdump/1991/1028/sys/src/9/port/ipdat.h /n/bootesdump/1991/1029/sys/src/9/port/ipdat.h
510a
extern Qinfo arpinfo;
.
489d
432,436d
## diffname port/ipdat.h 1991/1101
## diff -e /n/bootesdump/1991/1029/sys/src/9/port/ipdat.h /n/bootesdump/1991/1101/sys/src/9/port/ipdat.h
119c
	Ilclose,
.
## diffname port/ipdat.h 1991/1102
## diff -e /n/bootesdump/1991/1101/sys/src/9/port/ipdat.h /n/bootesdump/1991/1102/sys/src/9/port/ipdat.h
107a
	int	timeout;
.
## diffname port/ipdat.h 1991/1104
## diff -e /n/bootesdump/1991/1102/sys/src/9/port/ipdat.h /n/bootesdump/1991/1104/sys/src/9/port/ipdat.h
270d
261c
/* An ip interface used for UDP/TCP/IL */
.
## diffname port/ipdat.h 1991/1106
## diff -e /n/bootesdump/1991/1104/sys/src/9/port/ipdat.h /n/bootesdump/1991/1106/sys/src/9/port/ipdat.h
106a
	ulong	rstart;
.
## diffname port/ipdat.h 1991/1107
## diff -e /n/bootesdump/1991/1106/sys/src/9/port/ipdat.h /n/bootesdump/1991/1107/sys/src/9/port/ipdat.h
104c
	ulong	next;
.
## diffname port/ipdat.h 1991/1114
## diff -e /n/bootesdump/1991/1107/sys/src/9/port/ipdat.h /n/bootesdump/1991/1114/sys/src/9/port/ipdat.h
484a
void	iplocalfill(Chan*, char*, int);
void	ipremotefill(Chan*, char*, int);
void	ipstatusfill(Chan*, char*, int);
.
482,483c
int	ipclonecon(Chan *);
int	iplisten(Chan *);
.
363a
	Network		net;
.
## diffname port/ipdat.h 1991/1115
## diff -e /n/bootesdump/1991/1114/sys/src/9/port/ipdat.h /n/bootesdump/1991/1115/sys/src/9/port/ipdat.h
453c
Ipconv	*ipincoming(Ipconv*, Ipconv*);
.
266a
	int	index;
.
## diffname port/ipdat.h 1991/1121
## diff -e /n/bootesdump/1991/1115/sys/src/9/port/ipdat.h /n/bootesdump/1991/1121/sys/src/9/port/ipdat.h
439d
## diffname port/ipdat.h 1991/1124
## diff -e /n/bootesdump/1991/1121/sys/src/9/port/ipdat.h /n/bootesdump/1991/1124/sys/src/9/port/ipdat.h
403c
#define IP_MAX		(32*1024)		/* Maximum Internet packet size */
.
104,110c
	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 */
.
102a

	QLock	outo;			/* Out of order packet queue */
.
99,100c
	int	state;			/* Connection state */

	QLock	ackq;			/* Unacknowledged queue */
.
## diffname port/ipdat.h 1991/1126
## diff -e /n/bootesdump/1991/1124/sys/src/9/port/ipdat.h /n/bootesdump/1991/1126/sys/src/9/port/ipdat.h
501a
int	ipforme(uchar*);
.
463d
378d
281a
	Network	*net;			/* user level network interface */
.
240,244d
234,236d
## diffname port/ipdat.h 1991/1204
## diff -e /n/bootesdump/1991/1126/sys/src/9/port/ipdat.h /n/bootesdump/1991/1204/sys/src/9/port/ipdat.h
312c
#define DEF_MSS		512
.
## diffname port/ipdat.h 1991/1205
## diff -e /n/bootesdump/1991/1204/sys/src/9/port/ipdat.h /n/bootesdump/1991/1205/sys/src/9/port/ipdat.h
314,315d
312c
#define DEF_MSS		1024
.
## diffname port/ipdat.h 1991/1216
## diff -e /n/bootesdump/1991/1205/sys/src/9/port/ipdat.h /n/bootesdump/1991/1216/sys/src/9/port/ipdat.h
379a
	ulong  age;
.
## diffname port/ipdat.h 1991/12171
## diff -e /n/bootesdump/1991/1216/sys/src/9/port/ipdat.h /n/bootesdump/1991/12171/sys/src/9/port/ipdat.h
342,352c
	Closed = 0,
	Listen,
	Syn_sent,
	Syn_received,
	Established,
	Finwait1,
	Finwait2,
	Close_wait,
	Closing,
	Last_ack,
	Time_wait
.
340c
enum					/* Tcp connection states */
.
## diffname port/ipdat.h 1992/0103
## diff -e /n/bootesdump/1991/12171/sys/src/9/port/ipdat.h /n/bootesdump/1992/0103/sys/src/9/port/ipdat.h
108a
	Lock	nxl;
.
## diffname port/ipdat.h 1992/0105
## diff -e /n/bootesdump/1992/0103/sys/src/9/port/ipdat.h /n/bootesdump/1992/0105/sys/src/9/port/ipdat.h
107d
## diffname port/ipdat.h 1992/0107
## diff -e /n/bootesdump/1992/0105/sys/src/9/port/ipdat.h /n/bootesdump/1992/0107/sys/src/9/port/ipdat.h
440c
void	ipfragfree(Fragq*, int);
.
## diffname port/ipdat.h 1992/0111
## diff -e /n/bootesdump/1992/0107/sys/src/9/port/ipdat.h /n/bootesdump/1992/0111/sys/src/9/port/ipdat.h
463d
452c
void	close_self(Ipconv *, char []);
.
284c
	char	*err;			/* Async protocol error */
.
## diffname port/ipdat.h 1992/0128
## diff -e /n/bootesdump/1992/0111/sys/src/9/port/ipdat.h /n/bootesdump/1992/0128/sys/src/9/port/ipdat.h
438c
Port	nextport(Ipconv *, int);
.
244a
struct Tcpctl
{
	QLock;
	struct Tctl;
};
.
199d
197c
struct Tctl
.
## diffname port/ipdat.h 1992/0130
## diff -e /n/bootesdump/1992/0128/sys/src/9/port/ipdat.h /n/bootesdump/1992/0130/sys/src/9/port/ipdat.h
501c
#define BLKFRAG(xp)	((Ipfrag *)((xp)->base))
.
## diffname port/ipdat.h 1992/0213
## diff -e /n/bootesdump/1992/0130/sys/src/9/port/ipdat.h /n/bootesdump/1992/0213/sys/src/9/port/ipdat.h
518a

/* offsets into Myip */
enum {
	Myself=		0,
	Mybcast=	1,
	Mynet=		3,
	Mysubnet=	5,
};
.
506c
extern Ipaddr Myip[4];
.
## diffname port/ipdat.h 1992/0214
## diff -e /n/bootesdump/1992/0213/sys/src/9/port/ipdat.h /n/bootesdump/1992/0214/sys/src/9/port/ipdat.h
506c
extern Ipaddr Myip[7];
.
495a
void	ipsetaddrs(void);
.
## diffname port/ipdat.h 1992/0301
## diff -e /n/bootesdump/1992/0214/sys/src/9/port/ipdat.h /n/bootesdump/1992/0301/sys/src/9/port/ipdat.h
117a
	int	querytime;		/* Query timer */
	int	deathtime;		/* Time to kill connection */
.
## diffname port/ipdat.h 1992/0303
## diff -e /n/bootesdump/1992/0301/sys/src/9/port/ipdat.h /n/bootesdump/1992/0303/sys/src/9/port/ipdat.h
249a
	Rendez syner;
.
100a
	Rendez	syncer;			/* where syncer waits for a connect */

.
## diffname port/ipdat.h 1992/0304
## diff -e /n/bootesdump/1992/0303/sys/src/9/port/ipdat.h /n/bootesdump/1992/0304/sys/src/9/port/ipdat.h
513a
extern Ipaddr Mynetmask;
.
## diffname port/ipdat.h 1992/0307
## diff -e /n/bootesdump/1992/0304/sys/src/9/port/ipdat.h /n/bootesdump/1992/0307/sys/src/9/port/ipdat.h
377a
	ulong		chkerrs;		/* checksum errors */
	ulong		tx;
	ulong		rx;
.
## diffname port/ipdat.h 1992/0310
## diff -e /n/bootesdump/1992/0307/sys/src/9/port/ipdat.h /n/bootesdump/1992/0310/sys/src/9/port/ipdat.h
379,380d
345,346d
247a

.
## diffname port/ipdat.h 1992/0313
## diff -e /n/bootesdump/1992/0310/sys/src/9/port/ipdat.h /n/bootesdump/1992/0313/sys/src/9/port/ipdat.h
528c
enum
{
.
501a
int	ipconbusy(Ipconv*);
.
## diffname port/ipdat.h 1992/0320
## diff -e /n/bootesdump/1992/0313/sys/src/9/port/ipdat.h /n/bootesdump/1992/0320/sys/src/9/port/ipdat.h
321c
#define MSPTICK		100
.
## diffname port/ipdat.h 1992/0321
## diff -e /n/bootesdump/1992/0320/sys/src/9/port/ipdat.h /n/bootesdump/1992/0321/sys/src/9/port/ipdat.h
238c
	ulong	sndcnt;			/* Amount of data in send queue */
.
235c
	ulong	rcvcnt;
.
## diffname port/ipdat.h 1992/0325
## diff -e /n/bootesdump/1992/0321/sys/src/9/port/ipdat.h /n/bootesdump/1992/0325/sys/src/9/port/ipdat.h
472d
470c
int	pullb(Block **, int);
.
431c
/* IP function declarations */
.
## diffname port/ipdat.h 1992/0414
## diff -e /n/bootesdump/1992/0325/sys/src/9/port/ipdat.h /n/bootesdump/1992/0414/sys/src/9/port/ipdat.h
297c
	Ipconv 	*newcon;		/* Flags that this is the start of a connection */
.
## diffname port/ipdat.h 1992/0416
## diff -e /n/bootesdump/1992/0414/sys/src/9/port/ipdat.h /n/bootesdump/1992/0416/sys/src/9/port/ipdat.h
501a
void	tcpflushincoming(Ipconv*);
.
253a
	struct Tctl;
.
252d
234c
	Blist	rcvq;
.
## diffname port/ipdat.h 1992/0606
## diff -e /n/bootesdump/1992/0416/sys/src/9/port/ipdat.h /n/bootesdump/1992/0606/sys/src/9/port/ipdat.h
343c
#define Nreseq		128
.
## diffname port/ipdat.h 1992/0614
## diff -e /n/bootesdump/1992/0606/sys/src/9/port/ipdat.h /n/bootesdump/1992/0614/sys/src/9/port/ipdat.h
424c
#define	IP_ILPROTO	40
.
## diffname port/ipdat.h 1992/0623
## diff -e /n/bootesdump/1992/0614/sys/src/9/port/ipdat.h /n/bootesdump/1992/0623/sys/src/9/port/ipdat.h
282d
280a
	Netprot;			/* stat info */
.
## diffname port/ipdat.h 1992/0625
## diff -e /n/bootesdump/1992/0623/sys/src/9/port/ipdat.h /n/bootesdump/1992/0625/sys/src/9/port/ipdat.h
531,534c
	Myself		= 0,
	Mybcast		= 1,
	Mynet		= 3,
	Mysubnet	= 5,
.
511,512d
502a
void	tcprcvwin(Ipconv *);
void	tcpstart(Ipconv *, int, ushort, char);
int	trim(Tcpctl *, Tcp *, Block **, ushort *);
void	udprcvmsg(Ipconv *, Block*);
void	update(Ipconv *, Tcp *);
.
491,501d
487,489c
void	tcp_output(Ipconv*);
void	tcp_timeout(void *);
void	tcpackproc(void*);
.
484,485c
void	stop_timer(Timer *);
void	tcp_acktimer(void *);
.
478,482c
void	start_timer(Timer *);
.
476c
int	seq_le(int, int);
int	seq_lt(int, int);
int	seq_within(int, int, int);
int	seq_within(int, int, int);
.
463,474d
456,461c
int	seq_ge(int, int);
.
454a
ushort	ptcl_csum(Block*bp, int, int);
int	pullb(Block **, int);
void	reset(Ipaddr, Ipaddr, char, ushort, Tcp*);
.
453c
Ipconv*	portused(Ipconv *, Port);
void	ppkt(Block*);
.
441,451c
int	ntohtcp(Tcp *, Block **);
.
437,438c
void	ipremotefill(Chan*, char*, int);
void	iproute(uchar*, uchar*);
void	ipsetaddrs(void);
void	ipstatusfill(Chan*, char*, int);
Ipifc*	newipifc(uchar, void (*)(Ipconv *, Block*), Ipconv *, int, int, int, char*);
Port	nextport(Ipconv *, int);
.
435c
Block*	ip_reassemble(int, Block*, Etherhdr*);
int	ipclonecon(Chan *);
int	ipconbusy(Ipconv*);
int	ipforme(uchar*);
Fragq*	ipfragallo(void);
void	ipfragfree(Fragq*, int);
Ipconv*	ipincoming(Ipconv*, Ipconv*);
int	iplisten(Chan *);
void	iplocalfill(Chan*, char*, int);
void	ipmkdir(Qinfo *, Dirtab *, Ipconv *);
.
433a
int	dupb(Block **, Block *, int, int);
void	extract_oob(Block **, Block **, Tcp *);
void	get_reseq(Tcpctl *, char *, Tcp *, Block **, ushort *);
void	hnputl(uchar*, ulong);
void	hnputs(uchar*, ushort);
Block*	htontcp(Tcp *, Block *, Tcphdr *);
Block*	htontcp(Tcp *, Block *, Tcphdr *);
void	iloutoforder(Ipconv*, Ilhdr*, Block*);
void	ilstart(Ipconv *, int, int);
int	inb_window(Tcpctl *, int);
void	init_tcpctl(Ipconv *);
void	initfrag(int);
Ipconv*	ip_conn(Ipconv *, Port, Port, Ipaddr dest, char proto);
.
426,432c
void	add_reseq(Tcpctl *, char, Tcp *, Block *, ushort);
int	arp_lookup(uchar*, uchar*);
int	backoff(int);
Block*	btrim(Block*, int, int);
void	close_self(Ipconv *, char []);
.
421,424c
	/* Protocol port numbers */
	PORTALLOC	= 5000,			/* First automatic allocated port */
	PRIVPORTALLOC	= 600,			/* First priveleged port allocated */
	PORTMAX		= 30000,		/* Last port to allocte */
};
.
415,419c
	/* Protocol numbers */
	IP_UDPPROTO	= 17,
	IP_TCPPROTO	= 6,
	IP_ILPROTO	= 40,
.
403,413c
	/* Sizes */
	IP_MAX		= (32*1024),		/* Maximum Internet packet size */
	UDP_MAX		= (IP_MAX-ETHER_IPHDR),	/* Maximum UDP datagram size */
	UDP_DATMAX	= (UDP_MAX-UDP_HDRSIZE),/* Maximum amount of udp data */
	IL_DATMAX	= (IP_MAX-IL_HDRSIZE),	/* Maximum IL data in one ip packet */
.
398,401c
enum {
	IP_VER		= 0x40,			/* Using IP version 4 */
	IP_HLEN		= 0x05,			/* Header length in characters */
	IP_DF		= 0x4000,		/* Don't fragment */
	IP_MF		= 0x2000,		/* More fragments */
.
350c
	Closed		= 0,
.
348c
enum				/* Tcp connection states */
.
343,344d
339,341c
	TIMER_STOP	= 0,
	TIMER_RUN	= 1,
	TIMER_EXPIRE	= 2,
};
.
330,337c
	MAXBACKOFF	= 5,
	FORCE		= 1,
	CLONE		= 2,
	RETRAN		= 4,
	ACTIVE		= 8,
	SYNACK		= 16,
	AGAIN		= 8,
	DGAIN		= 4,
.
325,328c
	TCP_PASSIVE	= 0,	/* Listen connection */
	TCP_ACTIVE	= 1,	/* Outgoing connection */
	IL_PASSIVE	= 0,
	IL_ACTIVE	= 1,
.
319,323c
	MSS_LENGTH	= 4,	/* Mean segment size */
	MSL2		= 10,
	MSPTICK		= 100,	/* Milliseconds per timer tick */
	DEF_MSS		= 1024,	/* Default mean segment */
	DEF_RTT		= 1000,	/* Default round trip */
.
315,317c
	EOL_KIND	= 0,
	NOOP_KIND	= 1,
	MSS_KIND	= 2,
.
308,313c
	URG		= 0x20,	/* Data marked urgent */
	ACK		= 0x10,	/* Aknowledge is valid */
	PSH		= 0x08,	/* Whole data pipe is pushed */
	RST		= 0x04,	/* Reset connection */
	SYN		= 0x02,	/* Pkt. is synchronise */
	FIN		= 0x01,	/* Start close down */
.
305,306c
enum {
	MAX_TIME 	= (1<<20),/* Forever */
	TCP_ACK		= 200,	/* Timed ack sequence every 200ms */
.
300,301c
		Tcpctl	tcpctl;	/* Tcp control block */
		Ilcb	ilctl;	/* Il control block */
.
294,297c
	char	*err;		/* Async protocol error */
	int	backlog;	/* Maximum number of waiting connections */
	int	curlog;		/* Number of waiting connections */
	Ipconv 	*newcon;	/* This is the start of a connection */
.
289,292c
	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 */
.
283,287c
	Qinfo	*stproto;	/* Stream protocol for this device */
	Network	*net;		/* user level network interface */
	Ipaddr	dst;		/* Destination from connect */
	Port	psrc;		/* Source port */
	Port	pdst;		/* Destination port */
.
280,281c
	QLock;			/* Ref count lock */
	Netprot;		/* stat info */
.
242,246c
	Timer	acktimer;	/* Acknoledge timer */
	Timer	rtt_timer;	/* Round trip timer */
	int	rttseq;		/* Round trip sequence */
	int	srtt;		/* Shortened round trip */
	int	mdev;		/* Mean deviation of round trip */
.
240c
	Reseq	*reseq;		/* Resequencing queue */
.
237,238c
	Block	*sndq;		/* List of data going out */
	ulong	sndcnt;		/* Amount of data in send queue */
.
234c
	Blist	rcvq;		/* Received data */
.
231,232c
	char	flags;		/* State flags */
	char	tos;		/* Type of service */
.
229c
	int	last_ack;	/* Last acknowledege received */
.
219,223d
214a
	struct {
		int	nxt;
		ushort	wnd;
		int	up;
	} rcv;
.
207,213c
		int	una;	/* Unacked data pointer */
		int	nxt;	/* Next sequence expected */
		int	ptr;	/* Data pointer */
		ushort	wnd;	/* Tcp send window */
		int	up;	/* Urgent data pointer */
		int	wl1;
		int	wl2;
.
141c
enum				/* Connection state */
.
130c
enum				/* Packet types */
.
127c
	int	window;		/* Maximum receive window */
.
123,125c
	int	rtt;		/* Average round trip time */
	ulong	rttack;		/* The ack we are waiting for */
	ulong	ackms;		/* Time we issued */
.
116,121c
	int	timeout;	/* Time out counter */
	int	slowtime;	/* Slow time counter */
	int	fasttime;	/* Retransmission timer */
	int	acktime;	/* Acknowledge timer */
	int	querytime;	/* Query timer */
	int	deathtime;	/* Time to kill connection */
.
111,114c
	ulong	next;		/* Id of next to send */
	ulong	recvd;		/* Last packet received */
	ulong	start;		/* Local start id */
	ulong	rstart;		/* Remote start id */
.
107c
	QLock	outo;		/* Out of order packet queue */
.
103c
	QLock	ackq;		/* Unacknowledged queue */
.
101c
	Rendez	syncer;		/* where syncer waits for a connect */
.
99c
	int	state;		/* Connection state */
.
97c
struct Ilcb			/* Control block */
.
14,15c
typedef struct Udphdr	Udphdr;
.
7,8d
5a
typedef struct Ipconv	Ipconv;
typedef struct Ipfrag	Ipfrag;
typedef struct Ipifc	Ipifc;
.
4c
typedef struct Ilcb	Ilcb;
typedef struct Ilhdr	Ilhdr;
.
1,2c
typedef struct Etherhdr	Etherhdr;
.
## diffname port/ipdat.h 1992/0626
## diff -e /n/bootesdump/1992/0625/sys/src/9/port/ipdat.h /n/bootesdump/1992/0626/sys/src/9/port/ipdat.h
504c
extern Ipifc *ipifc[];
.
490c
void	udprcvmsg(Ipifc*, Block*);
.
481c
void	tcp_input(Ipifc*, Block *);
.
462c
Ipconv*	portused(Ipifc*, Port);
.
459a
ulong	nhgetl(uchar*);
.
456,458c
Port	nextport(Ipifc*, int);
.
447c
Ipconv*	ipincoming(Ipifc*, Ipconv*);
.
443a
Ipconv*	ipcreateconv(Ipifc*, int);
.
439c
void	initipifc(Ipifc*, uchar, void (*)(Ipifc*, Block*), int, int, int, char*);
Ipconv*	ip_conn(Ipifc*, Port, Port, Ipaddr dest, char proto);
.
426d
380a

.
378c
	Lock;
	Ipconv		**conv;			/* conversations */
.
371,373c
	void (*iprcv)	(Ipifc*, Block*);	/* Receive demultiplexor */
.
369c
	Network;				/* user level network interface */
	Ipifc		*next;
	int 		inited;
.
362a
enum
{
	Nipconv=	512,		/* max conversations per interface */
};

.
289c
	Ipifc	*ifc;	/* Ip protocol interface */
.
283,284d
## diffname port/ipdat.h 1992/0627
## diff -e /n/bootesdump/1992/0626/sys/src/9/port/ipdat.h /n/bootesdump/1992/0627/sys/src/9/port/ipdat.h
363a
	Udphdrsize=	6,		/* size if a to/from user Udp header */
.
293a
	int	headers;	/* include header in packet */
.
## diffname port/ipdat.h 1992/0711
## diff -e /n/bootesdump/1992/0627/sys/src/9/port/ipdat.h /n/bootesdump/1992/0711/sys/src/9/port/ipdat.h
445,446c
void	initipifc(Ipifc*, uchar, void (*)(Ipifc*, Block*), int, int, int);
Ipconv*	ip_conn(Ipifc*, Port, Port, Ipaddr dest);
.
## diffname port/ipdat.h 1992/0826
## diff -e /n/bootesdump/1992/0711/sys/src/9/port/ipdat.h /n/bootesdump/1992/0826/sys/src/9/port/ipdat.h
432c
void	localclose(Ipconv *, char []);
.
## diffname port/ipdat.h 1992/0903
## diff -e /n/bootesdump/1992/0826/sys/src/9/port/ipdat.h /n/bootesdump/1992/0903/sys/src/9/port/ipdat.h
483,490c
void	tcpsetstate(Ipconv *, char);
void	tcpgo(Timer *);
void	tcphalt(Timer *);
void	tcpxstate(Ipconv*, char oldstate, char newstate);
void	tcpacktimer(void *);
void	tcpinput(Ipifc*, Block *);
void	tcpoutput(Ipconv*);
void	tcptimeout(void *);
.
475c
void	tcpsndsyn(Tcpctl*);
.
## diffname port/ipdat.h 1992/0906
## diff -e /n/bootesdump/1992/0903/sys/src/9/port/ipdat.h /n/bootesdump/1992/0906/sys/src/9/port/ipdat.h
383d
347c
enum					/* Tcp connection states */
.
345c
#define	run_timer(t)	((t)->state == TimerON)
.
338,341d
325,326c
	TCP_PASSIVE	= 0,		/* Listen connection */
	TCP_ACTIVE	= 1,		/* Outgoing connection */
.
321,323c
	MSPTICK		= 100,		/* Milliseconds per timer tick */
	DEF_MSS		= 1024,		/* Default mean segment */
	DEF_RTT		= 1000,		/* Default round trip */
.
319c
	MSS_LENGTH	= 4,		/* Mean segment size */
.
308,313c
	URG		= 0x20,		/* Data marked urgent */
	ACK		= 0x10,		/* Aknowledge is valid */
	PSH		= 0x08,		/* Whole data pipe is pushed */
	RST		= 0x04,		/* Reset connection */
	SYN		= 0x02,		/* Pkt. is synchronise */
	FIN		= 0x01,		/* Start close down */
.
304,306c
enum
{
	MAX_TIME 	= (1<<20),	/* Forever */
	TCP_ACK		= 200,		/* Timed ack sequence every 200ms */
.
299,300c
		Tcpctl	tcpctl;		/* Tcp control block */
		Ilcb	ilctl;		/* Il control block */
.
292,296c
	char	*err;			/* Async protocol error */
	int	backlog;		/* Maximum number of waiting connections */
	int	headers;		/* include header in packet */
	int	curlog;			/* Number of waiting connections */
	Ipconv 	*newcon;		/* This is the start of a connection */
.
287,290c
	Ipifc	*ifc;			/* 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 */
.
283,285c
	Ipaddr	dst;			/* Destination from connect */
	Port	psrc;			/* Source port */
	Port	pdst;			/* Destination port */
.
280,281c
	QLock;				/* Ref count lock */
	Netprot;			/* stat info */
.
240,246c
	Reseq	*reseq;			/* Resequencing queue */
	Timer	timer;			/* Activity timer */
	Timer	acktimer;		/* Acknoledge timer */
	Timer	rtt_timer;		/* Round trip timer */
	int	rttseq;			/* Round trip sequence */
	int	srtt;			/* Shortened round trip */
	int	mdev;			/* Mean deviation of round trip */
.
237,238c
	Block	*sndq;			/* List of data going out */
	ulong	sndcnt;			/* Amount of data in send queue */
.
234,235c
	Blist	rcvq;			/* Received data */
	ulong	rcvcnt;			/* Bytes queued for upstream */
.
220,232c
	int	iss;			/* Initial sequence number */
	ushort	cwind;			/* Congestion window */
	ushort	ssthresh;		/* Slow start threshold */
	int	resent;			/* Bytes just resent */
	int	irs;			/* Initial received squence */
	ushort	mss;			/* Mean segment size */
	int	rerecv;			/* Overlap of data rerecevived */
	ushort	window;			/* Recevive window */
	int	max_snd;		/* Max send */
	int	last_ack;		/* Last acknowledege received */
	char	backoff;		/* Exponential backoff counter */
	char	flags;			/* State flags */
	char	tos;			/* Type of service */
.
216,218c
		int	nxt;		/* Receive pointer to next byte slot */
		ushort	wnd;		/* Receive window incoming */
		int	up;		/* Urgent pointer */
.
207,211c
		int	una;		/* Unacked data pointer */
		int	nxt;		/* Next sequence expected */
		int	ptr;		/* Data pointer */
		ushort	wnd;		/* Tcp send window */
		int	up;		/* Urgent data pointer */
.
203,205c
	uchar	state;			/* Connection state */
	uchar	type;			/* Listening or active connection */
	uchar	code;			/* Icmp code */		
.
189d
187a
enum
{
	TimerOFF	= 0,
	TimerON		= 1,
	TimerDONE	= 2,
};
.
41d
## diffname port/ipdat.h 1992/12051
## diff -e /n/bootesdump/1992/0906/sys/src/9/port/ipdat.h /n/bootesdump/1992/12051/sys/src/9/port/ipdat.h
424a
	UNPRIVPORTALLOC	= 1024,			/* First unpriveleged port allocated */
.
## diffname port/ipdat.h 1992/1221
## diff -e /n/bootesdump/1992/12051/sys/src/9/port/ipdat.h /n/bootesdump/1992/1221/sys/src/9/port/ipdat.h
242a
	Rendez	sndr;			/* process flow control */
	QLock	sndrlock;
	int	sndfull;
.
## diffname port/ipdat.h 1993/0218
## diff -e /n/bootesdump/1992/1221/sys/src/9/port/ipdat.h /n/bootesdump/1993/0218/sys/src/9/port/ipdat.h
329c
	MSPTICK		= 50,		/* Milliseconds per timer tick */
.
314c
	TCP_ACK		= 50,		/* Timed ack sequence in ms */
.
233c
	ulong	last_ack;		/* Last acknowledege received */
.
220c
		ulong	nxt;		/* Receive pointer to next byte slot */
.
## diffname port/ipdat.h 1993/0220
## diff -e /n/bootesdump/1993/0218/sys/src/9/port/ipdat.h /n/bootesdump/1993/0220/sys/src/9/port/ipdat.h
480,486c
int	seq_ge(ulong, ulong);
int	seq_gt(ulong, ulong);
int	seq_gt(ulong, ulong);
int	seq_le(ulong, ulong);
int	seq_lt(ulong, ulong);
int	seq_within(ulong, ulong, ulong);
int	seq_within(ulong, ulong, ulong);
.
267,268c
	ulong	seq;
	ulong	ack;
.
251c
	ulong	rttseq;			/* Round trip sequence */
.
224c
	ulong	iss;			/* Initial sequence number */
.
222c
		ulong	up;		/* Urgent pointer */
.
215,217c
		ulong	up;		/* Urgent data pointer */
		ulong	wl1;
		ulong	wl2;
.
211,213c
		ulong	una;		/* Unacked data pointer */
		ulong	nxt;		/* Next sequence expected */
		ulong	ptr;		/* Data pointer */
.
## diffname port/ipdat.h 1993/0501
## diff -e /n/bootesdump/1993/0220/sys/src/9/port/ipdat.h /n/fornaxdump/1993/0501/sys/src/brazil/port/ipdat.h
480,486c
int	seq_ge(int, int);
int	seq_gt(int, int);
int	seq_gt(int, int);
int	seq_le(int, int);
int	seq_lt(int, int);
int	seq_within(int, int, int);
int	seq_within(int, int, int);
.
329c
	MSPTICK		= 100,		/* Milliseconds per timer tick */
.
314c
	TCP_ACK		= 200,		/* Timed ack sequence every 200ms */
.
267,268c
	int	seq;
	int	ack;
.
251c
	int	rttseq;			/* Round trip sequence */
.
233c
	int	last_ack;		/* Last acknowledege received */
.
224c
	int	iss;			/* Initial sequence number */
.
222c
		int	up;		/* Urgent pointer */
.
220c
		int	nxt;		/* Receive pointer to next byte slot */
.
215,217c
		int	up;		/* Urgent data pointer */
		int	wl1;
		int	wl2;
.
211,213c
		int	una;		/* Unacked data pointer */
		int	nxt;		/* Next sequence expected */
		int	ptr;		/* Data pointer */
.
## diffname port/ipdat.h 1993/0804 # deleted
## diff -e /n/fornaxdump/1993/0501/sys/src/brazil/port/ipdat.h /n/fornaxdump/1993/0804/sys/src/brazil/port/ipdat.h
1,533d

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.