[Sumover-dev] [svn commit] r4707 - vic/branches/cc/cc

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Mon Mar 22 14:19:30 GMT 2010


Author: soohyunc
Date: Mon Mar 22 14:19:30 2010
New Revision: 4707

Modified:
   vic/branches/cc/cc/tfwc_sndr.cpp
   vic/branches/cc/cc/tfwc_sndr.h

Log:
-- added a mechanism to detect re-ordered Ack delivery

we have observed that not only packet but also Ack itself can be re-ordered.
Revision 4702 deals with the packet re-ordering problem whereas this commit
deals with the Ack re-ordering.

i.e., packet was delivered in order, but Ack was delivered out-of-order.

when it happens, we only update cwnd and RTT, and nothing else.



Modified: vic/branches/cc/cc/tfwc_sndr.cpp
==============================================================================
--- vic/branches/cc/cc/tfwc_sndr.cpp	(original)
+++ vic/branches/cc/cc/tfwc_sndr.cpp	Mon Mar 22 14:19:30 2010
@@ -172,6 +172,8 @@
 	so_recv_ = so_rtime;
 	// packet reordering?
 	bool reorder = false;
+	// reordered ack delivery?
+	bool outofack = false;
 
 	// get start/end seqno that this XR chunk reports
 	begins_ = begin;	// lowest packet seqno
@@ -181,6 +183,10 @@
 	// i.e.,) head seqno(= highest seqno) of this ackvec
 	jacked_ = ends_ - 1;
 
+	//fprintf(stderr, 
+	//"    [%s +%d] begins: %d ends: %d jacked: %d\n", 
+	//	__FILE__, __LINE__, begins_, ends_, jacked_);
+
 	// get the number of AckVec chunks
 	//   use seqno space to work out the num chunks
 	//   (add one to num unless exactly divisible by BITLEN
@@ -195,29 +201,40 @@
 	// clone AckVec from Vic
 	clone_ackv(chunk, num_vec_);
 
-	// packet reorder detection
+	// detect packet reordering and reordered ack delivery
 	int shift = 0;
 	if (jacked_ < __jacked_) {
-		debug_msg("warning: packet reordering occurred!\n");
+		// this ack is deprecated message (e.g., too old).
 		if(jacked_ < aoa_) {
-			debug_msg("warning: this ack is older than AoA!\n");
-			return;
+		  debug_msg("warning: this ack is older than AoA!\n");
+		  return;
+		}
+		// this ack is delivered out-of-order
+		else if(begins_ <= aoa_) {
+		  debug_msg("warning: this ack itself is out-of-order!\n");
+		  outofack = true;
+		  // cwnd process
+		  if(is_tfwc_on_) control();
+		  else cwnd_++;
+		  // update RTT using previously sampled RTT
+		  update_rtt(tao_);
+		  return;
+		}
+		// packet is out-of-order
+		else {
+		  debug_msg("warning: packet reordering occurred!\n");
+		  shift = __jacked_ - jacked_;
+		  // restore the previous state variables
+		  replace(__begins_, __jacked_);
+		  num_elm_ = get_numelm(begins_, jacked_);
+		  num_vec_ = get_numvec(num_elm_);
+		  reorder = true;
 		}
-		shift = __jacked_ - jacked_;
-		// restore the previous state variables
-		replace(__begins_, __jacked_);
-		num_elm_ = get_numelm(begins_, jacked_);
-		num_vec_ = get_numvec(num_elm_);
-		reorder = true;
 	}
 	else {
 		free(pvec_);
 	}
 
-	//fprintf(stderr, 
-	//"    [%s +%d] begins: %d ends: %d jacked: %d\n", 
-	//		__FILE__, __LINE__, begins_, ends_, jacked_);
-
 	// if packet reordering occurred, insert re-ordered seqno
 	// into the received ackvec using previously received ackvec
 	if(reorder) {
@@ -227,6 +244,7 @@
 	}
 
 	// generate seqno vector
+	//print_vec(ackv_, num_vec_);
 	gen_seqvec(ackv_, num_vec_);
 
 	// generate margin vector
@@ -264,8 +282,6 @@
 	tao_ = so_recv_ - tsvec_[jacked_%TSZ];
 	// update RTT with the sampled RTT
 	update_rtt(tao_);
-	fprintf(stderr, "\t<< now_: %f tsvec_[%d]: %f rtt: %f srtt: %f\n", 
-		so_recv_, jacked_%TSZ, tsvec_[jacked_%TSZ], tao_, srtt_);
 
 	// is TFWC being driven by timeout mechanism?
 	if(to_driven_ && is_tfwc_on_)
@@ -456,6 +472,9 @@
 	// 'rto' could be rounded by 'maxrto'
 	if (rto_ > maxrto_)
 		rto_ = maxrto_;
+
+	fprintf(stderr, "\t<< now_: %f tsvec_[%d]: %f rtt: %f srtt: %f\n", 
+		so_recv_, jacked_%TSZ, tsvec_[jacked_%TSZ], tao_, srtt_);
 }
 
 /*

Modified: vic/branches/cc/cc/tfwc_sndr.h
==============================================================================
--- vic/branches/cc/cc/tfwc_sndr.h	(original)
+++ vic/branches/cc/cc/tfwc_sndr.h	Mon Mar 22 14:19:30 2010
@@ -175,9 +175,9 @@
 		fprintf(stderr, " )\n");
 	}
 	// print vec
-	inline void print_vec(u_int16_t *vec, int numelm) {
+	inline void print_vec(u_int16_t *vec, int c) {
 		fprintf(stderr, "\t(");
-		for (int i = 0; i < numelm; i++)
+		for (int i = 0; i < c; i++)
 			fprintf(stderr, " %d", vec[i]);
 		fprintf(stderr, " )\n");
 	}



More information about the Sumover-dev mailing list