• l2dct


    http://paste.ubuntu.com/15664711/

    diff -crbB ns-allinone-2.35/ns-2.35/queue/red.cc ns-2.35/queue/red.cc
    *** ns-allinone-2.35/ns-2.35/queue/red.cc	2011-10-02 18:32:34.000000000 -0400
    --- ns-2.35/queue/red.cc	2014-10-01 14:37:10.684908657 -0400
    ***************
    *** 559,566 ****
      		edv_.count_bytes = 0;
      		hdr_flags* hf = hdr_flags::access(pickPacketForECN(pkt));
      		if (edp_.setbit && hf->ect() && 
    !                      (!edp_.use_mark_p || edv_.v_prob1 < edp_.mark_p)) { 
      			hf->ce() = 1; 	// mark Congestion Experienced bit
      			// Tell the queue monitor here - call emark(pkt)
      			return (0);	// no drop
      		} else {
    --- 559,567 ----
      		edv_.count_bytes = 0;
      		hdr_flags* hf = hdr_flags::access(pickPacketForECN(pkt));
      		if (edp_.setbit && hf->ect() && 
    ! 		    (!edp_.use_mark_p || edv_.v_prob1 <= edp_.mark_p)) { // For DCTCP: '<' is changed to '<=' here  
      			hf->ce() = 1; 	// mark Congestion Experienced bit
    + 			//fprintf(stdout,"DCTCP packet marked at time= %f
    ", (double)Scheduler::instance().clock());
      			// Tell the queue monitor here - call emark(pkt)
      			return (0);	// no drop
      		} else {
    Only in ns-2.35/queue: red.cc~
    diff -crbB ns-allinone-2.35/ns-2.35/tcl/lib/ns-default.tcl ns-2.35/tcl/lib/ns-default.tcl
    *** ns-allinone-2.35/ns-2.35/tcl/lib/ns-default.tcl	2010-07-03 18:45:45.000000000 -0400
    --- ns-2.35/tcl/lib/ns-default.tcl	2012-07-21 21:35:04.000000000 -0400
    ***************
    *** 916,922 ****
      Agent/TCP set exitFastRetrans_ true ;	# Added 2003/7/28.
      					# For clean exits of Fast Retransmit.
      					# False for old buggy behavior.
    ! Agent/TCP set window_ 20
      Agent/TCP set windowInit_ 2 ;		# default changed on 2001/5/26.
      Agent/TCP set windowInitOption_ 1
      Agent/TCP set syn_ true ;		# default changed on 2001/5/17.
    --- 916,922 ----
      Agent/TCP set exitFastRetrans_ true ;	# Added 2003/7/28.
      					# For clean exits of Fast Retransmit.
      					# False for old buggy behavior.
    ! Agent/TCP set window_ 20000000
      Agent/TCP set windowInit_ 2 ;		# default changed on 2001/5/26.
      Agent/TCP set windowInitOption_ 1
      Agent/TCP set syn_ true ;		# default changed on 2001/5/17.
    ***************
    *** 1026,1031 ****
    --- 1026,1039 ----
      
      Agent/TCP set SetCWRonRetransmit_ true ; # added on 2005/06/19.
      				 	 # default changed on 2008/06/05. 
    + # DCTCP
    + Agent/TCP set dctcp_ false;
    + Agent/TCP set dctcp_alpha_ 0.0;
    + Agent/TCP set dctcp_g_ 0.0625;
    + 
    + # D2TCP
    + Agent/TCP set flow_deadline 100000;
    + Agent/TCP set flow_size 10000000000;
      
      # XXX Generate nam trace or plain old text trace for variables. 
      # When it's true, generate nam trace.
    diff -crbB ns-allinone-2.35/ns-2.35/tcp/tcp.cc ns-2.35/tcp/tcp.cc
    *** ns-allinone-2.35/ns-2.35/tcp/tcp.cc	2011-06-20 00:51:46.000000000 -0400
    --- ns-2.35/tcp/tcp.cc	2014-10-01 14:55:29.020865582 -0400
    ***************
    *** 47,52 ****
    --- 47,56 ----
      #include "basetrace.h"
      #include "hdr_qs.h"
      
    + #define debug_dctcp 0
    + #define wmax 2.5 	//Max weight a flow can get
    + #define wmin 0.125	//Min weight a flow can get
    + 
      int hdr_tcp::offset_;
      
      static class TCPHeaderClass : public PacketHeaderClass {
    ***************
    *** 76,82 ****
      	  first_decrease_(1), fcnt_(0), nrexmit_(0), restart_bugfix_(1), 
                cong_action_(0), ecn_burst_(0), ecn_backoff_(0), ect_(0), 
                use_rtt_(0), qs_requested_(0), qs_approved_(0),
    ! 	  qs_window_(0), qs_cwnd_(0), frto_(0)
      {
      #ifdef TCP_DELAY_BIND_ALL
              // defined since Dec 1999.
    --- 80,86 ----
      	  first_decrease_(1), fcnt_(0), nrexmit_(0), restart_bugfix_(1), 
                cong_action_(0), ecn_burst_(0), ecn_backoff_(0), ect_(0), 
                use_rtt_(0), qs_requested_(0), qs_approved_(0),
    ! 	  qs_window_(0), qs_cwnd_(0), frto_(0), dctcp_maxseq(0)
      {
      #ifdef TCP_DELAY_BIND_ALL
              // defined since Dec 1999.
    ***************
    *** 101,106 ****
    --- 105,113 ----
              bind("necnresponses_", &necnresponses_);
              bind("ncwndcuts_", &ncwndcuts_);
      	bind("ncwndcuts1_", &ncwndcuts1_);
    + 	bind("dctcp_", &dctcp_);
    + 	bind("dctcp_alpha_", &dctcp_alpha_);
    + 	bind("dctcp_g_", &dctcp_g_);
      #endif /* TCP_DELAY_BIND_ALL */
      
      }
    ***************
    *** 123,128 ****
    --- 130,140 ----
              delay_bind_init_one("overhead_");
              delay_bind_init_one("tcpTick_");
              delay_bind_init_one("ecn_");
    + 	// DCTCP
    + 	delay_bind_init_one("dctcp_"); 
    + 	delay_bind_init_one("dctcp_alpha_");
    + 	delay_bind_init_one("dctcp_g_");
    + 
              delay_bind_init_one("SetCWRonRetransmit_");
              delay_bind_init_one("old_ecn_");
              delay_bind_init_one("bugfix_ss_");
    ***************
    *** 234,239 ****
    --- 246,255 ----
              if (delay_bind(varName, localName, "overhead_", &overhead_, tracer)) return TCL_OK;
              if (delay_bind(varName, localName, "tcpTick_", &tcp_tick_, tracer)) return TCL_OK;
              if (delay_bind_bool(varName, localName, "ecn_", &ecn_, tracer)) return TCL_OK;
    + 	// Ali munir
    +         if (delay_bind_bool(varName, localName, "dctcp_", &dctcp_, tracer)) return TCL_OK; 
    + 	if (delay_bind(varName, localName, "dctcp_alpha_", &dctcp_alpha_ , tracer)) return TCL_OK;
    + 	if (delay_bind(varName, localName, "dctcp_g_", &dctcp_g_ , tracer)) return TCL_OK;
              if (delay_bind_bool(varName, localName, "SetCWRonRetransmit_", &SetCWRonRetransmit_, tracer)) return TCL_OK;
              if (delay_bind_bool(varName, localName, "old_ecn_", &old_ecn_ , tracer)) return TCL_OK;
              if (delay_bind_bool(varName, localName, "bugfix_ss_", &bugfix_ss_ , tracer)) return TCL_OK;
    ***************
    *** 719,724 ****
    --- 735,743 ----
      			hf->ecnecho() = 1;
      //			hf->cong_action() = 1;
      			hf->ect() = 0;
    + 		/* ali munir */
    + 		if (dctcp_)
    + 			hf->ect() = 1;
      		}
      		if (qs_enabled_) {
      			hdr_qs *qsh = hdr_qs::access(p);
    ***************
    *** 775,780 ****
    --- 794,807 ----
      	send(p, 0);
      	if (seqno == curseq_ && seqno > maxseq_)
      		idle();  // Tell application I have sent everything so far
    + 
    + 	/* ali munir: begins*/
    + 	if (dctcp_)
    + 	if (seqno > dctcp_maxseq) 
    + 		dctcp_maxseq = seqno;
    + 
    + 	
    + 
      	if (seqno > maxseq_) {
      		maxseq_ = seqno;
      		if (!rtt_active_) {
    ***************
    *** 1119,1124 ****
    --- 1146,1175 ----
      void TcpAgent::opencwnd()
      {
      	double increment;
    + 	double weight_c;	//Ali Munir
    + 	double mywnd_old;	//Ali Munir
    + 	double mywnd_new;	//Ali Munir
    + 	
    + 	/* Ali Munir: Begin */
    + 	mywnd_old = cwnd_;
    + 
    + 	if (dctcp_) {
    + 
    + 	if (ndatapack_ <= 200)	weight_c = wmax;
    + 	if (ndatapack_ > 200)	weight_c = wmax - (wmax-wmin) * (ndatapack_ - 200) / 800;
    + 
    + 	if (weight_c < wmin) weight_c = wmin;
    + 	if (weight_c > wmax) weight_c = wmax;
    + 
    + 	increase_num_ = weight_c / wmax; 
    + 
    + 	if(debug_dctcp)
    + 	printf("opencwnd: increase=%f
    ", increase_num_);
    + 
    + 	}
    + 	/* Ali Munir: End */
    + 
    + 
      	if (cwnd_ < ssthresh_) {
      		/* slow-start (exponential) */
      		cwnd_ += 1;
    ***************
    *** 1127,1136 ****
      		double f;
      		switch (wnd_option_) {
      		case 0:
    ! 			if (++count_ >= cwnd_) {
    ! 				count_ = 0;
    ! 				++cwnd_;
    ! 			}
      			break;
      
      		case 1:
    --- 1178,1188 ----
      		double f;
      		switch (wnd_option_) {
      		case 0:
    ! 		// Begin 
    ! 			increment = increase_num_ / cwnd_;
    ! 			cwnd_ += increment;
    ! 	if(debug_dctcp)
    ! 		printf("opencwnd: increase=%f, test print # 0
    ", increase_num_);
      			break;
      
      		case 1:
    ***************
    *** 1143,1148 ****
    --- 1195,1202 ----
      				  max_ssthresh_, increment);
      			}
      			cwnd_ += increment;
    + 		if(debug_dctcp)
    + 		printf("opencwnd: increase=%f, test print # 1
    ", increase_num_);
      			break;
      
      		case 2:
    ***************
    *** 1153,1158 ****
    --- 1207,1214 ----
      			 *  with Multiple Congested Gateways". 
      			 *  The window is increased by roughly 
      			 *  wnd_const_*RTT^2 packets per round-trip time.  */
    + 	if(debug_dctcp)
    + 		printf("opencwnd: increase=%f, test print # 2
    ", increase_num_);
      			f = (t_srtt_ >> T_SRTT_BITS) * tcp_tick_;
      			f *= f;
      			f *= wnd_const_;
    ***************
    *** 1178,1183 ****
    --- 1234,1241 ----
      				++cwnd_;
      			} else
      				fcnt_ = f;
    + 	if(debug_dctcp)
    + 		printf("opencwnd: increase=%f, test print # 3
    ", increase_num_);
      			break;
      
                      case 4:
    ***************
    *** 1192,1197 ****
    --- 1250,1257 ----
                                      ++cwnd_;
                              } else
                                      fcnt_ = f;
    + 	if(debug_dctcp)
    + 		printf("opencwnd: increase=%f, test print # 4
    ", increase_num_);
                              break;
      		case 5:
      			/* The window is increased by roughly wnd_const_*RTT 
    ***************
    *** 1206,1215 ****
    --- 1266,1279 ----
                                      ++cwnd_;
                              } else
                                      fcnt_ = f;
    + 	if(debug_dctcp)
    + 		printf("opencwnd: increase=%f, test print # 5
    ", increase_num_);
                              break;
                      case 6:
                              /* binomial controls */ 
                              cwnd_ += increase_num_ / (cwnd_*pow(cwnd_,k_parameter_));   
    + 	if(debug_dctcp)
    + 		printf("opencwnd: increase=%f, test print # 6
    ", increase_num_);             
                              break; 
       		case 8: 
      			/* high-speed TCP, RFC 3649 */
    ***************
    *** 1221,1232 ****
    --- 1285,1300 ----
      				  max_ssthresh_, increment);
      			}
      			cwnd_ += increment;
    + 	if(debug_dctcp)
    + 		printf("opencwnd: increase=%f, test print # 8
    ", increase_num_);
                              break;
      		default:
      #ifdef notdef
      			/*XXX*/
      			error("illegal window option %d", wnd_option_);
      #endif
    + 	if(debug_dctcp)
    + 		printf("opencwnd: increase=%f, test print # default
    ", increase_num_);
      			abort();
      		}
      	}
    ***************
    *** 1234,1239 ****
    --- 1302,1311 ----
      	if (maxcwnd_ && (int(cwnd_) > maxcwnd_))
      		cwnd_ = maxcwnd_;
      
    + 	if(debug_dctcp){	
    + 		mywnd_new = cwnd_;
    + 		printf("opencwnd: increase=%f, cwnd: old %f new %f
    ", increase_num_, (double)windowd(), mywnd_new);
    + 		}
      	return;
      }
      
    ***************
    *** 1243,1248 ****
    --- 1315,1322 ----
      	double decrease;  /* added for highspeed - sylvia */
      	double win, halfwin, decreasewin;
      	int slowstart = 0;
    + 	double b_;
    + 	double weight_c;
      	++ncwndcuts_;
      	if (!(how & TCP_IDLE) && !(how & NO_OUTSTANDING_DATA)){
      		++ncwndcuts1_; 
    ***************
    *** 1297,1302 ****
    --- 1371,1381 ----
      		} else {
      			ssthresh_ = (int) decreasewin;
      		}
    + 	else if (how & CLOSE_SSTHRESH_DCTCP) {
    + 		ssthresh_ = (int) ((1 - dctcp_alpha_/2.0) * windowd());
    + 	if(debug_dctcp)
    + 		fprintf(stdout,"DCTCP backoff (ssthresh) applied (alpha=%f) at time= %f
    ", (double)dctcp_alpha_, (double)Scheduler::instance().clock());
    + 	}
              else if (how & THREE_QUARTER_SSTHRESH)
      		if (ssthresh_ < 3*cwnd_/4)
      			ssthresh_  = (int)(3*cwnd_/4);
    ***************
    *** 1306,1311 ****
    --- 1385,1407 ----
      		if (first_decrease_ == 1 || slowstart || decrease_num_ == 0.5) {
      			cwnd_ = halfwin;
      		} else cwnd_ = decreasewin;
    + 	else if (how & CLOSE_CWND_DCTCP){
    + 
    + 		/* Ali Munir: Begin */
    + 		if (ndatapack_ <= 200)	weight_c = wmax;
    + 		if (ndatapack_ > 200)	weight_c = wmax - (wmax-wmin) * (ndatapack_ - 200) / 800;
    + 
    + 
    + 		if (weight_c < wmin) weight_c = wmin;
    + 		if (weight_c > wmax) weight_c = wmax;
    + 
    + 		b_ = pow(dctcp_alpha_,weight_c);
    + 		cwnd_ = (1 - b_/2.0) * windowd();
    + 
    + 		if(debug_dctcp)
    + 			fprintf(stdout,"DCTCP backoff (cwnd down) applied (alpha=%f) at time= %f, weight=%f b=%f, cwnd %f, fid %d
    ", (double)dctcp_alpha_, (double)Scheduler::instance().clock(), weight_c, b_, (double)windowd(), fid_);	
    + 		/* Ali Munir: End */
    + 	}
              else if (how & CWND_HALF_WITH_MIN) {
      		// We have not thought about how non-standard TCPs, with
      		// non-standard values of decrease_num_, should respond
    ***************
    *** 1328,1334 ****
      	}
      	if (ssthresh_ < 2)
      		ssthresh_ = 2;
    ! 	if (how & (CLOSE_CWND_HALF|CLOSE_CWND_RESTART|CLOSE_CWND_INIT|CLOSE_CWND_ONE))
      		cong_action_ = TRUE;
      
      	fcnt_ = count_ = 0;
    --- 1424,1432 ----
      	}
      	if (ssthresh_ < 2)
      		ssthresh_ = 2;
    ! 	if (cwnd_ < 1)
    ! 		cwnd_ = 1;
    ! 	if (how & (CLOSE_CWND_HALF|CLOSE_CWND_RESTART|CLOSE_CWND_INIT|CLOSE_CWND_ONE|CLOSE_CWND_DCTCP))
      		cong_action_ = TRUE;
      
      	fcnt_ = count_ = 0;
    ***************
    *** 1429,1434 ****
    --- 1527,1535 ----
      				rtt_backoff();
      			else ecn_backoff_ = 1;
      		} else ecn_backoff_ = 0;
    + 		if (dctcp_)  
    + 			slowdown(CLOSE_CWND_DCTCP|CLOSE_SSTHRESH_DCTCP);
    + 		else
      		slowdown(CLOSE_CWND_HALF|CLOSE_SSTHRESH_HALF);
      		++necnresponses_ ;
      		// added by sylvia to count number of ecn responses 
    Only in ns-2.35/tcp: tcp.cc~
    diff -crbB ns-allinone-2.35/ns-2.35/tcp/tcp.h ns-2.35/tcp/tcp.h
    *** ns-allinone-2.35/ns-2.35/tcp/tcp.h	2011-08-26 15:29:57.000000000 -0400
    --- ns-2.35/tcp/tcp.h	2012-07-11 06:07:18.000000000 -0400
    ***************
    *** 104,110 ****
      #define CWND_HALF_WITH_MIN	0x00000200
      #define TCP_IDLE		0x00000400
      #define NO_OUTSTANDING_DATA     0x00000800
    ! 
      /*
       * tcp_tick_:
       * default 0.1,
    --- 104,111 ----
      #define CWND_HALF_WITH_MIN	0x00000200
      #define TCP_IDLE		0x00000400
      #define NO_OUTSTANDING_DATA     0x00000800
    ! #define CLOSE_SSTHRESH_DCTCP   0x00001000
    ! #define CLOSE_CWND_DCTCP       0x00002000
      /*
       * tcp_tick_:
       * default 0.1,
    ***************
    *** 432,437 ****
    --- 433,445 ----
      
      	/* Used for ECN */
      	int ecn_;		/* Explicit Congestion Notification */
    + 	
    + 	/* Use for DCTCP */
    + 	int dctcp_;
    + 	double dctcp_alpha_;
    + 	double dctcp_g_;
    + 	int dctcp_maxseq;
    + 
      	int cong_action_;	/* Congestion Action.  True to indicate
      				   that the sender responded to congestion. */
              int ecn_burst_;		/* True when the previous ACK packet
    diff -crbB ns-allinone-2.35/ns-2.35/tcp/tcp-sack1.cc ns-2.35/tcp/tcp-sack1.cc
    *** ns-allinone-2.35/ns-2.35/tcp/tcp-sack1.cc	2006-12-24 12:04:44.000000000 -0500
    --- ns-2.35/tcp/tcp-sack1.cc	2014-10-01 15:10:19.248830658 -0400
    ***************
    *** 38,43 ****
    --- 38,45 ----
      #define RECOVER_TIMEOUT 2
      #define RECOVER_QUENCH  3
      
    + #define debug_dctcp 0
    + 
      class Sack1TcpAgent : public TcpAgent {
       public:
      	Sack1TcpAgent();
    ***************
    *** 53,58 ****
    --- 55,67 ----
       protected:
      	u_char timeout_;	/* boolean: sent pkt from timeout? */
      	u_char fastrecov_;	/* boolean: doing fast recovery? */
    + 	/* variables for DCTCP */
    + 	int dctcp_total;
    + 	int dctcp_marked;
    + 	int dctcp_alpha_update_seq;
    + //	int dctcp_maxseq;
    + 	int ce_transition;
    + 
      	int pipe_;		/* estimate of pipe size (fast recovery) */ 
      	int partial_ack_;	/* Set to "true" to ensure sending */
      				/*  a packet on a partial ACK.     */
    ***************
    *** 61,66 ****
    --- 70,76 ----
      	int firstpartial_;	/* First of a series of partial acks. */
      	ScoreBoard* scb_;
      	static const int SBSIZE=64; /* Initial scoreboard size */
    + 	void update_dctcp_alpha(Packet *); /* DCTCP alpha update */
      };
      
      static class Sack1TcpClass : public TclClass {
    ***************
    *** 71,77 ****
      	}
      } class_sack;
      
    ! Sack1TcpAgent::Sack1TcpAgent() : fastrecov_(FALSE), pipe_(-1), next_pkt_(0), firstpartial_(0)
      {
      	bind_bool("partial_ack_", &partial_ack_);
      	/* Use the Reassembly Queue based scoreboard as
    --- 81,88 ----
      	}
      } class_sack;
      
    ! Sack1TcpAgent::Sack1TcpAgent() : fastrecov_(FALSE), pipe_(-1), next_pkt_(0), firstpartial_(0),
    ! 	        dctcp_total(0), dctcp_marked(0), dctcp_alpha_update_seq(0), ce_transition(0)
      {
      	bind_bool("partial_ack_", &partial_ack_);
      	/* Use the Reassembly Queue based scoreboard as
    ***************
    *** 116,121 ****
    --- 127,139 ----
                      return;
              }
      	++nackpack_;
    + 	
    + 	/* ali munir */
    + 	if (dctcp_) 
    + 		update_dctcp_alpha(pkt);
    + 
    + 
    + 
      	int ecnecho = hdr_flags::access(pkt)->ecnecho();
      	if (ecnecho && ecn_)
      		ecn(tcph->seqno());
    ***************
    *** 284,289 ****
    --- 304,315 ----
       
      	if (ecn_ && last_cwnd_action_ == CWND_ACTION_ECN) {
      		last_cwnd_action_ = CWND_ACTION_DUPACK;
    + 
    + 		/* ali  munir: cut window by half when we have 3 dup ack */
    + 		if (dctcp_) 
    + 			slowdown(CLOSE_SSTHRESH_HALF|CLOSE_CWND_HALF); 
    + 
    + 
      		/*
      		 * What if there is a DUPACK action followed closely by ECN
      		 * followed closely by a DUPACK action?
    ***************
    *** 400,405 ****
    --- 426,438 ----
      		 * If DSACK and detection of premature retransmit
      		 *  timeouts, then save some info here.
      		 */ 
    + 		/* begin: ali munir */
    + 		//dctcp_alpha_update_seq = tno; /* should be t_seqno_ */
    + 		dctcp_alpha_update_seq = t_seqno_;
    + 		dctcp_maxseq = dctcp_alpha_update_seq;
    + 
    + 		/* end: ali munir */
    + 
      		dupacks_ = 0;
      		fastrecov_ = FALSE;
      		timeout_ = TRUE;
    ***************
    *** 419,424 ****
    --- 453,507 ----
      		frto_ = 0;
      }
      
    + 
    + /*
    +  * Update dctcp alpha based on the ecn bit in the received packet.
    +  * This procedure is called only when dctcp_ is 1.
    +  */
    + void Sack1TcpAgent::update_dctcp_alpha(Packet *pkt)
    + {
    + 	int ecnbit = hdr_flags::access(pkt)->ecnecho();
    + 	int ackno = hdr_tcp::access(pkt)->ackno();
    + 	int seqno = hdr_tcp::access(pkt)->seqno();
    + 	int acked_bytes = seqno - highest_ack_; 
    + 
    + 	if(debug_dctcp)
    + 		printf ("timeout. highest_ack: %i seqno: %i fid: %i seqnum: %i
    ", 
    + 			(int)highest_ack_, (int)t_seqno_, fid_, seqno);
    + 
    + 	if (acked_bytes <= 0) 
    + //		acked_bytes = size_;	/* it should be one */
    + 		acked_bytes = 1;	/* it should be one */
    + 	dctcp_total += acked_bytes;
    + 	if (ecnbit) {
    + 		dctcp_marked += acked_bytes;
    + 	}
    + 
    + 	if(debug_dctcp)
    + 		fprintf(stdout,"DCTCP update_alpha 1: (ackno=%i), (dctcp_alpha_update=%f), (dctcp_maxseq=%f), (acked_bytes=%d)
    ", (int)ackno, (double)dctcp_alpha_update_seq, (double)dctcp_maxseq, acked_bytes);
    + 	/* Check for barrier indicating its time to recalculate alpha.
    + 	 * This code basically updated alpha roughly once per RTT.
    + 	 */
    + 	if (seqno > dctcp_alpha_update_seq) {
    + 		double temp_alpha;
    + 		dctcp_alpha_update_seq = dctcp_maxseq;
    + 		if (dctcp_total > 0) 
    + 			temp_alpha = ((double) dctcp_marked) / dctcp_total;
    + 		else 
    + 			temp_alpha = 0.0;
    + 		
    + //		temp_alpha = ((double) dctcp_marked) / 35.0;
    + 		dctcp_alpha_ = (1 - dctcp_g_) * dctcp_alpha_ + dctcp_g_ * temp_alpha;
    + 		dctcp_marked = 0;
    + 		dctcp_total = 0;
    + 	}
    + 
    + 	if(debug_dctcp)
    + 		fprintf(stdout,"DCTCP update_alpha: (dctcpseq=%d), (marked=%d), (total=%d), (alpha=%f) at time= %f
    ", dctcp_maxseq, dctcp_marked, dctcp_total, (double)dctcp_alpha_, (double)Scheduler::instance().clock());
    + }
    + 
    + 
    + 
      void Sack1TcpAgent::send_much(int force, int reason, int maxburst)
      {
      	register int found, npacket = 0;
    Only in ns-2.35/tcp: tcp-sack1.cc~
  • 相关阅读:
    IllegalStateException
    TimeUnit简析
    Cron表达式
    任务调度之Timer与TimerTask配合
    Executor简析
    this逃逸
    SQL、SQL Server、MySQL与Oracle
    数据库与实例
    vw 、vh、vmin 、vmax
    逻辑(内存)分页与物理分页
  • 原文地址:https://www.cnblogs.com/forcheryl/p/5363788.html
Copyright © 2020-2023  润新知