| plan 9 kernel history: overview | file list | diff list |
1991/1126/port/devip.c (diff list | history)
| 1991/1125/sys/src/9/port/devip.c:19,24 – 1991/1126/sys/src/9/port/devip.c:19,25 (short | long | prev | next) | ||
| 1991/1019 | Queue *Ipoutput; /* Control message stream for tcp/il */ | |
| 1991/0424 | Ipifc *ipifc; /* IP protocol interfaces for stip */ Ipconv *ipconv[Nrprotocol]; /* Connections for each protocol */ | |
| 1991/1126 | Network *ipnet[Nrprotocol]; /* User level interface for protocol */ | |
| 1991/0424 | QLock ipalloc; /* Protocol port allocation lock */ /* ARPA User Datagram Protocol */ | |
| 1991/1125/sys/src/9/port/devip.c:44,50 – 1991/1126/sys/src/9/port/devip.c:45,51 | ||
| 1991/1012 | Qinfo *protocols[] = { &tcpinfo, &udpinfo, &ilinfo, 0 }; | |
| 1991/0424 | ||
| 1991/1114 | void | |
| 1991/1126 | ipinitnet(Network *np, Qinfo *stproto, Ipconv *cp) | |
| 1991/1012 | { | |
| 1991/1114 | int j; | |
| 1991/0424 | ||
| 1991/1125/sys/src/9/port/devip.c:51,73 – 1991/1126/sys/src/9/port/devip.c:52,74 | ||
| 1991/1115 | for(j = 0; j < conf.ip; j++, cp++){ cp->index = j; | |
| 1991/1114 | cp->stproto = stproto; | |
| 1991/1115 |
| |
| 1991/1126 | cp->net = np; | |
| 1991/1115 | } | |
| 1991/1114 |
| |
| 1991/1126 | np->name = stproto->name; np->nconv = conf.ip; np->devp = &ipinfo; np->protop = stproto; | |
| 1991/1114 | if(stproto != &udpinfo) | |
| 1991/1115 |
| |
| 1991/1114 |
| |
| 1991/1126 | np->listen = iplisten; np->clone = ipclonecon; np->prot = (Netprot *)ialloc(sizeof(Netprot) * conf.ip, 0); np->ninfo = 3; np->info[0].name = "remote"; np->info[0].fill = ipremotefill; np->info[1].name = "local"; np->info[1].fill = iplocalfill; np->info[2].name = "status"; np->info[2].fill = ipstatusfill; | |
| 1991/1114 | } | |
| 1991/0424 | void | |
| 1991/1125/sys/src/9/port/devip.c:79,85 – 1991/1126/sys/src/9/port/devip.c:80,87 | ||
| 1991/0424 | ||
| 1991/1012 | for(i = 0; protocols[i]; i++) { | |
| 1991/0424 | ipconv[i] = (Ipconv *)ialloc(sizeof(Ipconv) * conf.ip, 0); | |
| 1991/1114 |
| |
| 1991/1126 | ipnet[i] = (Network *)ialloc(sizeof(Network), 0); ipinitnet(ipnet[i], protocols[i], ipconv[i]); | |
| 1991/0424 | newqinfo(protocols[i]); } | |
| 1991/1125/sys/src/9/port/devip.c:119,137 – 1991/1126/sys/src/9/port/devip.c:121,139 | ||
| 1991/0424 | int ipwalk(Chan *c, char *name) { | |
| 1991/1114 |
| |
| 1991/1126 | return netwalk(c, name, ipnet[c->dev]); | |
| 1991/0424 | } void ipstat(Chan *c, char *db) { | |
| 1991/1114 |
| |
| 1991/1126 | netstat(c, db, ipnet[c->dev]); | |
| 1991/0424 | } Chan * ipopen(Chan *c, int omode) { | |
| 1991/1114 |
| |
| 1991/1126 | return netopen(c, omode, ipnet[c->dev]); | |
| 1991/0424 | } | |
| 1991/1114 | int | |
| 1991/1125/sys/src/9/port/devip.c:150,156 – 1991/1126/sys/src/9/port/devip.c:152,157 | ||
| 1991/1115 | ipincoming(Ipconv *base, Ipconv *from) | |
| 1991/1023 | { | |
| 1991/1024 | Ipconv *new, *etab; | |
| 1991/1115 |
| |
| 1991/1023 | etab = &base[conf.ip]; for(new = base; new < etab; new++) { | |
| 1991/1125/sys/src/9/port/devip.c:161,173 – 1991/1126/sys/src/9/port/devip.c:162,173 | ||
| 1991/0424 | qunlock(new); continue; } | |
| 1991/1115 |
| |
| 1991/1126 | netown(new->net, new->index, new->net->prot[from->index].owner, 0); | |
| 1991/1115 | else /* current user becomes owner */ | |
| 1991/1126 | netown(new->net, new->index, u->p->user, 0); | |
| 1991/1114 | new->ref = 1; | |
| 1991/0424 | qunlock(new); return new; | |
| 1991/1125/sys/src/9/port/devip.c:193,199 – 1991/1126/sys/src/9/port/devip.c:193,199 | ||
| 1991/0424 | void ipwstat(Chan *c, char *dp) { | |
| 1991/1115 |
| |
| 1991/1126 | netwstat(c, dp, ipnet[c->dev]); | |
| 1991/0424 | } void | |
| 1991/1125/sys/src/9/port/devip.c:206,212 – 1991/1126/sys/src/9/port/devip.c:206,212 | ||
| 1991/0424 | long ipread(Chan *c, void *a, long n, ulong offset) { | |
| 1991/1114 |
| |
| 1991/1126 | return netread(c, a, n, offset, ipnet[c->dev]); | |
| 1991/0424 | } long | |
| 1991/1125/sys/src/9/port/devip.c:454,460 – 1991/1126/sys/src/9/port/devip.c:454,459 | ||
| 1991/1114 | ipc->dst = 0; | |
| 1991/0424 | closeipifc(ipc->ipinterface); | |
| 1991/1115 |
| |
| 1991/0424 | } void | |
| 1991/1125/sys/src/9/port/devip.c:484,492 – 1991/1126/sys/src/9/port/devip.c:483,491 | ||
| 1991/0424 | Ipconv *s; Tcpctl *tcb; | |
| 1991/1104 | int len, errnum; | |
| 1991/1126 | Block *f; | |
| 1991/0424 | s = (Ipconv *)(q->ptr); | |
| 1991/1104 | if(bp->type == M_CTL) { | |
| 1991/1125/sys/src/9/port/devip.c:512,519 – 1991/1126/sys/src/9/port/devip.c:511,524 | ||
| 1991/0424 | case ESTABLISHED: case CLOSE_WAIT: qlock(tcb); | |
| 1991/1104 |
| |
| 1991/1126 | tcb->sndcnt += blen(bp); if(tcb->sndq == 0) tcb->sndq = bp; else { for(f = tcb->sndq; f->next; f = f->next) ; f->next = bp; } | |
| 1991/0424 | tcprcvwin(s); tcp_output(s); qunlock(tcb); | |
| 1991/1125/sys/src/9/port/devip.c:675,681 – 1991/1126/sys/src/9/port/devip.c:680,685 | ||
| 1991/0424 | qunlock(tcb); break; } | |
| 1991/1115 |
| |
| 1991/0424 | } | |