This file contains post-release ERRATA for altq-3.1. Currently 2 problems are listed. 1. FreeBSD: kernel ppp panics when ALTQ is enabled (2002/03/26) 2. FreeBSD and OpenBSD: the vr driver causes panic (2002/04/04) 1. FreeBSD: kernel ppp panics when ALTQ is enabled (2002/03/26) Problem description: FreeBSD doesn;t initialize the if_softc field, and the kernel panics if ALTQ is enabled on kernel ppp. Solution: Appy the following patch to sys-altq/net/if_ppp.c. --- if_ppp.c.orig Tue Mar 26 11:20:28 2002 +++ if_ppp.c Tue Mar 26 11:21:27 2002 @@ -211,6 +211,7 @@ sc->sc_if.if_ioctl = pppsioctl; sc->sc_if.if_output = pppoutput; #ifdef ALTQ + sc->sc_if.if_softc = sc; sc->sc_if.if_start = ppp_ifstart; #endif IFQ_SET_MAXLEN(&sc->sc_if.if_snd, IFQ_MAXLEN); 2. FreeBSD and OpenBSD: the vr driver causes panic (2002/04/04) Problem description: the kernel panics on the vr driver. vr_encap() copies and frees the original mbuf so that the original mbuf isn't valid after vr_encap(). Solution: Appy the following patch to the vr driver. for FreeBSD, use this patch. Index: if_vr.c =================================================================== RCS file: /cvsroot/kame/kame/freebsd4/sys/pci/if_vr.c,v retrieving revision 1.9 diff -u -r1.9 if_vr.c --- if_vr.c 2002/02/07 12:46:13 1.9 +++ if_vr.c 2002/04/04 05:01:00 @@ -1330,7 +1330,7 @@ start_tx = sc->vr_cdata.vr_tx_free; while(sc->vr_cdata.vr_tx_free->vr_mbuf == NULL) { - IFQ_POLL(&ifp->if_snd, m_head); + IFQ_DEQUEUE(&ifp->if_snd, m_head); if (m_head == NULL) break; @@ -1340,16 +1340,18 @@ /* Pack the data into the descriptor. */ if (vr_encap(sc, cur_tx, m_head)) { - ifp->if_flags |= IFF_OACTIVE; + if (ALTQ_IS_ENABLED(&ifp->if_snd)) { + m_freem(m_head); + } else { + IF_PREPEND(&ifp->if_snd, m_head); + ifp->if_flags |= IFF_OACTIVE; + } cur_tx = NULL; break; } if (cur_tx != start_tx) VR_TXOWN(cur_tx) = VR_TXSTAT_OWN; - - /* now we are committed to transmit the packet */ - IFQ_DEQUEUE(&ifp->if_snd, m_head); /* * If there's a BPF listener, bounce a copy of this frame for OpenBSD, use this patch. Index: if_vr.c =================================================================== RCS file: /cvsroot/kame/kame/openbsd/sys/dev/pci/if_vr.c,v retrieving revision 1.8 diff -u -r1.8 if_vr.c --- if_vr.c 2002/02/19 07:05:33 1.8 +++ if_vr.c 2002/04/04 05:01:26 @@ -1290,7 +1290,7 @@ start_tx = sc->vr_cdata.vr_tx_free; while(sc->vr_cdata.vr_tx_free->vr_mbuf == NULL) { - IFQ_POLL(&ifp->if_snd, m_head); + IFQ_DEQUEUE(&ifp->if_snd, m_head); if (m_head == NULL) break; @@ -1300,16 +1300,18 @@ /* Pack the data into the descriptor. */ if (vr_encap(sc, cur_tx, m_head)) { - ifp->if_flags |= IFF_OACTIVE; + if (ALTQ_IS_ENABLED(&ifp->if_snd)) { + m_freem(m_head); + } else { + IF_PREPEND(&ifp->if_snd, m_head); + ifp->if_flags |= IFF_OACTIVE; + } cur_tx = NULL; break; } if (cur_tx != start_tx) VR_TXOWN(cur_tx) = VR_TXSTAT_OWN; - - /* now we are committed to transmit the packet */ - IFQ_DEQUEUE(&ifp->if_snd, m_head); #if NBPFILTER > 0 /*