diff -u -r ns-2.1b9-ref/tcl/lib/ns-default.tcl ns-2.1b9/tcl/lib/ns-default.tcl
--- ns-2.1b9-ref/tcl/lib/ns-default.tcl	Wed Jun 26 14:14:01 2002
+++ ns-2.1b9/tcl/lib/ns-default.tcl	Fri Jul  5 15:34:17 2002
@@ -770,6 +770,12 @@
 
 Agent/TCP set CoarseTimer_      0
 
+#AG
+Agent/TCP set eifel_ 0
+Agent/TCP set eifel_cc_ 1
+Agent/TCP set eifel_rto_ 0
+Agent/TCP set sack_nr_ 0
+
 Agent/TCPSink set sport_        0
 Agent/TCPSink set dport_        0         
 
diff -u -r ns-2.1b9-ref/tcp/tcp-fack.cc ns-2.1b9/tcp/tcp-fack.cc
--- ns-2.1b9-ref/tcp/tcp-fack.cc	Wed Jun 26 14:14:26 2002
+++ ns-2.1b9/tcp/tcp-fack.cc	Fri Jul  5 15:58:46 2002
@@ -34,6 +34,8 @@
 #include "tcp-fack.h"
 #include "template.h"
 
+//#define DEBUGSACK1A
+
 static class FackTcpClass : public TclClass {
 public:
 	FackTcpClass() : TclClass("Agent/TCP/Fack") {}
@@ -85,11 +87,15 @@
 	newtimer(pkt);
 	if (rtt_active_ && tcph->seqno() >= rtt_seq_) { 
 		rtt_active_ = 0;
-		t_backoff_ = 1;
+		if (eifel_rto_ != 2)
+			t_backoff_ = 1;
 	}
 	/* with timestamp option */
 	double tao = Scheduler::instance().clock() - tcph->ts_echo();
 	rtt_update(tao);
+	/*AG: reset only if not controlled by eifel routines */
+        if (eifel_rto_ != 2)
+        	t_backoff_ = 1; //AG: wasn't reset!
 	/* update average window */
 	awnd_ *= 1.0 - wnd_th_;
 	awnd_ += wnd_th_ * cwnd_;
@@ -233,7 +239,19 @@
 			retran_data_ = 0;
 			wintrim_ = 0;
 			dupacks_ = 0;
-		}
+		}                       
+		//AG should be on only with Eifel
+		if ((int)tcph->seqno() > last_ack_) {                   
+			int xmit_seqno; //AG
+                        xmit_seqno = scb_.GetNextRetran ();
+                        if (xmit_seqno != -1 && sack_nr_) {
+                                scb_.MarkRetran (xmit_seqno);
+                                output(xmit_seqno, 0);
+                                if (t_seqno_ <= xmit_seqno)
+                                        t_seqno_ = xmit_seqno + 1;
+				retran_data_++;
+			 }
+		}	
 		send_much(FALSE, 0, maxburst_);
 	}
 
@@ -254,6 +272,7 @@
 			 */
 			return;
 		};
+		eifel_timeout(); //AG 
 		// Do not clear fastrecov_ or alter recover_ variable
 		timeout_ = FALSE;
 		if (highest_ack_ > last_ack_)
@@ -261,6 +280,7 @@
 #ifdef DEBUGSACK1A
 		printf ("timeout. highest_ack: %d seqno: %d\n", 
 			highest_ack_, t_seqno_);
+		fflush(stdout);
 #endif
 		retran_data_ = 0;
 		last_cwnd_action_ = CWND_ACTION_TIMEOUT;
@@ -313,6 +333,7 @@
 #ifdef DEBUGSACK1A
 			printf("highest_ack: %d xmit_seqno: %d timeout: %d seqno: %d fack: % d win: %d retran_data: %d\n",
 			       highest_ack_, xmit_seqno, timeout_, t_seqno_, fack_, win, retran_data_);
