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

1991/1126/port/tcpif.c (diff list | history)

1991/0424/sys/src/9/port/tcpif.c:54,601991/1014/sys/src/9/port/tcpif.c:54,60 (short | long)
1991/0424    
} 
 
void 
open_tcp(Ipconv *s, int mode, ushort window, char tos) 
1991/1014    
tcpstart(Ipconv *s, int mode, ushort window, char tos) 
1991/0424    
{ 
	Tcpctl *tcb = &s->tcpctl; 
 
1991/1014/sys/src/9/port/tcpif.c:15,241991/1120/sys/src/9/port/tcpif.c:15,21 (short | long)
1991/0424    
{ 
	Block *bp; 
	int len; 
	char *ptr = 0; 
 
	SET(len); 
                 
	DPRINT("state_upcall: %s -> %s err %d\n",  
	      tcpstate[oldstate], tcpstate[newstate], s->err); 
 
1991/1014/sys/src/9/port/tcpif.c:33,551991/1120/sys/src/9/port/tcpif.c:30,49
1991/0424    
	case CLOSE_WAIT:		/* Remote closes */ 
		if(s->readq == 0) 
			break; 
1991/1120    
 
1991/0424    
		if(s->err) { 
			ptr = errstrtab[s->err]; 
			len = strlen(ptr)+1; 
1991/1120    
			len = strlen(errstrtab[s->err]); 
1991/0424    
			bp = allocb(len); 
1991/1120    
			strcpy((char *)bp->wptr, errstrtab[s->err]); 
			bp->wptr += len; 
1991/0424    
		} 
		else 
			bp = allocb(0); 
 
		if(bp) { 
			if(ptr) { 
				strcpy((char *)bp->wptr, ptr); 
				bp->wptr += len; 
			} 
			bp->flags |= S_DELIM; 
			bp->type = M_HANGUP; 
			PUTNEXT(s->readq, bp); 
		} 
1991/1120    
		bp->flags |= S_DELIM; 
		bp->type = M_HANGUP; 
		PUTNEXT(s->readq, bp); 
		break; 
1991/0424    
	} 
} 
 
1991/1120/sys/src/9/port/tcpif.c:27,321991/1126/sys/src/9/port/tcpif.c:27,33 (short | long)
1991/0424    
		s->psrc = 0; 
		s->pdst = 0; 
		s->dst = 0; 
1991/1126    
		/* NO break */ 
1991/0424    
	case CLOSE_WAIT:		/* Remote closes */ 
		if(s->readq == 0) 
			break; 
