* OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
* OR MODIFICATIONS.
*
- * $Id: ppp_ahdlc.c,v 1.5 1997/03/04 03:31:51 paulus Exp $
+ * $Id: ppp_ahdlc.c,v 1.10 1999/04/12 06:20:21 paulus Exp $
*/
/*
#include <sys/ddi.h>
#else
#include <sys/user.h>
+#ifdef __osf__
+#include <sys/cmn_err.h>
+#endif
#endif /* SVR4 */
#include <net/ppp_defs.h>
WR(q)->q_ptr = (caddr_t) sp;
sp->xaccm[0] = ~0;
sp->xaccm[3] = 0x60000000;
- sp->mru = 1500;
+ sp->mru = PPP_MRU;
++ppp_ahdlc_count;
qprocson(q);
}
state->cur_frame = 0;
}
FREE(q->q_ptr, sizeof(ahdlc_state_t));
+ q->q_ptr = NULL;
+ OTHERQ(q)->q_ptr = NULL;
--ppp_ahdlc_count;
}
return 0;
struct ppp_stats *psp;
state = (ahdlc_state_t *) q->q_ptr;
+ if (state == 0) {
+ DPRINT("state == 0 in ahdlc_wput\n");
+ freemsg(mp);
+ return 0;
+ }
+
switch (mp->b_datap->db_type) {
case M_DATA:
/*
if (iop->ioc_count < sizeof(u_int32_t)
|| iop->ioc_count > sizeof(ext_accm))
break;
+ if (mp->b_cont == 0) {
+ DPRINT1("ahdlc_wput/%d: PPPIO_XACCM b_cont = 0!\n", state->unit);
+ break;
+ }
bcopy((caddr_t)mp->b_cont->b_rptr, (caddr_t)state->xaccm,
iop->ioc_count);
state->xaccm[2] &= ~0x40000000; /* don't escape 0x5e */
case PPPIO_RACCM:
if (iop->ioc_count != sizeof(u_int32_t))
break;
+ if (mp->b_cont == 0) {
+ DPRINT1("ahdlc_wput/%d: PPPIO_RACCM b_cont = 0!\n", state->unit);
+ break;
+ }
bcopy((caddr_t)mp->b_cont->b_rptr, (caddr_t)&state->raccm,
sizeof(u_int32_t));
iop->ioc_count = 0;
default:
putnext(q, mp);
}
+
return 0;
}
uchar_t *cp;
ahdlc_state_t *state;
+ state = (ahdlc_state_t *) q->q_ptr;
+ if (state == 0) {
+ DPRINT("state == 0 in ahdlc_rput\n");
+ freemsg(mp);
+ return 0;
+ }
+
switch (mp->b_datap->db_type) {
case M_DATA:
unstuff_chars(q, mp);
break;
case M_HANGUP:
- state = (ahdlc_state_t *) q->q_ptr;
if (state->cur_frame != 0) {
/* XXX would like to send this up for debugging */
freemsg(state->cur_frame);
goto bomb;
/*
- * Put in an initial flag for now. We'll remove it later
- * if we decide we don't need it.
+ * Put in an initial flag, unless the serial driver currently has
+ * packets still to be transmitted in its queue.
*/
dp = op->b_wptr;
- *dp++ = PPP_FLAG;
- --olen;
+ if (qsize(q->q_next) == 0) {
+ *dp++ = PPP_FLAG;
+ --olen;
+ }
/*
* For LCP packets with code values between 1 and 7 (Conf-Req
*dp++ = PPP_FLAG;
op->b_wptr = dp;
- /*
- * Remove the initial flag, if possible.
- */
- if (qsize(q->q_next) > 0)
- ++omsg->b_rptr;
-
/*
* Update statistics.
*/