+			fflush(stdout);
 #endif
 
 			if (xmit_seqno == -1) {  // no retransmissions to send
@@ -327,6 +348,7 @@
 #ifdef DEBUGSACK1A
 				printf("sending %d fastrecovery: %d win %d\n",
 				       xmit_seqno, fastrecov_, win);
+				fflush(stdout);
 #endif
 			} else {
 				found = 1;
diff -u -r ns-2.1b9-ref/tcp/tcp-full.cc ns-2.1b9/tcp/tcp-full.cc
--- ns-2.1b9-ref/tcp/tcp-full.cc	Wed Jun 26 14:14:27 2002
+++ ns-2.1b9/tcp/tcp-full.cc	Mon Jul  1 12:00:05 2002
@@ -121,6 +121,9 @@
 #include "random.h"
 #include "template.h"
 
+//AG uncomment to enable logging
+//#include "../queue/lib-atp.h"
+
 #ifndef TRUE
 #define	TRUE 	1
 #endif
@@ -752,8 +755,9 @@
  */
 
 void
-FullTcpAgent::pack_action(Packet*)
+FullTcpAgent::pack_action(Packet* p)
 {
+	eifel_ack(p); //AG
 	if (reno_fastrecov_ && fastrecov_ && cwnd_ > double(ssthresh_)) {
 		cwnd_ = double(ssthresh_); // retract window if inflated
 	}
@@ -855,6 +859,12 @@
 
 	last_ack_sent_ = ackno;
 
+       //AG also add t_rtt_ ?
+       //uncomment to set TTL=RTO
+       //atp_set_ttl(p, now()+ rtt_timeout());
+       //+ (int(t_srtt_) >> T_SRTT_BITS)*tcp_tick_);
+
+
 //if (state_ != TCPS_ESTABLISHED) {
 //printf("%f(%s)[state:%s]: sending pkt ", now(), name(), statestr(state_));
 //prpkt(p);
@@ -1235,6 +1245,7 @@
 			recent_age_ = now();
 			recent_ = tcph->ts();
 			rtt_update(now() - tcph->ts_echo());
+			t_backoff_ = 1; //AG: wasn't reset!
 		} else if (rtt_active_ && ackno > rtt_seq_) {
 			// got an RTT sample, record it
 			// "t_backoff_ = 1;" deleted by T. Kelly.
@@ -1417,6 +1428,12 @@
 	int ackno = tcph->ackno();		 // ack # from packet
 	int tiflags = tcph->flags() ; 		 // tcp flags from packet
 
+	//AG fix by Felix to retransmit lost FINs
+	if (state_ == TCPS_CLOSED && tiflags & TH_FIN)
+               goto dropafterack;
+
+
+
 //if (state_ != TCPS_ESTABLISHED || (tiflags&(TH_SYN|TH_FIN))) {
 //fprintf(stdout, "%f(%s)in state %s recv'd this packet: ", now(), name(), statestr(state_));
 //prpkt(pkt);
@@ -1582,6 +1599,7 @@
 			prpkt(pkt);
 			// don't want ACKs in LISTEN
 			goto dropwithreset;
+			// goto drop; AG: this kills SYNS!!
 		}
 		if ((tiflags & TH_SYN) == 0) {
 		    	fprintf(stderr,
@@ -2009,6 +2027,11 @@
 					dupack_action(); // maybe fast rexmt
 					goto drop;
 
+/*				} else {
+                               		//AG fix to prevent fast recovery after RTO
+                                    	if (cwnd_==1)
+                                        	goto drop;
+*/
 				} else if (dupacks_ > tcprexmtthresh_) {
 					// ACK at highest_ack_ AND above threshole
 					//trace_event("FAST_RECOVERY");
@@ -2166,7 +2189,7 @@
 			// K: added state change here
 			if (ourfinisacked) {
 				newstate(TCPS_CLOSED);
-				finish(); // cancels timers, erc
+				finish(); // cancels timers, erc				
 				reset(); // for connection re-use (bug fix from ns-users list)
 				goto drop;
 			} else {
@@ -2407,6 +2430,7 @@
 void
 FullTcpAgent::timeout_action()
 {
+	eifel_timeout(); //AG
 	recover_ = maxseq_;
 
 	if (cwnd_ < 1.0) {
diff -u -r ns-2.1b9-ref/tcp/tcp-reno.cc ns-2.1b9/tcp/tcp-reno.cc
--- ns-2.1b9-ref/tcp/tcp-reno.cc	Wed Jun 26 14:14:27 2002
+++ ns-2.1b9/tcp/tcp-reno.cc	Wed Jun 26 15:12:58 2002
@@ -1,4 +1,5 @@
-/* -*-	Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
+/* -*-	Mode:C++; c-basic-offset:8; tab-width:8; 
+indent-tabs-mode:t -*- */
 /*
  * Copyright (c) 1990, 1997 Regents of the University of California.
  * All rights reserved.
@@ -71,6 +72,7 @@
 
 void RenoTcpAgent::recv(Packet *pkt, Handler*)
 {
+	static int k=0;
 	hdr_tcp *tcph = hdr_tcp::access(pkt);
 #ifdef notdef
 	if (pkt->type_ != PT_ACK) {
@@ -104,11 +106,29 @@
 		}
 		if (++dupacks_ == numdupacks_) {
 			dupack_action();
-			dupwnd_ = numdupacks_;
+			//FIXME AG: ECN
+			//AG this fixes new segments on dupacks.
+			if (!bug_fix_ || highest_ack_ > recover_ ||allow_fast_retransmit(last_cwnd_action_))  //AG
+				dupwnd_ = numdupacks_;
+/* AG: this is purely experimental, send new segments on DUPACKs
+			else if (k++ %2) {
+				send_one();
+				cwnd_++; 
+			}
+*/
 		} else if (dupacks_ > numdupacks_) {
-			++dupwnd_;	// fast recovery
+			//AG this fixes new segments on dupacks.
+			if (!bug_fix_ || highest_ack_ > recover_ ||allow_fast_retransmit(last_cwnd_action_))  //AG
+				++dupwnd_;	// fast recovery
+/* AG: this is purely experimental, send new segments on DUPACKs
+			else if (k++ %2) {
+				send_one();
+				cwnd_++; 
+			}
+*/
 		} else if (dupacks_ < numdupacks_ && singledup_ ) {
 			send_one();
+//			cwnd_++; //AG
 		}
 	}
 	Packet::free(pkt);
diff -u -r ns-2.1b9-ref/tcp/tcp-sack1.cc ns-2.1b9/tcp/tcp-sack1.cc
--- ns-2.1b9-ref/tcp/tcp-sack1.cc	Wed Jun 26 14:14:27 2002
+++ ns-2.1b9/tcp/tcp-sack1.cc	Sun Jul  7 16:43:50 2002
@@ -158,6 +158,7 @@
 
 			/* New window: W/2 - K or W/2? */
 		} else if ((int)tcph->seqno() > highest_ack_) {
+			int xmit_seqno; //AG
 			/* Not out of fast recovery yet.
 			 * Update highest_ack_, but not last_ack_. */
 			--pipe_;
@@ -168,7 +169,17 @@
 			 * then this might be too aggressive. */
 			highest_ack_ = (int)tcph->seqno();
 			scb_.UpdateScoreBoard (highest_ack_, tcph);
-			t_backoff_ = 1;
+			if (eifel_rto_ != 2)
+				t_backoff_ = 1;
+			//AG should be on only with Eifel
+			xmit_seqno = scb_.GetNextRetran ();
+			if (xmit_seqno != -1 && sack_nr_) {
+				scb_.MarkRetran (xmit_seqno);
+				output(xmit_seqno, 0);
+				if (t_seqno_ <= xmit_seqno)
+                                        t_seqno_ = xmit_seqno + 1;
+                                pipe_++;
+			}
 			newtimer(pkt);
 		} else if (timeout_ == FALSE) {
 			/* got another dup ack */
@@ -185,6 +196,7 @@
 #ifdef notyet
 	if (trace_)
 		plot();
+
 #endif
 }
 
diff -u -r ns-2.1b9-ref/tcp/tcp.cc ns-2.1b9/tcp/tcp.cc
--- ns-2.1b9-ref/tcp/tcp.cc	Wed Jun 26 14:14:26 2002
+++ ns-2.1b9/tcp/tcp.cc	Sun Jul  7 16:46:13 2002
@@ -37,6 +37,11 @@
     "@(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/tcp/tcp.cc,v 1.132 2002/03/29 05:06:33 sfloyd Exp $ (LBL)";
 #endif
 
+//AG: eifel stuff
+//#define DEBUG(x) printf x;
+#define DEBUG(x) 
+//#include "../queue/lib-atp.h"
+
 #include <stdlib.h>
 #include <math.h>
 #include "ip.h"
@@ -98,6 +103,11 @@
         bind("necnresponses_", &necnresponses_);
         bind("ncwndcuts_", &ncwndcuts_);
 	bind("singledup_", &singledup_);
+	bind("eifel_", &eifel_); //AG
+	bind("eifel_cc_", &eifel_cc_); //AG
+	bind("eifel_rto_", &eifel_rto_); //AG
+	bind("sack_nr_", &sack_nr_); //AG
+
 #endif /* TCP_DELAY_BIND_ALL */
 
 }
@@ -184,6 +194,10 @@
         delay_bind_init_one("necnresponses_");
         delay_bind_init_one("ncwndcuts_");
 	delay_bind_init_one("singledup_");
+	delay_bind_init_one("eifel_"); //AG
+	delay_bind_init_one("sack_nr_"); //AG
+	delay_bind_init_one("eifel_cc_"); //AG
+	delay_bind_init_one("eifel_rto_"); //AG
 #endif /* TCP_DELAY_BIND_ALL */
 
 	Agent::delay_bind_init_all();
@@ -246,7 +260,10 @@
 	if (delay_bind(varName, localName, "high_decrease_", &high_decrease_, tracer)) return TCL_OK;
 	if (delay_bind_bool(varName, localName, "timerfix_", &timerfix_, tracer)) return TCL_OK;
 	if (delay_bind_bool(varName, localName, "rfc2988_", &rfc2988_, tracer)) return TCL_OK;
-
+	if (delay_bind_bool(varName, localName, "eifel_", &eifel_, tracer)) return TCL_OK; //AG
+	if (delay_bind(varName, localName, "eifel_cc_", &eifel_cc_, tracer)) return TCL_OK; //AG
+	if (delay_bind(varName, localName, "eifel_rto_", &eifel_rto_, tracer)) return TCL_OK; //AG
+	if (delay_bind_bool(varName, localName, "sack_nr_", &sack_nr_, tracer)) return TCL_OK; //AG
 
 #ifdef TCP_DELAY_BIND_ALL
 	// not if (delay-bound delay-bound tracevars aren't yet supported
@@ -418,6 +435,9 @@
 	/* W.N.: for removing packets from previous incarnations */
 	lastreset_ = Scheduler::instance().clock();
 
+	cancel_timers(); //AG
+	reset_eifel();  //AG
+
 	/* Now these variables will be reset 
 	   - Debojyoti Dutta 12th Oct'2000 */
  
@@ -580,7 +600,7 @@
 	if (ecn_) {
 		hf->ect() = 1;	// ECN-capable transport
 	}
-	if (cong_action_) {
+	if (ecn_ && cong_action_) { //AG
 		hf->cong_action() = TRUE;  // Congestion action.
 		cong_action_ = FALSE;
         }
@@ -657,6 +677,12 @@
 
 int TcpAgent::command(int argc, const char*const* argv)
 {
+	if (argc == 2) {
+		if (strcmp(argv[1], "reset") == 0) {
+			this->reset();
+			return (TCL_OK);
+		}
+	}
 	if (argc == 3) {
 		if (strcmp(argv[1], "advance") == 0) {
 			int newseq = atoi(argv[2]);
@@ -1055,6 +1081,11 @@
 {
 	double now = Scheduler::instance().clock();
 	hdr_tcp *tcph = hdr_tcp::access(pkt);
+        /* AG: FIXME to coexist with FullTcp which sets 
+	   t_seqno_ =highest_ack_, while TCP sets t_seqno_ = highest_ack_+ 1;	*/
+
+	eifel_ack(pkt);
+
 	/* 
 	 * Wouldn't it be better to set the timer *after*
 	 * updating the RTT, instead of *before*? 
@@ -1075,8 +1106,12 @@
 	 */	
 	hdr_flags *fh = hdr_flags::access(pkt);
 	if (!fh->no_ts_) {
-		if (ts_option_)
+		if (ts_option_) {
 			rtt_update(now - tcph->ts_echo());
+			/*AG: reset only if not controlled by eifel routines */
+			if (eifel_rto_ != 2)
+                           t_backoff_ = 1; //AG: wasn't reset!
+		}
 
 		if (rtt_active_ && tcph->seqno() >= rtt_seq_) {
 			if (!ect_ || !ecn_backoff_ || 
@@ -1085,7 +1120,10 @@
 				 * Don't end backoff if still in ECN-Echo with
 			 	 * a congestion window of 1 packet. 
 				 */
-				t_backoff_ = 1;
+
+				/*AG: reset only if not controlled by eifel routines */
+				if (eifel_rto_ != 2)
+					t_backoff_ = 1;
 				ecn_backoff_ = 0;
 			}
 			rtt_active_ = 0;
@@ -1151,7 +1189,8 @@
 		
 		if (!control_increase_ || 
 		   (control_increase_ && (network_limited() == 1))) 
-	      		opencwnd();
+//AG FIXME need this?			if (!eifel_)
+				opencwnd();
 	}
 	if (ect_) {
 		if (!hdr_flags::access(pkt)->ecnecho())
@@ -1364,6 +1403,7 @@
 			 // What if CWND_ACTION_ECN and cwnd < 1?
 			 // return;
 		} else {
+			eifel_timeout(); //AG
 			recover_ = maxseq_;
 			if (highest_ack_ == -1 && wnd_init_option_ == 2)
 				/* 
@@ -1433,7 +1473,9 @@
  * invokes the Tcl finish procedure that was registered with TCP.
  */
 void TcpAgent::finish()
-{
+{		
+//AG	printf("finish\n");
+	reset();
 	Tcl::instance().evalf("%s done", this->name());
 }
 
@@ -1679,3 +1721,136 @@
 			);
 	et_->trace();
 }
+
+void TcpAgent::eifel_timeout() {
+//now, even when eifel is off we detect bad RTOs
+//	if (!eifel_) return; 
+ 
+	// Get the oldest unacknowledeged segment
+	//AG fixme iss is not used in single TCP agents
+	int oldest_seg = (highest_ack_ < 0) ? 0 : int(highest_ack_);
+ 
+	if (eifel_rexmit_no_ == 0){
+		DEBUG(("EifelFullTcpAgent::timeout_action - first retransmission  %d\n",oldest_seg));
+		eifel_rexmit_seq_ = oldest_seg;
+		eifel_rexmit_no_ = 1;
+ 
+		eifel_ts_first_rexmit_ = Scheduler::instance().clock(); // that's how FullTcp implements TS
+		eifel_last_cwnd_ = cwnd_;
+		eifel_last_ssthresh_ = ssthresh_;
+	}else{ // eifel_rexmit_no != 0
+		if (oldest_seg == eifel_rexmit_seq_){
+			DEBUG(("EifelFullTcpAgent::timeout_action - Retransmission No: %d\n",eifel_rexmit_no_+1))
+				eifel_rexmit_no_++;
+		}
+	}   
+}
+
+/*
+ * For every ACK check if 1) timeout occured 2) it was good or bad timeout
+ * If Eifel is enabled, respond to timeouts
+ */
+void TcpAgent::eifel_ack(Packet *p) {	
+
+  if (!ts_option_) return; /* cannot detect without timestamps */
+  
+  if ( eifel_rexmit_no_ > 0) {  /* check if timeout occured */
+    hdr_tcp *tcph = hdr_tcp::access(p);
+    double ack_ts = tcph->ts_echo();
+
+    DEBUG(("EifelFullTcpAgent::ack_action - Rexmit Mode: t_seqn_=%d,maxseq_=%d\n",(int)t_seqno_,(int)maxseq_))
+    DEBUG(("eifel_ts_first = %f, ts=%f, ts_echo=%f\n",eifel_ts_first_rexmit_,tcph->ts(),tcph->ts_echo()))
+
+    if (ack_ts < eifel_ts_first_rexmit_) { // FIXME: Time is endless,isn't it
+
+      DEBUG(("EifelFullTcpAgent::ack_action - Spurious Timeout: %d\n",recover_))      // so we continue with the next unsent packet
+
+      //atp_log_msg("bad timeout\n"); 
+      DEBUG(("bad timeout\n"));
+
+      if (eifel_rto_==3) minrto_++;
+
+      /* if eifel is disabled, only detect bad timeouts, but no response */
+      if (!eifel_) goto no_response;
+
+      t_seqno_ = maxseq_; /* continue transmission from high_seq */
+
+      /* 
+       * Now revert congestion control
+       * Note: we don't care about the number of timeouts
+       */
+      switch (eifel_cc_) {
+      case 1 : /*** full undo */
+        cwnd_ = eifel_last_cwnd_;
+        ssthresh_ = eifel_last_ssthresh_;
+        break;
+      case 2 :
+	/******* cwnd/=2, ssthresh=cwnd */
+        cwnd_ = eifel_last_cwnd_/2;
+        if (int(cwnd_)<2) cwnd_ = 1;
+        ssthresh_ = cwnd_; //eifel_last_ssthresh_/2;
+        if (int(ssthresh_) <2) ssthresh_ = 2;
+        break;
+      case 3:
+	/******* sstresh=cwnd, cwnd=1 */
+        ssthresh_ = int(eifel_last_cwnd_);
+        if (int(ssthresh_) <2) ssthresh_ = 2;
+        cwnd_ = 1;
+        break;
+      case 4:
+	/******* sstresh=cwnd, cwnd/=2 */
+        ssthresh_ = int(eifel_last_cwnd_);
+        if (int(ssthresh_) <2) ssthresh_ = 2;
+        cwnd_ = eifel_last_cwnd_/2;
+        if (int(cwnd_)<2) cwnd_ = 1;
+        break;
+      case 5:
+	/******* sstresh=cwnd, cwnd=cwnd */
+        ssthresh_ = int(eifel_last_cwnd_);
+        if (int(ssthresh_) <2) ssthresh_ = 2;
+        cwnd_ = eifel_last_cwnd_;
+        if (int(cwnd_)<2) cwnd_ = 1;
+        break;
+      default:
+        ;
+        /* nothing: We go on with standard TCP behavior
+           cwnd_ = 1;
+           ssthresh_ = eifel_last_ssthresh_/2;
+	*/
+      } /*switch*/
+
+    DEBUG(("Eifel::CC: new cwnd=%d, new ssthresh=%d\n",(int)cwnd_,(int)ssthresh_))      
+
+    DEBUG(("Eifel::CC: old RTO %.2f\n", rtt_timeout()))      
+
+    /* eifel_rto=2 is dealed with else where */
+    if (eifel_rto_==1) {
+      /* reseed RTO with new RTT sample (ra=rtt, va=rtt/2, t=rtt+4*va) */	
+      double now = Scheduler::instance().clock();
+      t_srtt_=0; //this forces rtt_update to reset srtt and svar
+      rtt_update(now - tcph->ts_echo());
+      set_rtx_timer();
+      DEBUG(("Eifel::CC: new RTO %.2f\n", rtt_timeout()))      
+    } 
+
+  } /* spurious timeout */
+  else {
+	//atp_log_msg("unavoidable timeout\n"); 
+	DEBUG(("unavoidable timeout\n"));
+	if (eifel_rto_==2) t_backoff_=1;
+	if (eifel_rto_==3) minrto_=1;
+  }
+
+no_response:
+   //fflush(stdout);
+   reset_eifel(); /* this timeout was resolved, prepare for next one */
+
+ } /* timeout */   
+}
+
+/* init eifel-related variables */
+void TcpAgent::reset_eifel() {
+    eifel_ts_first_rexmit_ = 0;
+    eifel_rexmit_seq_ = 0;
+    eifel_rexmit_no_ = 0;
+}
diff -u -r ns-2.1b9-ref/tcp/tcp.h ns-2.1b9/tcp/tcp.h
--- ns-2.1b9-ref/tcp/tcp.h	Wed Jun 26 14:14:27 2002
+++ ns-2.1b9/tcp/tcp.h	Fri Jul  5 15:32:28 2002
@@ -269,6 +269,22 @@
 				 * old ECN implementation, which never
 				 * reduced the congestion window below
 				 * one packet. */ 
+
+  /* AG: Eifel related stuff */	  
+  int eifel_;             /* use the Eifel algorithm or not */
+  int eifel_cc_;          /* 1-restore CC fully, 0-not all, etc... see tcp.cc*/
+  int eifel_rto_;         /* 0-standard rto, 1-reseed after timeout, 2-backoff */
+  int sack_nr_;
+
+  double eifel_ts_first_rexmit_;   /* holds timestamp of first retransmission */
+  double eifel_last_cwnd_;         /* to save the current cwnd */
+  int eifel_last_ssthresh_;        /* same for ssthresh */
+  int eifel_rexmit_seq_;           /* sequence number of retransmitted segment */
+  int eifel_rexmit_no_;            /* number of retransmissions */
+  void eifel_timeout();
+  void eifel_ack(Packet*);
+  void reset_eifel();
+
 	FILE *plotfile_;
 	/*
 	 * Dynamic state.

