[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);