| plan 9 kernel history: overview | file list | diff list |
1991/0112/port/devnonet.c (diff list | history)
| 1991/0112/sys/src/9/port/devnonet.c:517,523 – 1991/01151/sys/src/9/port/devnonet.c:517,523 (short | long | prev | next) | ||
| 1990/1210 | Nomsg *mp; mp = (Nomsg *)a; | |
| 1991/01151 | return mp->inuse; | |
| 1990/1210 | } static void nonetoput(Queue *q, Block *bp) | |
| 1991/0112/sys/src/9/port/devnonet.c:549,559 – 1991/01151/sys/src/9/port/devnonet.c:549,564 | ||
| 1990/1210 | mp = 0; if(waserror()){ if(mp){ | |
| 1991/01151 | q->len = 0; q->first = q->last = 0; | |
| 1990/1210 | if(mp->first){ freeb(mp->first); mp->first = 0; } mp->inuse = 0; | |
| 1991/01151 | mp->acked = 0; if(((cp->first+1)%Nnomsg) == cp->next) cp->first = cp->next; | |
| 1991/0109 | } qunlock(&cp->mlock); nexterror(); | |
| 1991/0112/sys/src/9/port/devnonet.c:584,610 – 1991/01151/sys/src/9/port/devnonet.c:589,601 | ||
| 1990/1210 | q->len = 0; q->first = q->last = 0; cp->sent++; | |
| 1991/01151 | * send the message, the kproc will retry | |
| 1990/1210 | */ | |
| 1991/0108 |
| |
| 1990/1210 |
| |
| 1991/0108 |
| |
| 1991/0109 |
| |
| 1990/1210 |
| |
| 1991/01151 | sendmsg(cp, mp); qunlock(&cp->mlock); | |
| 1991/0109 | poperror(); | |
| 1990/1210 |
| |
| 1991/0112/sys/src/9/port/devnonet.c:871,881 – 1991/01151/sys/src/9/port/devnonet.c:862,886 | ||
| 1990/1210 | return; /* | |
| 1991/01151 | * free it | |
| 1990/1210 | */ | |
| 1991/01151 | cp->rexmit = 0; | |
| 1990/1210 | mp->acked = 1; | |
| 1991/01151 | freeb(mp->first); mp->first = 0; mp->inuse = 0; /* * advance first if this is the first */ if((mid&Nmask) == cp->first){ while(cp->first != cp->next){ if(cp->out[cp->first].acked == 0) break; cp->first = (cp->first+1) % Nnomsg; } } | |
| 1990/1210 | } /* | |
| 1991/0112/sys/src/9/port/devnonet.c:1094,1103 – 1991/01151/sys/src/9/port/devnonet.c:1099,1108 | ||
| 1990/1210 | * start of message packet */ if(mp->first){ | |
| 1991/01151 | DPRINT("mp->mid==%d mp->rem==%d r==%d\n", mp->mid, mp->rem, r); freeb(mp->first); mp->first = mp->last = 0; mp->len = 0; | |
| 1990/1210 | } mp->rem = r; } else { | |
| 1991/0112/sys/src/9/port/devnonet.c:1105,1111 – 1991/01151/sys/src/9/port/devnonet.c:1110,1116 | ||
| 1990/1210 | * a continuation */ if(-r != mp->rem) { | |
| 1991/01151 | DPRINT("mp->mid==%d mp->rem==%d r==%d\n", mp->mid, mp->rem, r); | |
| 1990/1210 | cp->bad++; freeb(bp); return; | |
| 1991/0112/sys/src/9/port/devnonet.c:1275,1287 – 1991/01151/sys/src/9/port/devnonet.c:1280,1318 | ||
| 1991/0108 | } loop: | |
| 1991/01151 | /* * loop through all active interfaces */ | |
| 1991/0108 | for(ifc = noifc; ifc < &noifc[conf.nnoifc]; ifc++){ if(ifc->wq==0 || !canlock(ifc)) continue; | |
| 1991/01151 | /* * loop through all active conversations */ | |
| 1991/0108 | ep = ifc->conv + conf.nnoconv; for(cp = ifc->conv; cp < ep; cp++){ if(cp->state==Cclosed || !canqlock(cp)) continue; | |
| 1991/01151 | if(cp->state == Cclosed){ qunlock(cp); continue; } /* * resend the first message */ if(cp->first!=cp->next && cp->out[cp->first].time>=NOW){ if(cp->rexmit++ > 100){ print("hanging up\n"); hangup(cp); } else sendmsg(cp, &(cp->out[cp->first])); } /* * resend an acknowledge */ | |
| 1991/0108 | if(cp->afirst != cp->anext){ DPRINT("sending ack %d\n", cp->ack[cp->afirst]); sendctlmsg(cp, 0, 0); | |
| 1991/0112/sys/src/9/port/devnonet.c:1294,1300 – 1991/01151/sys/src/9/port/devnonet.c:1325,1332 | ||
| 1991/0108 | goto loop; } | |
| 1990/1229 |
| |
| 1991/01151 | void nonettoggle(void) | |
| 1990/1229 | { pnonet ^= 1; | |
| 1990/1210 | } | |