X-Git-Url: https://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=modules%2Fppp.c;h=571d95bd3358daf138e97fc24b7586d8e3464ba3;hp=0000cb147ac319d7500dd48da87543742ceafd7e;hb=6589bd3bbe86761cc41767a1400a69bbc985788a;hpb=92c20f261b9618715d6b1579e997e8757a88174e diff --git a/modules/ppp.c b/modules/ppp.c index 0000cb1..571d95b 100644 --- a/modules/ppp.c +++ b/modules/ppp.c @@ -24,7 +24,7 @@ * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, * OR MODIFICATIONS. * - * $Id: ppp.c,v 1.3 1996/01/01 22:48:39 paulus Exp $ + * $Id: ppp.c,v 1.5 1996/05/28 00:56:18 paulus Exp $ */ /* @@ -415,6 +415,7 @@ pppuwput(q, mp) int error, n, sap; mblk_t *mq; struct ppp_idle *pip; + int len; us = (upperstr_t *) q->q_ptr; switch (mp->b_datap->db_type) { @@ -439,8 +440,10 @@ pppuwput(q, mp) break; } #ifdef NO_DLPI - if ((us->flags & US_CONTROL) == 0) - us->ppa->last_sent = time; + if (!pass_packet(us->ppa, mp, 1)) { + freemsg(mp); + break; + } #endif if (!send_data(mp, us)) putq(q, mp); @@ -620,8 +623,11 @@ pppuwput(q, mp) for (nps = us->next; nps != 0; nps = nps->next) if (nps->sap == sap) break; - if (nps == 0) + if (nps == 0) { + if (us->flags & US_DBGLOG) + DPRINT2("ppp/%d: no stream for sap %x\n", us->mn, sap); break; + } nps->npmode = (enum NPmode) ((int *)mp->b_cont->b_rptr)[1]; if (nps->npmode == NPMODE_DROP || nps->npmode == NPMODE_ERROR) flushq(WR(nps->q), FLUSHDATA); @@ -819,7 +825,7 @@ dlpi_request(q, mp, us) dl_bind_ack_t *ackp; if (us->flags & US_DBGLOG) - cmn_err(CE_CONT, "ppp/%d: dlpi prim %x len=%d\n", us->mn, + DPRINT3("ppp/%d: dlpi prim %x len=%d\n", us->mn, d->dl_primitive, size); switch (d->dl_primitive) { case DL_INFO_REQ: @@ -960,7 +966,6 @@ dlpi_request(q, mp, us) DPRINT2("dlpi data too large (%d > %d)\n", len, ppa->mtu); break; } - ppa->last_sent = time; /* this assumes PPP_HDRLEN <= sizeof(dl_unitdata_req_t) */ if (mp->b_datap->db_ref > 1) { np = allocb(PPP_HDRLEN, BPRI_HI); @@ -979,8 +984,12 @@ dlpi_request(q, mp, us) mp->b_rptr[1] = PPP_UI; mp->b_rptr[2] = us->sap >> 8; mp->b_rptr[3] = us->sap; - if (!send_data(mp, us)) - putq(q, mp); + if (!pass_packet(ppa, mp, 1)) { + freemsg(mp); + } else { + if (!send_data(mp, us)) + putq(q, mp); + } return; #if DL_CURRENT_VERSION >= 2 @@ -1071,6 +1080,23 @@ dlpi_ok(q, prim) } #endif /* NO_DLPI */ +static int +pass_packet(ppa, mp, outbound) + upperstr_t *ppa; + mblk_t *mp; + int outbound; +{ + /* + * Here is where we might, in future, decide whether to pass + * or drop the packet, and whether it counts as link activity. + */ + if (outbound) + ppa->last_sent = time; + else + ppa->last_recv = time; + return 1; +} + static int send_data(mp, us) mblk_t *mp; @@ -1079,10 +1105,12 @@ send_data(mp, us) queue_t *q; upperstr_t *ppa; - if (us->flags & US_BLOCKED || us->npmode == NPMODE_QUEUE) + if ((us->flags & US_BLOCKED) || us->npmode == NPMODE_QUEUE) return 0; ppa = us->ppa; if (ppa == 0 || us->npmode == NPMODE_DROP || us->npmode == NPMODE_ERROR) { + if (us->flags & US_DBGLOG) + DPRINT2("ppp/%d: dropping pkt (npmode=%d)\n", us->mn, us->npmode); freemsg(mp); return 1; } @@ -1444,6 +1472,10 @@ ppplrput(q, mp) #ifdef INCR_IPACKETS INCR_IPACKETS(ppa); #endif + if (!pass_packet(ppa, mp, 0)) { + freemsg(mp); + break; + } proto = PPP_PROTOCOL(mp->b_rptr); if (proto < 0x8000 && (us = find_dest(ppa, proto)) != 0) { /* @@ -1454,7 +1486,6 @@ ppplrput(q, mp) putq(us->q, mp); else putq(q, mp); - ppa->last_recv = time; break; } }