[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[altq 298] altq-2.1 errata
This file contains post-release ERRATA for altq-2.1.
Currently 2 problems are listed.
1. rsvpd dies at cbq_modifyflow() (2000/01/22)
2. CBQ outage in a long run (2000/01/29)
1. rsvpd dies at cbq_modifyflow() (2000/01/22)
Problem description:
a pointer (cbq_clinfo) is not initialized in cbq_modifyflow()
in rsvpd-kit/tc_altq.c.
(only affects rsvpd)
Solution:
Appy the following patch to rsvpd-kit/tc_altq.c.
problem report by Xin Wang <xwang@ctr.columbia.edu>
--- /src/kjc/altq-2.1/rsvpd-kit/tc_altq.c Tue Dec 28 21:09:46 1999
+++ tc_altq.c Sat Jan 22 19:44:23 2000
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: tc_altq.c,v 1.2 1999/12/28 11:55:27 kjc Exp $
+ * $Id: tc_altq.c,v 1.3 2000/01/22 19:42:37 kjc Exp kjc $
*/
/************************ tc_altq.c *********************************
@@ -644,6 +644,7 @@
return (QOPERR_ADMISSION_NOSVC);
}
+ cbq_clinfo = tch->ifinfo->resv_class->private;
error = qop_cbq_modify_class(tch->clinfo,
cbq_clinfo->class_spec.priority,
bandwidth,
2. CBQ outage in a long run (2000/01/29)
CBQ experiences outage (stop sending packets) in a long stress
test.
The outage period varies from a few minutes to a few hours and
that the router will recover for a varying periods of time.
Problem description:
Somehow, the kernel timer expires earlier than the expected
time under certain conditions (the cause of this phenomenon is
not known).
When this happens, a resumed class could get suspended
immediately after its resume for another offtime.
Solution:
Add a workaround that clears undertime when a class is
resumed.
Appy the following patch to sys-sltq/altq/altq_rmclass.c.
problem report by
George Uhl <uhl@mamba-e.gsfc.nasa.gov> in [altq-120]
Karl Pielorz <kpielorz@tdx.co.uk>
--- altq_rmclass.c.orig Fri Jan 28 21:30:57 2000
+++ altq_rmclass.c Sat Jan 29 17:11:09 2000
@@ -913,6 +913,7 @@
UNTIMEOUT((timeout_t *)rmc_restart, cl, cl->callout_handle);
cl->sleeping_ = 0;
+ cl->undertime_.tv_sec = 0;
return (1);
}
@@ -1085,6 +1086,7 @@
if (cl->sleeping_)
UNTIMEOUT((timeout_t *)rmc_restart, cl, cl->callout_handle);
cl->sleeping_ = 0;
+ cl->undertime_.tv_sec = 0;
#endif
ifd->borrowed_[ifd->qi_] = cl->borrow_;
ifd->cutoff_ = cl->borrow_->depth_;
@@ -1203,6 +1205,7 @@
if (cl->sleeping_)
UNTIMEOUT((timeout_t *)rmc_restart, cl, cl->callout_handle);
cl->sleeping_ = 0;
+ cl->undertime_.tv_sec = 0;
#endif
ifd->borrowed_[ifd->qi_] = cl->borrow_;
ifd->cutoff_ = cl->borrow_->depth_;
@@ -1606,6 +1609,7 @@
s = splimp();
if (cl->sleeping_) {
cl->sleeping_ = 0;
+ cl->undertime_.tv_sec = 0;
if (ifd->queued_ < ifd->maxqueued_) {
CBQTRACE(rmc_restart, 'trts', cl->stats_.handle);