| plan 9 kernel history: overview | file list | diff list |
1992/0416/port/devip.c (diff list | history)
| 1992/0414/sys/src/9/port/devip.c:21,26 – 1992/0416/sys/src/9/port/devip.c:21,27 (short | long | prev | next) | ||
| 1991/12171 | Ipconv *ipconv[Nrprotocol]; /* Connections for each protocol */ Network *ipnet[Nrprotocol]; /* User level interface for protocol */ QLock ipalloc; /* Protocol port allocation lock */ | |
| 1992/0416 | Ipconv *tcpbase; /* Base tcp connection */ | |
| 1991/0424 | /* ARPA User Datagram Protocol */ void udpstiput(Queue *, Block *); | |
| 1992/0414/sys/src/9/port/devip.c:171,177 – 1992/0416/sys/src/9/port/devip.c:172,177 | ||
| 1991/1126 | netown(new->net, new->index, u->p->user, 0); | |
| 1992/0313 | ||
| 1991/1114 | new->ref = 1; | |
| 1992/0306 |
| |
| 1991/0424 | qunlock(new); return new; } | |
| 1992/0414/sys/src/9/port/devip.c:262,271 – 1992/0416/sys/src/9/port/devip.c:262,272 | ||
| 1991/1024 | cp->pdst = atoi(ctlarg[1]); | |
| 1991/0516 | ||
| 1991/1024 | /* If we have no local port assign one */ | |
| 1992/0416 | if(cp->psrc == 0){ qlock(&ipalloc); | |
| 1992/0128 | cp->psrc = nextport(ipconv[c->dev], priv); | |
| 1991/1024 |
| |
| 1992/0416 | qunlock(&ipalloc); } | |
| 1991/0424 | ||
| 1991/1114 | if(cp->stproto == &tcpinfo) tcpstart(cp, TCP_ACTIVE, Streamhi, 0); | |
| 1992/0414/sys/src/9/port/devip.c:289,301 – 1992/0416/sys/src/9/port/devip.c:290,309 | ||
| 1991/1024 | port = atoi(field[1]); | |
| 1992/0416 | if(port){ qlock(&ipalloc); if(portused(ipconv[c->dev], port)) { qunlock(&ipalloc); error(Einuse); } cp->psrc = port; qunlock(&ipalloc); } else if(*field[1] != '*'){ qlock(&ipalloc); cp->psrc = nextport(ipconv[c->dev], 0); qunlock(&ipalloc); } else cp->psrc = 0; | |
| 1991/1114 | if(cp->stproto == &tcpinfo) tcpstart(cp, TCP_PASSIVE, Streamhi, 0); | |
| 1992/0414/sys/src/9/port/devip.c:557,562 – 1992/0416/sys/src/9/port/devip.c:565,572 | ||
| 1991/0424 | tcpstopen(Queue *q, Stream *s) { Ipconv *ipc; | |
| 1992/0416 | Tcpctl *tcb; Block *bp; | |
| 1991/1019 | static int tcpkprocs; | |
| 1991/0424 | ||
| 1991/1019 | if(!Ipoutput) { | |
| 1992/0414/sys/src/9/port/devip.c:573,578 – 1992/0416/sys/src/9/port/devip.c:583,590 | ||
| 1991/0430 | ||
| 1991/0424 | } | |
| 1992/0416 | if(tcpbase == 0) tcpbase = ipconv[s->dev]; | |
| 1991/0424 | ipc = &ipconv[s->dev][s->id]; ipc->ipinterface = newipifc(IP_TCPPROTO, tcp_input, ipconv[s->dev], 1500, 512, ETHER_HDR, "TCP"); | |
| 1992/0414/sys/src/9/port/devip.c:584,589 – 1992/0416/sys/src/9/port/devip.c:596,608 | ||
| 1991/0424 | RD(q)->ptr = (void *)ipc; WR(q)->next->ptr = (void *)ipc->ipinterface; WR(q)->ptr = (void *)ipc; | |
| 1992/0416 | /* pass any waiting data upstream */ tcb = &ipc->tcpctl; qlock(tcb); while(bp = getb(&tcb->rcvq)) PUTNEXT(ipc->readq, bp); qunlock(tcb); | |
| 1991/0424 | } | |
| 1991/1114 | void | |
| 1992/0414/sys/src/9/port/devip.c:682,687 – 1992/0416/sys/src/9/port/devip.c:701,707 | ||
| 1991/0424 | tcpstclose(Queue *q) { Ipconv *s; | |
| 1992/0416 | Ipconv *etab, *ifc; | |
| 1991/0424 | Tcpctl *tcb; s = (Ipconv *)(q->ptr); | |
| 1992/0414/sys/src/9/port/devip.c:693,702 – 1992/0416/sys/src/9/port/devip.c:713,744 | ||
| 1992/0223 | qunlock(s); | |
| 1991/0424 | switch(tcb->state){ | |
| 1991/12171 |
| |
| 1992/0416 | /* * reset any incoming calls to this listener */ qlock(s); s->backlog = 0; s->curlog = 0; etab = &tcpbase[conf.ip]; for(ifc = tcpbase; ifc < etab; ifc++){ if(ifc->newcon == s) { ifc->newcon = 0; tcpflushincoming(ifc); } } qunlock(s); qlock(tcb); close_self(s, 0); qunlock(tcb); break; case Closed: | |
| 1991/12171 | case Syn_sent: | |
| 1992/0416 | qlock(tcb); | |
| 1991/0424 | close_self(s, 0); | |
| 1992/0416 | qunlock(tcb); | |
| 1991/0424 | break; | |
| 1992/0313 | ||
| 1991/12171 | case Syn_received: | |