1991/1126/sys/src/9/port/tcpif.c:23,341991/12171/sys/src/9/port/tcpif.c:23,34 (short | long)
1991/0424    
		return; 
 
	switch(newstate) { 
	case CLOSED: 
1991/12171    
	case Closed: 
1991/0424    
		s->psrc = 0; 
		s->pdst = 0; 
		s->dst = 0; 
1991/1126    
		/* NO break */ 
1991/0424    
	case CLOSE_WAIT:		/* Remote closes */ 
1991/12171    
	case Close_wait:		/* Remote closes */ 
1991/0424    
		if(s->readq == 0) 
			break; 
1991/1120    
 
1991/1126/sys/src/9/port/tcpif.c:53,591991/12171/sys/src/9/port/tcpif.c:53,59
1991/0424    
{ 
	Tcpctl *tcb = &s->tcpctl; 
 
	if(tcb->state != CLOSED) 
1991/12171    
	if(tcb->state != Closed) 
1991/0424    
		return; 
 
	init_tcpctl(s); 
1991/1126/sys/src/9/port/tcpif.c:64,701991/12171/sys/src/9/port/tcpif.c:64,70
1991/0424    
	switch(mode){ 
	case TCP_PASSIVE: 
		tcb->flags |= CLONE; 
		setstate(s, LISTEN); 
1991/12171    
		setstate(s, Listen); 
1991/0424    
		break; 
	case TCP_ACTIVE: 
		/* Send SYN, go into SYN_SENT state */ 
1991/1126/sys/src/9/port/tcpif.c:71,771991/12171/sys/src/9/port/tcpif.c:71,77
1991/0424    
		tcb->flags |= ACTIVE; 
		qlock(tcb); 
		send_syn(tcb); 
		setstate(s, SYN_SENT); 
1991/12171    
		setstate(s, Syn_sent); 
1991/0424    
		tcp_output(s); 
		qunlock(tcb); 
		break; 
1991/12171/sys/src/9/port/tcpif.c:3,91992/0111/sys/src/9/port/tcpif.c:3,9 (short | long)
Move error.h to ../port. Change errors to actual strings.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
#include	"mem.h" 
#include	"dat.h" 
#include	"fns.h" 
#include	"errno.h" 
1992/0111    
#include	"../port/error.h" 
1991/0424    
#include 	"arp.h" 
#include 	"ipdat.h" 
 
1991/12171/sys/src/9/port/tcpif.c:16,221992/0111/sys/src/9/port/tcpif.c:16,22
1991/0424    
	Block *bp; 
	int len; 
 
	DPRINT("state_upcall: %s -> %s err %d\n",  
1992/0111    
	DPRINT("state_upcall: %s -> %s err %s\n",  
1991/0424    
	      tcpstate[oldstate], tcpstate[newstate], s->err); 
 
	if(oldstate == newstate) 
1991/12171/sys/src/9/port/tcpif.c:33,411992/0111/sys/src/9/port/tcpif.c:33,41
1991/0424    
			break; 
1991/1120    
 
1991/0424    
		if(s->err) { 
1991/1120    
			len = strlen(errstrtab[s->err]); 
1992/0111    
			len = strlen(s->err); 
1991/0424    
			bp = allocb(len); 
1991/1120    
			strcpy((char *)bp->wptr, errstrtab[s->err]); 
1992/0111    
			strcpy((char *)bp->wptr, s->err); 
1991/1120    
			bp->wptr += len; 
1991/0424    
		} 
		else 
1992/0111/sys/src/9/port/tcpif.c:29,371992/0223/sys/src/9/port/tcpif.c:29,34 (short | long)
1991/0424    
		s->dst = 0; 
1991/1126    
		/* NO break */ 
1991/12171    
	case Close_wait:		/* Remote closes */ 
1991/0424    
		if(s->readq == 0) 
			break; 
1991/1120    
                 
1991/0424    
		if(s->err) { 
1992/0111    
			len = strlen(s->err); 
1991/0424    
			bp = allocb(len); 
1992/0111/sys/src/9/port/tcpif.c:43,491992/0223/sys/src/9/port/tcpif.c:40,51
1991/0424    
 
1991/1120    
		bp->flags |= S_DELIM; 
		bp->type = M_HANGUP; 
		PUTNEXT(s->readq, bp); 
1992/0223    
		qlock(s); 
		if(s->readq == 0) 
			freeb(bp); 
		else 
			PUTNEXT(s->readq, bp); 
		qunlock(s); 
1991/1120    
		break; 
1991/0424    
	} 
} 
1992/0223/sys/src/9/port/tcpif.c:15,201992/0303/sys/src/9/port/tcpif.c:15,21 (short | long)
1991/0424    
{ 
	Block *bp; 
	int len; 
1992/0303    
	Tcpctl *tcb = &s->tcpctl; 
1991/0424    
 
1992/0111    
	DPRINT("state_upcall: %s -> %s err %s\n",  
1991/0424    
	      tcpstate[oldstate], tcpstate[newstate], s->err); 
1992/0223/sys/src/9/port/tcpif.c:48,551992/0303/sys/src/9/port/tcpif.c:49,64
1992/0223    
		qunlock(s); 
1991/1120    
		break; 
1991/0424    
	} 
1992/0303    
 
	if(oldstate == Syn_sent) 
		wakeup(&tcb->syner); 
1991/0424    
} 
 
1992/0303    
static int 
notsyner(void *ic) 
{ 
	return ((Tcpctl*)ic)->state != Syn_sent; 
} 
1991/0424    
void 
1991/1014    
tcpstart(Ipconv *s, int mode, ushort window, char tos) 
1991/0424    
{ 
1992/0223/sys/src/9/port/tcpif.c:76,811992/0303/sys/src/9/port/tcpif.c:85,93
1991/12171    
		setstate(s, Syn_sent); 
1991/0424    
		tcp_output(s); 
		qunlock(tcb); 
1992/0303    
		sleep(&tcb->syner, notsyner, tcb); 
		if(tcb->state != Established && tcb->state != Syn_received) 
			error(Etimedout); 
1991/0424    
		break; 
	} 
} 
1992/0303/sys/src/9/port/tcpif.c:1,51992/0321/sys/src/9/port/tcpif.c:1,5 (short | long)
Move lib.h to ../port.
rsc Fri Mar 4 12:44:25 2005
1991/0424    
#include	"u.h" 
#include	"lib.h" 
1992/0321    
#include	"../port/lib.h" 
1991/0424    
#include	"mem.h" 
#include	"dat.h" 
#include	"fns.h" 
1992/0321/sys/src/9/port/tcpif.c:42,511992/0322/sys/src/9/port/tcpif.c:42,56 (short | long)
1991/1120    
		bp->flags |= S_DELIM; 
		bp->type = M_HANGUP; 
1992/0223    
		qlock(s); 
1992/0322    
		if(waserror()) { 
			qunlock(s); 
			nexterror(); 
		} 
1992/0223    
		if(s->readq == 0) 
			freeb(bp); 
		else 
			PUTNEXT(s->readq, bp); 
1992/0322    
		poperror(); 
1992/0223    
		qunlock(s); 
1991/1120    
		break; 
1991/0424    
	} 
