| plan 9 kernel history: overview | file list | diff list |
1991/0118/port/devnonet.c (diff list | history)
| 1991/01151/sys/src/9/port/devnonet.c:86,91 – 1991/0118/sys/src/9/port/devnonet.c:86,92 (short | long | prev | next) | ||
| 1990/1210 | Cconnecting, Chungup, Cclosing, | |
| 1991/0118 | Csuperceded, | |
| 1990/1210 | }; /* | |
| 1991/01151/sys/src/9/port/devnonet.c:470,476 – 1991/0118/sys/src/9/port/devnonet.c:471,477 | ||
| 1990/1210 | * send hangup messages to the other side * until it hangs up or we get tired. */ | |
| 1991/0118 | if(cp->state>=Cconnected && cp->state!=Csuperceded){ | |
| 1990/1210 | sendctlmsg(cp, NO_HANGUP, 1); for(i=0; i<10 && !ishungup(cp); i++){ sendctlmsg(cp, NO_HANGUP, 1); | |
| 1991/01151/sys/src/9/port/devnonet.c:961,966 – 1991/0118/sys/src/9/port/devnonet.c:962,971 | ||
| 1990/1210 | } cp->hdr->mid = mp->mid; | |
| 1991/0118 | /* * package n blocks into m packets. make sure * no packet is < mintu or > maxtu in length. */ | |
| 1990/1210 | if(ifc->mintu > mp->len) { /* * short message: | |
| 1991/01151/sys/src/9/port/devnonet.c:971,977 – 1991/0118/sys/src/9/port/devnonet.c:976,985 | ||
| 1990/1210 | memcpy(pkt->wptr, bp->rptr, n = BLEN(bp)); pkt->wptr += n; } | |
| 1991/0118 | /* * round up to mintu */ memset(pkt->wptr, 0, n = ifc->mintu-mp->len); | |
| 1990/1210 | pkt->wptr += n; } else { /* | |
| 1991/01151/sys/src/9/port/devnonet.c:986,991 – 1991/0118/sys/src/9/port/devnonet.c:994,1000 | ||
| 1990/1210 | if(bp) rptr = bp->rptr; last = pkt = mkhdr(cp, msgrem); | |
| 1991/0118 | n = 0; | |
| 1990/1210 | while(bp){ /* * if pkt full, send and create new header block | |
| 1991/01151/sys/src/9/port/devnonet.c:1011,1021 – 1991/0118/sys/src/9/port/devnonet.c:1020,1043 | ||
| 1990/1210 | rptr = bp->rptr; } } | |
| 1991/0118 | /* * round up last packet to mintu */ if(n < ifc->mintu){ n = ifc->mintu - n; last = last->next = allocb(n); memset(last->wptr, 0, n); last->wptr += n; } | |
| 1990/1210 | } nonetcksum(pkt, ifc->hsize); last->flags |= S_DELIM; | |
| 1991/0118 | if(cp->rexmit > 10) mp->time = NOW + 10*MSrexmit; else mp->time = NOW + (cp->rexmit+1)*MSrexmit; DPRINT("xmit %d %lud %lud\n", cp->rexmit, NOW, mp->time); | |
| 1990/1210 | (*wq->put)(wq, pkt); | |
| 1991/01151/sys/src/9/port/devnonet.c:1067,1076 – 1991/0118/sys/src/9/port/devnonet.c:1089,1102 | ||
| 1990/1210 | /* * if a new call request comes in on a connected channel, hang up the call */ | |
| 1991/0118 | if(h->mid==0 && (f & NO_NEWCALL) && (cp->state==Cconnected || cp->state==Csuperceded)){ | |
| 1990/1229 | DPRINT("new call on connected channel\n"); | |
| 1990/1210 | freeb(bp); | |
| 1991/0118 | if(cp->state != Csuperceded){ cp->state = Csuperceded; hangup(cp); } | |
| 1990/1210 | return; } | |
| 1991/01151/sys/src/9/port/devnonet.c:1269,1274 – 1991/0118/sys/src/9/port/devnonet.c:1295,1301 | ||
| 1991/0108 | { Noifc *ifc; Noconv *cp, *ep; | |
| 1991/0118 | Nomsg *mp; | |
| 1991/0108 | cp = 0; ifc = 0; | |
| 1991/01151/sys/src/9/port/devnonet.c:1302,1313 – 1991/0118/sys/src/9/port/devnonet.c:1329,1342 | ||
| 1991/01151 | /* * resend the first message */ | |
| 1991/0118 | if(cp->first!=cp->next && NOW>=cp->out[cp->first].time){ if(cp->rexmit++ > 60){ | |
| 1991/01151 | print("hanging up\n"); hangup(cp); | |
| 1991/0118 | } else { mp = &(cp->out[cp->first]); sendmsg(cp, mp); } | |
| 1991/01151 | } /* | |