| plan 9 kernel history: overview | file list | diff list |
1991/12171/port/devip.c (diff list | history)
| 1991/1126/sys/src/9/port/devip.c:16,26 – 1991/12171/sys/src/9/port/devip.c:16,26 (short | long | prev | next) | ||
| 1991/0424 | }; | |
| 1991/1030 | int udpsum = 1; | |
| 1991/1019 |
| |
| 1991/0424 |
| |
| 1991/1126 |
| |
| 1991/0424 |
| |
| 1991/12171 | Queue *Ipoutput; /* Control message stream for tcp/il */ Ipifc *ipifc; /* IP protocol interfaces for stip */ Ipconv *ipconv[Nrprotocol]; /* Connections for each protocol */ Network *ipnet[Nrprotocol]; /* User level interface for protocol */ QLock ipalloc; /* Protocol port allocation lock */ | |
| 1991/0424 | /* ARPA User Datagram Protocol */ void udpstiput(Queue *, Block *); | |
| 1991/1126/sys/src/9/port/devip.c:157,163 – 1991/12171/sys/src/9/port/devip.c:157,163 | ||
| 1991/1023 | for(new = base; new < etab; new++) { | |
| 1991/0424 | if(new->ref == 0 && canqlock(new)) { if(new->ref || | |
| 1991/1015 |
| |
| 1991/12171 | (new->stproto == &tcpinfo && new->tcpctl.state != Closed) || | |
| 1991/1015 | (new->stproto == &ilinfo && new->ilctl.state != Ilclosed)) { | |
| 1991/0424 | qunlock(new); continue; | |
| 1991/1126/sys/src/9/port/devip.c:237,243 – 1991/12171/sys/src/9/port/devip.c:237,243 | ||
| 1991/1024 | errors("bad ip control"); | |
| 1991/0424 | ||
| 1991/1024 | if(strcmp(field[0], "connect") == 0) { | |
| 1991/12171 | if((cp->stproto == &tcpinfo && cp->tcpctl.state != Closed) || | |
| 1991/1024 | (cp->stproto == &ilinfo && cp->ilctl.state != Ilclosed)) error(Edevbusy); | |
| 1991/0424 | ||
| 1991/1126/sys/src/9/port/devip.c:279,285 – 1991/12171/sys/src/9/port/devip.c:279,285 | ||
| 1991/1125 | cp->pdst = 0; } | |
| 1991/1104 | else if(strcmp(field[0], "announce") == 0) { | |
| 1991/1024 |
| |
| 1991/12171 | if((cp->stproto == &tcpinfo && cp->tcpctl.state != Closed) || | |
| 1991/1024 | (cp->stproto == &ilinfo && cp->ilctl.state != Ilclosed)) error(Edevbusy); | |
| 1991/0424 | ||
| 1991/1126/sys/src/9/port/devip.c:501,515 – 1991/12171/sys/src/9/port/devip.c:501,515 | ||
| 1991/0424 | error(s->err); switch(tcb->state) { | |
| 1991/12171 | case Listen: | |
| 1991/0424 | tcb->flags |= ACTIVE; send_syn(tcb); | |
| 1991/12171 | setstate(s, Syn_sent); | |
| 1991/0424 | /* No break */ | |
| 1991/12171 | case Syn_sent: case Syn_received: case Established: case Close_wait: | |
| 1991/0424 | qlock(tcb); | |
| 1991/1126 | tcb->sndcnt += blen(bp); if(tcb->sndq == 0) | |
| 1991/1126/sys/src/9/port/devip.c:620,626 – 1991/12171/sys/src/9/port/devip.c:620,626 | ||
| 1991/1114 | s = &ipconv[c->dev][connection]; base = ipconv[c->dev]; | |
| 1991/12171 | if((s->stproto == &tcpinfo && s->tcpctl.state != Listen) || | |
| 1991/1114 | (s->stproto == &ilinfo && s->ilctl.state != Illistening)) errors("not announced"); | |
| 1991/1126/sys/src/9/port/devip.c:659,679 – 1991/12171/sys/src/9/port/devip.c:659,679 | ||
| 1991/0424 | s->readq = 0; switch(tcb->state){ | |
| 1991/12171 | case Closed: case Listen: case Syn_sent: | |
| 1991/0424 | close_self(s, 0); break; | |
| 1991/12171 | case Syn_received: case Established: | |
| 1991/0424 | tcb->sndcnt++; tcb->snd.nxt++; | |
| 1991/12171 | setstate(s, Finwait1); | |
| 1991/0424 | goto output; | |
| 1991/12171 | case Close_wait: | |
| 1991/0424 | tcb->sndcnt++; tcb->snd.nxt++; | |
| 1991/12171 | setstate(s, Last_ack); | |
| 1991/0424 | output: qlock(tcb); tcp_output(s); | |
| 1991/1126/sys/src/9/port/devip.c:785,794 – 1991/12171/sys/src/9/port/devip.c:785,793 | ||
| 1991/0424 | Ipconv *ifc, *etab; etab = &ic[conf.ip]; | |
| 1991/12171 | for(ifc = ic; ifc < etab; ifc++) | |
| 1991/0424 | if(ifc->psrc == port) return ifc; | |
| 1991/1126/sys/src/9/port/devip.c:798,807 – 1991/12171/sys/src/9/port/devip.c:797,806 | ||
| 1991/0424 | { Port i; | |
| 1991/12171 | for(i = base; i < PORTMAX; i++) | |
| 1991/0424 | if(!portused(ic, i)) return(i); | |
| 1991/12171 | ||
| 1991/0424 | return(0); } | |
| 1991/1126/sys/src/9/port/devip.c:815,822 – 1991/12171/sys/src/9/port/devip.c:814,822 | ||
| 1991/0424 | /* Look for a conversation structure for this port */ etab = &ic[conf.ip]; for(s = ic; s < etab; s++) { | |
| 1991/12171 | if(s->psrc == dst) if(s->pdst == src) if(s->dst == dest || dest == 0) | |
| 1991/0424 | return s; } | |