1992/0321/sys/src/9/port/tcpif.c:81,891992/0322/sys/src/9/port/tcpif.c:86,99
1991/0424    
		/* Send SYN, go into SYN_SENT state */ 
		tcb->flags |= ACTIVE; 
		qlock(tcb); 
1992/0322    
		if(waserror()) { 
			qunlock(tcb); 
			nexterror(); 
		} 
1991/0424    
		send_syn(tcb); 
1991/12171    
		setstate(s, Syn_sent); 
1991/0424    
		tcp_output(s); 
1992/0322    
		poperror(); 
1991/0424    
		qunlock(tcb); 
1992/0303    
		sleep(&tcb->syner, notsyner, tcb); 
		if(tcb->state != Established && tcb->state != Syn_received) 
1992/0322/sys/src/9/port/tcpif.c:64,691992/0325/sys/src/9/port/tcpif.c:64,70 (short | long)
1992/0303    
{ 
	return ((Tcpctl*)ic)->state != Syn_sent; 
} 
1992/0325    
 
1991/0424    
void 
1991/1014    
tcpstart(Ipconv *s, int mode, ushort window, char tos) 
1991/0424    
{ 
1992/0322/sys/src/9/port/tcpif.c:82,871992/0325/sys/src/9/port/tcpif.c:83,89
1991/0424    
		tcb->flags |= CLONE; 
1991/12171    
		setstate(s, Listen); 
1991/0424    
		break; 
1992/0325    
 
1991/0424    
	case TCP_ACTIVE: 
		/* Send SYN, go into SYN_SENT state */ 
		tcb->flags |= ACTIVE; 
1992/0325/sys/src/9/port/tcpif.c:46,541992/0416/sys/src/9/port/tcpif.c:46,57 (short | long)
1992/0322    
			qunlock(s); 
			nexterror(); 
		} 
1992/0223    
		if(s->readq == 0) 
			freeb(bp); 
		else 
1992/0416    
		if(s->readq == 0){ 
			if(newstate == Close_wait) 
				putb(&tcb->rcvq, bp); 
			else 
				freeb(bp); 
		} else 
1992/0223    
			PUTNEXT(s->readq, bp); 
1992/0322    
		poperror(); 
1992/0223    
		qunlock(s); 
