* OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
* OR MODIFICATIONS.
*
- * $Id: ppp.c,v 1.10 1997/04/30 05:44:43 paulus Exp $
+ * $Id: ppp.c,v 1.15 1998/05/04 06:11:35 paulus Exp $
*/
/*
qprocsoff(q);
up = (upperstr_t *) q->q_ptr;
+ if (up == 0) {
+ DPRINT("pppclose: q_ptr = 0\n");
+ return 0;
+ }
if (up->flags & US_DBGLOG)
DPRINT2("ppp/%d: close, flags=%x\n", up->mn, up->flags);
- if (up == 0)
- return 0;
if (up->flags & US_CONTROL) {
#ifdef LACHTCP
struct ifstats *ifp, *pifp;
#endif /* PRIOQ */
us = (upperstr_t *) q->q_ptr;
+ if (us == 0) {
+ DPRINT("pppuwput: q_ptr = 0!\n");
+ return 0;
+ }
+ if (mp == 0) {
+ DPRINT1("pppuwput/%d: mp = 0!\n", us->mn);
+ return 0;
+ }
+ if (mp->b_datap == 0) {
+ DPRINT1("pppuwput/%d: mp->b_datap = 0!\n", us->mn);
+ return 0;
+ }
switch (mp->b_datap->db_type) {
#ifndef NO_DLPI
case M_PCPROTO:
case I_LINK:
if ((us->flags & US_CONTROL) == 0 || us->lowerq != 0)
break;
+ if (mp->b_cont == 0) {
+ DPRINT1("pppuwput/%d: ioctl I_LINK b_cont = 0!\n", us->mn);
+ break;
+ }
lb = (struct linkblk *) mp->b_cont->b_rptr;
us->lowerq = lq = lb->l_qbot;
+ if (lq == 0) {
+ DPRINT1("pppuwput/%d: ioctl I_LINK l_qbot = 0!\n", us->mn);
+ break;
+ }
lq->q_ptr = (caddr_t) us;
RD(lq)->q_ptr = (caddr_t) us;
noenable(RD(lq));
break;
case I_UNLINK:
+ if (mp->b_cont == 0) {
+ DPRINT1("pppuwput/%d: ioctl I_UNLINK b_cont = 0!\n", us->mn);
+ break;
+ }
lb = (struct linkblk *) mp->b_cont->b_rptr;
#if DEBUG
- if (us->lowerq != lb->l_qbot)
+ if (us->lowerq != lb->l_qbot) {
DPRINT2("ppp unlink: lowerq=%x qbot=%x\n",
us->lowerq, lb->l_qbot);
+ break;
+ }
#endif
us->lowerq = 0;
iop->ioc_count = 0;
the stream (like pppstats) */
if (iop->ioc_count != sizeof(int) || us->ppa != 0)
break;
+ if (mp->b_cont == 0) {
+ DPRINT1("pppuwput/%d: ioctl PPPIO_ATTACH b_cont = 0!\n", us->mn);
+ break;
+ }
n = *(int *)mp->b_cont->b_rptr;
for (ppa = ppas; ppa != 0; ppa = ppa->nextppa)
if (ppa->ppa_id == n)
/* Attach to a given SAP. */
if (iop->ioc_count != sizeof(int) || us->ppa == 0)
break;
+ if (mp->b_cont == 0) {
+ DPRINT1("pppuwput/%d: ioctl PPPIO_BIND b_cont = 0!\n", us->mn);
+ break;
+ }
n = *(int *)mp->b_cont->b_rptr;
/* n must be a valid PPP network protocol number. */
if (n < 0x21 || n > 0x3fff || (n & 0x101) != 1)
case PPPIO_MRU:
if (iop->ioc_count != sizeof(int) || (us->flags & US_CONTROL) == 0)
break;
+ if (mp->b_cont == 0) {
+ DPRINT1("pppuwput/%d: ioctl PPPIO_MRU b_cont = 0!\n", us->mn);
+ break;
+ }
n = *(int *)mp->b_cont->b_rptr;
if (n <= 0 || n > PPP_MAXMRU)
break;
case PPPIO_MTU:
if (iop->ioc_count != sizeof(int) || (us->flags & US_CONTROL) == 0)
break;
+ if (mp->b_cont == 0) {
+ DPRINT1("pppuwput/%d: ioctl PPPIO_MTU b_cont = 0!\n", us->mn);
+ break;
+ }
n = *(int *)mp->b_cont->b_rptr;
if (n <= 0 || n > PPP_MAXMTU)
break;
case PPPIO_DEBUG:
if (iop->ioc_count != sizeof(int))
break;
+ if (mp->b_cont == 0) {
+ DPRINT1("pppuwput/%d: ioctl PPPIO_DEBUG b_cont = 0!\n", us->mn);
+ break;
+ }
n = *(int *)mp->b_cont->b_rptr;
if (n == PPPDBG_DUMP + PPPDBG_DRIVER) {
qwriter(q, NULL, debug_dump, PERIM_OUTER);
break;
if ((us->flags & US_CONTROL) == 0)
break;
+ if (mp->b_cont == 0) {
+ DPRINT1("pppuwput/%d: ioctl PPPIO_NPMODE b_cont = 0!\n", us->mn);
+ break;
+ }
sap = ((int *)mp->b_cont->b_rptr)[0];
for (nps = us->next; nps != 0; nps = nps->next)
if (nps->sap == sap)
reply->b_wptr += sizeof(dl_info_ack_t);
bzero((caddr_t) info, sizeof(dl_info_ack_t));
info->dl_primitive = DL_INFO_ACK;
- info->dl_max_sdu = us->ppa->mtu;
+ info->dl_max_sdu = us->ppa? us->ppa->mtu: PPP_MAXMTU;
info->dl_min_sdu = 1;
- info->dl_addr_length = sizeof(ulong);
+ info->dl_addr_length = sizeof(uint);
#ifdef DL_OTHER
info->dl_mac_type = DL_OTHER;
#else
info->dl_service_mode = DL_CLDLS;
info->dl_provider_style = DL_STYLE2;
#if DL_CURRENT_VERSION >= 2
- info->dl_sap_length = sizeof(ulong);
+ info->dl_sap_length = sizeof(uint);
info->dl_version = DL_CURRENT_VERSION;
#endif
qreply(q, reply);
us->sap = sap;
us->state = DL_IDLE;
- if ((reply = allocb(sizeof(dl_bind_ack_t) + sizeof(ulong),
+ if ((reply = allocb(sizeof(dl_bind_ack_t) + sizeof(uint),
BPRI_HI)) == 0)
break; /* should do bufcall */
ackp = (dl_bind_ack_t *) reply->b_wptr;
- reply->b_wptr += sizeof(dl_bind_ack_t) + sizeof(ulong);
+ reply->b_wptr += sizeof(dl_bind_ack_t) + sizeof(uint);
reply->b_datap->db_type = M_PCPROTO;
bzero((caddr_t) ackp, sizeof(dl_bind_ack_t));
ackp->dl_primitive = DL_BIND_ACK;
ackp->dl_sap = sap;
- ackp->dl_addr_length = sizeof(ulong);
+ ackp->dl_addr_length = sizeof(uint);
ackp->dl_addr_offset = sizeof(dl_bind_ack_t);
- *(ulong *)(ackp+1) = sap;
+ *(uint *)(ackp+1) = sap;
qreply(q, reply);
break;
int pass;
upperstr_t *ppa;
- if (us->ppa == 0) {
+ if ((ppa = us->ppa) == 0) {
freemsg(mp);
return 0;
}
if (pass < 0) {
/* pass only if link already up, and don't update time */
- if (us->ppa->lowerq == 0) {
+ if (ppa->lowerq == 0) {
freemsg(mp);
return 0;
}
#ifndef NO_DLPI
proto = PPP_PROTOCOL(mp->b_rptr);
mp->b_rptr += PPP_HDRLEN;
- hdr = allocb(sizeof(dl_unitdata_ind_t) + 2 * sizeof(ulong),
+ hdr = allocb(sizeof(dl_unitdata_ind_t) + 2 * sizeof(uint),
BPRI_MED);
if (hdr == 0) {
/* XXX should put it back and use bufcall */
}
hdr->b_datap->db_type = M_PROTO;
ud = (dl_unitdata_ind_t *) hdr->b_wptr;
- hdr->b_wptr += sizeof(dl_unitdata_ind_t) + 2 * sizeof(ulong);
+ hdr->b_wptr += sizeof(dl_unitdata_ind_t) + 2 * sizeof(uint);
hdr->b_cont = mp;
ud->dl_primitive = DL_UNITDATA_IND;
- ud->dl_dest_addr_length = sizeof(ulong);
+ ud->dl_dest_addr_length = sizeof(uint);
ud->dl_dest_addr_offset = sizeof(dl_unitdata_ind_t);
- ud->dl_src_addr_length = sizeof(ulong);
- ud->dl_src_addr_offset = ud->dl_dest_addr_offset + sizeof(ulong);
+ ud->dl_src_addr_length = sizeof(uint);
+ ud->dl_src_addr_offset = ud->dl_dest_addr_offset + sizeof(uint);
#if DL_CURRENT_VERSION >= 2
ud->dl_group_address = 0;
#endif
/* Send the DLPI client the data with the SAP they requested,
(e.g. ETHERTYPE_IP) rather than the PPP protocol number
(e.g. PPP_IP) */
- ((ulong *)(ud + 1))[0] = us->req_sap; /* dest SAP */
- ((ulong *)(ud + 1))[1] = us->req_sap; /* src SAP */
+ ((uint *)(ud + 1))[0] = us->req_sap; /* dest SAP */
+ ((uint *)(ud + 1))[1] = us->req_sap; /* src SAP */
putnext(q, hdr);
#else /* NO_DLPI */
putnext(q, mp);
switch (proto)
{
case PPP_IP:
- if ((mp->b_wptr - mp->b_rptr) == PPP_HDRLEN) {
+ if ((mp->b_wptr - mp->b_rptr) == PPP_HDRLEN && mp->b_cont != 0) {
temp_mp = mp->b_cont;
len = msgdsize(temp_mp);
hlen = (len < MAX_IPHDR) ? len : MAX_IPHDR;