--- ../ns-2.1b8-ref/queue.cc	Mon Jul 19 21:51:36 1999
+++ queue.cc	Fri Jun 21 20:00:38 2002
@@ -83,7 +83,7 @@
 }
 
 Queue::Queue() : Connector(), blocked_(0), unblock_on_resume_(1), qh_(*this), 
-	pq_(0)			/* temporarily NULL */
+	pq_(0), no_resume(0)			/* temporarily NULL */
 {
 	bind("limit_", &qlim_);
 	bind_bool("blocked_", &blocked_);
@@ -110,7 +110,9 @@
 
 void Queue::resume()
 {
-	Packet* p = deque();
+	Packet* p;
+	if (no_resume) return; //AG
+	p = deque();
 	if (p != 0) {
 		target_->recv(p, &qh_);
 	} else {
@@ -126,4 +128,19 @@
 	Packet* p;
 	while ((p = deque()) != 0)
 		drop(p);
+}
+
+//AG it was difficult to put this anywhere else since resume() calls 
+//outside of Queue class generate a Scheduler error
+int Queue::command(int argc, const char*const* argv) { 
+	if (argc == 2 && !strcmp(argv[1],"block")) {
+                        no_resume=true;
+                        return (TCL_OK);
+                }
+                if (argc == 2 && !strcmp(argv[1],"unblock")) {
+                        no_resume=false;
+                        resume();
+                        return (TCL_OK);
+                }
+	return Connector::command(argc, argv);
 }
--- ../ns-2.1b8-ref/queue.h	Sat Feb 20 01:03:18 1999
+++ queue.h	Fri Jun 21 20:01:12 2002
@@ -133,6 +133,9 @@
 	PacketQueue *pq_;	/* pointer to actual packet queue 
 				 * (maintained by the individual disciplines
 				 * like DropTail and RED). */
+	//AG
+	int no_resume;		/* for generating delay spikes */
+	int command(int argc, const char*const* argv);
 };
 
 #endif