1992/0416/sys/src/9/port/tcpif.c:72,771992/0529/sys/src/9/port/tcpif.c:72,78 (short | long)
1991/1014    
tcpstart(Ipconv *s, int mode, ushort window, char tos) 
1991/0424    
{ 
	Tcpctl *tcb = &s->tcpctl; 
1992/0529    
	char msg[NAMELEN+2]; 
1991/0424    
 
1991/12171    
	if(tcb->state != Closed) 
1991/0424    
		return; 
1992/0529/sys/src/9/port/tcpif.c:72,781992/0711/sys/src/9/port/tcpif.c:72,77 (short | long)
1991/1014    
tcpstart(Ipconv *s, int mode, ushort window, char tos) 
1991/0424    
{ 
	Tcpctl *tcb = &s->tcpctl; 
1992/0529    
	char msg[NAMELEN+2]; 
1991/0424    
 
1991/12171    
	if(tcb->state != Closed) 
1991/0424    
		return; 
1992/0711/sys/src/9/port/tcpif.c:11,341992/0903/sys/src/9/port/tcpif.c:11,31 (short | long)
1991/0424    
#define DPRINT	if(tcpdbg) print 
 
void 
state_upcall(Ipconv *s, char oldstate, char newstate) 
1992/0903    
tcpxstate(Ipconv *s, char oldstate, char newstate) 
1991/0424    
{ 
	Block *bp; 
	int len; 
1992/0903    
	Block *bp; 
1992/0303    
	Tcpctl *tcb = &s->tcpctl; 
1991/0424    
 
1992/0111    
	DPRINT("state_upcall: %s -> %s err %s\n",  
1991/0424    
	      tcpstate[oldstate], tcpstate[newstate], s->err); 
                 
	if(oldstate == newstate) 
		return; 
 
	switch(newstate) { 
1991/12171    
	case Closed: 
1991/0424    
		s->psrc = 0; 
1992/0903    
		s->psrc = 0;		/* This connection is toast */ 
1991/0424    
		s->pdst = 0; 
		s->dst = 0; 
1991/1126    
		/* NO break */ 
1992/0903    
 
1991/12171    
	case Close_wait:		/* Remote closes */ 
1991/0424    
		if(s->err) { 
1992/0111    
			len = strlen(s->err); 
1992/0711/sys/src/9/port/tcpif.c:46,521992/0903/sys/src/9/port/tcpif.c:43,49
1992/0322    
			qunlock(s); 
			nexterror(); 
		} 
1992/0416    
		if(s->readq == 0){ 
1992/0903    
		if(s->readq == 0) { 
1992/0416    
			if(newstate == Close_wait) 
				putb(&tcb->rcvq, bp); 
			else 
1992/0711/sys/src/9/port/tcpif.c:84,901992/0903/sys/src/9/port/tcpif.c:81,87
1991/0424    
	switch(mode){ 
	case TCP_PASSIVE: 
		tcb->flags |= CLONE; 
1991/12171    
		setstate(s, Listen); 
1992/0903    
		tcpsetstate(s, Listen); 
1991/0424    
		break; 
1992/0325    
 
1991/0424    
	case TCP_ACTIVE: 
1992/0711/sys/src/9/port/tcpif.c:95,1031992/0903/sys/src/9/port/tcpif.c:92,100
1992/0322    
			qunlock(tcb); 
			nexterror(); 
		} 
1991/0424    
		send_syn(tcb); 
1991/12171    
		setstate(s, Syn_sent); 
1991/0424    
		tcp_output(s); 
1992/0903    
		tcpsndsyn(tcb); 
		tcpsetstate(s, Syn_sent); 
		tcpoutput(s); 
1992/0322    
		poperror(); 
1991/0424    
		qunlock(tcb); 
1992/0303    
		sleep(&tcb->syner, notsyner, tcb); 
1992/0903/sys/src/9/port/tcpif.c:15,251992/0906/sys/src/9/port/tcpif.c:15,26 (short | long)
1991/0424    
{ 
	int len; 
1992/0903    
	Block *bp; 
1992/0303    
	Tcpctl *tcb = &s->tcpctl; 
1992/0906    
	Tcpctl *tcb; 
1991/0424    
 
	if(oldstate == newstate) 
		return; 
 
1992/0906    
	tcb = &s->tcpctl; 
1991/0424    
	switch(newstate) { 
1991/12171    
	case Closed: 
1992/0903    
		s->psrc = 0;		/* This connection is toast */ 
1992/0903/sys/src/9/port/tcpif.c:68,811992/0906/sys/src/9/port/tcpif.c:69,84
1991/0424    
void 
1991/1014    
tcpstart(Ipconv *s, int mode, ushort window, char tos) 
1991/0424    
{ 
	Tcpctl *tcb = &s->tcpctl; 
1992/0906    
	Tcpctl *tcb; 
1991/0424    
 
1992/0906    
	tcb = &s->tcpctl; 
1991/12171    
	if(tcb->state != Closed) 
1991/0424    
		return; 
 
	init_tcpctl(s); 
 
	tcb->window = tcb->rcv.wnd = window; 
1992/0906    
	tcb->window = window; 
	tcb->rcv.wnd = window; 
1991/0424    
	tcb->tos = tos; 
 
	switch(mode){ 
1992/0906/sys/src/9/port/tcpif.c:100,1061992/1220/sys/src/9/port/tcpif.c:100,106 (short | long)
1992/0903    
		tcpoutput(s); 
1992/0322    
		poperror(); 
1991/0424    
		qunlock(tcb); 
1992/0303    
		sleep(&tcb->syner, notsyner, tcb); 
1992/1220    
		tsleep(&tcb->syner, notsyner, tcb, 120*1000); 
1992/0303    
		if(tcb->state != Established && tcb->state != Syn_received) 
			error(Etimedout); 
1991/0424    
		break; 
1992/1220/sys/src/9/port/tcpif.c:1,1081993/0804/sys/src/9/port/tcpif.c:0 (short | long)
Deleted.
rsc Mon Mar 7 10:32:24 2005
1991/0424    
#include	"u.h" 
1992/0321    
#include	"../port/lib.h" 
1991/0424    
#include	"mem.h" 
#include	"dat.h" 
#include	"fns.h" 
1992/0111    
#include	"../port/error.h" 
1991/0424    
#include 	"arp.h" 
#include 	"ipdat.h" 
                 
extern int tcpdbg; 
#define DPRINT	if(tcpdbg) print 
                 
void 
1992/0903    
tcpxstate(Ipconv *s, char oldstate, char newstate) 
1991/0424    
{ 
	int len; 
1992/0903    
	Block *bp; 
1992/0906    
	Tcpctl *tcb; 
1991/0424    
                 
	if(oldstate == newstate) 
		return; 
                 
1992/0906    
	tcb = &s->tcpctl; 
1991/0424    
	switch(newstate) { 
1991/12171    
	case Closed: 
1992/0903    
		s->psrc = 0;		/* This connection is toast */ 
1991/0424    
		s->pdst = 0; 
		s->dst = 0; 
1992/0903    
                 
1991/12171    
	case Close_wait:		/* Remote closes */ 
1991/0424    
		if(s->err) { 
1992/0111    
			len = strlen(s->err); 
1991/0424    
			bp = allocb(len); 
1992/0111    
			strcpy((char *)bp->wptr, s->err); 
1991/1120    
			bp->wptr += len; 
1991/0424    
		} 
		else 
			bp = allocb(0); 
                 
1991/1120    
		bp->flags |= S_DELIM; 
		bp->type = M_HANGUP; 
1992/0223    
		qlock(s); 
1992/0322    
		if(waserror()) { 
			qunlock(s); 
			nexterror(); 
		} 
1992/0903    
		if(s->readq == 0) { 
1992/0416    
			if(newstate == Close_wait) 
				putb(&tcb->rcvq, bp); 
			else 
				freeb(bp); 
		} else 
1992/0223    
			PUTNEXT(s->readq, bp); 
1992/0322    
		poperror(); 
1992/0223    
		qunlock(s); 
1991/1120    
		break; 
1991/0424    
	} 
1992/0303    
                 
	if(oldstate == Syn_sent) 
		wakeup(&tcb->syner); 
1991/0424    
} 
                 
1992/0303    
static int 
notsyner(void *ic) 
{ 
	return ((Tcpctl*)ic)->state != Syn_sent; 
} 
1992/0325    
                 
1991/0424    
void 
1991/1014    
tcpstart(Ipconv *s, int mode, ushort window, char tos) 
1991/0424    
{ 
1992/0906    
	Tcpctl *tcb; 
1991/0424    
                 
1992/0906    
	tcb = &s->tcpctl; 
1991/12171    
	if(tcb->state != Closed) 
1991/0424    
		return; 
                 
	init_tcpctl(s); 
                 
1992/0906    
	tcb->window = window; 
	tcb->rcv.wnd = window; 
1991/0424    
	tcb->tos = tos; 
                 
	switch(mode){ 
	case TCP_PASSIVE: 
		tcb->flags |= CLONE; 
1992/0903    
		tcpsetstate(s, Listen); 
1991/0424    
		break; 
1992/0325    
                 
1991/0424    
	case TCP_ACTIVE: 
		/* Send SYN, go into SYN_SENT state */ 
		tcb->flags |= ACTIVE; 
		qlock(tcb); 
1992/0322    
		if(waserror()) { 
			qunlock(tcb); 
			nexterror(); 
		} 
1992/0903    
		tcpsndsyn(tcb); 
		tcpsetstate(s, Syn_sent); 
		tcpoutput(s); 
1992/0322    
		poperror(); 
1991/0424    
		qunlock(tcb); 
1992/1220    
		tsleep(&tcb->syner, notsyner, tcb, 120*1000); 
1992/0303    
		if(tcb->state != Established && tcb->state != Syn_received) 
			error(Etimedout); 
1991/0424    
		break; 
	} 
} 


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