[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