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

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Wed Jul 22 15:41:59 BST 2009


Author: soohyunc
Date: Wed Jul 22 15:41:58 2009
New Revision: 4488

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

Log:
TFWC sender/receiver re-written.

o  re-written TFWC sender's reception method
o  re-written AckVec construction mechanism
   (currently only one chunk available meaning that AckVec can only contain 16
    packet sequence numbers.)



Modified: vic/branches/cc/cc/tfwc_rcvr.cpp
==============================================================================
--- vic/branches/cc/cc/tfwc_rcvr.cpp	(original)
+++ vic/branches/cc/cc/tfwc_rcvr.cpp	Wed Jul 22 15:41:58 2009
@@ -55,17 +55,14 @@
 	currNumVec_(0),
 	prevNumVec_(0)
 {
-	tfwcAV = (u_int16_t *) malloc(17);
-	bzero(tfwcAV,17);
+	// declare/initialize tfwcAV
+	tfwcAV = (u_int16_t *) malloc(AVSZ);
+	bzero(tfwcAV, AVSZ);
 }
 
 void TfwcRcvr::tfwc_rcvr_recv(u_int16_t type, u_int16_t seqno, 
 				u_int16_t *chunk, int num_chunks) 
 {
-	// retrived ackofack
-	//u_int16_t ackofack = chunk[num_chunks-1] >> 16;
-	u_int16_t ackofack = chunk[0];
-
 	// variables
 	int numLoss		= 0;	// number of packet loss count
 	int diffNumElm	= 0;	// difference of AckVec elements (curr vs. prev)
@@ -74,9 +71,13 @@
 
 	// parse the received seqno and ackofack
 	if (type == XR_BT_1) {
-		//debug_msg("received seqno:  %d\n", seqno);
+		// received data packet seqno
 		currseq_ = seqno;
-		ackofack_ = ackofack;
+		// XXX received ackofack (currently only one chunk)
+		ackofack_ = ntohs(chunk[num_chunks-1]);
+
+		printf("    [%s +%d] seqno: %d, ackofack: %d\n", 
+				__FILE__,__LINE__,currseq_, ackofack_);
 
 		// number of required AckVec element
 		currNumElm_	= currseq_ - ackofack_;
@@ -123,7 +124,7 @@
 					SET_BIT_VEC(tfwcAV[prevNumVec_ + addiNumVec - 1], 0);
 				}
 			}
-			// current num of AckVeck array can cope with the elements
+			// current AckVeck array can cope with the elements
 			else {
 				// set next bit 0 into AckVec (# of packet loss)
 				for (int i = 0; i < numLoss; i++) 
@@ -135,7 +136,7 @@
 		}
 
 		// print ackvec
-		//print_ackvec(ackofack_, currseq_, tfwcAV);
+		//print_ackvec(tfwcAV);
 
 		// start seqno that this AckVec is reporting
 		if (ackofack_ != 0)
@@ -152,21 +153,18 @@
 		prevNumVec_ = currNumVec_;
 	}
 	else if (type == XR_BT_2) {
+		// set timestamp echo
 		ts_echo_ = chunk[num_chunks-1];
 	}
 }
 
-void TfwcRcvr::print_ackvec(u_int16_t begin, u_int16_t end, 
-		u_int16_t bitvec) {
-
-	int elm[64];
-	int cnt = end - begin;
-
-	printf("\tAckVec Built: ");
-	for (int i = 0; i < cnt; i++) {
-		if (CHECK_BIT_AT(bitvec, i+1))
-			elm[i] = (begin + 1) + i;
-		printf(" %d", elm[i]);
-	}
-	printf(" \n");
+void TfwcRcvr::print_ackvec(u_int16_t *ackv) {
+	printf("\t>> AckVec: ");
+	for (int i = currNumVec_; i > 0; i--) {
+		for (int j = 1; i <= currNumElm_; j++) {
+			if (CHECK_BIT_AT(ackv[currNumVec_-i], j)) {
+				printf("%d ", (ackofack_ + j));
+			}
+		}
+	} printf("...... %s +%d\n",__FILE__,__LINE__);
 }

Modified: vic/branches/cc/cc/tfwc_rcvr.h
==============================================================================
--- vic/branches/cc/cc/tfwc_rcvr.h	(original)
+++ vic/branches/cc/cc/tfwc_rcvr.h	Wed Jul 22 15:41:58 2009
@@ -38,6 +38,8 @@
 
 #include "tfwc_sndr.h"
 
+#define	AVSZ		15		// tfwcAV size
+
 class TfwcRcvr {
 public:
 	TfwcRcvr();
@@ -81,8 +83,7 @@
 	}
 
 	// print built AckVec
-	void print_ackvec(u_int16_t begin, u_int16_t end, 
-			u_int16_t bitvec);
+	void print_ackvec(u_int16_t *ackv);
 
 	/*
 	 * Variables (private)

Modified: vic/branches/cc/cc/tfwc_sndr.cpp
==============================================================================
--- vic/branches/cc/cc/tfwc_sndr.cpp	(original)
+++ vic/branches/cc/cc/tfwc_sndr.cpp	Wed Jul 22 15:41:58 2009
@@ -63,11 +63,12 @@
 	ends_(0)
 {
 	// allocate tsvec_ in memory
-	tsvec_ = (double *)malloc(sizeof(double)* TSZ);
+	tsvec_ = (double *)malloc(sizeof(double) * TSZ);
 	// allocate seqvec in memory
-	seqvec_ = (u_int32_t *)malloc(sizeof(u_int32_t)* SSZ );
+	seqvec_ = (u_int32_t *)malloc(sizeof(u_int32_t) * SSZ);
 
 	// for simulating TCP's 3 dupack rule
+	// (allowing packet re-ordering issue)
 	for (int i = 0; i < DUPACKS; i++)
 		mvec_[i] = 0;
 
@@ -102,9 +103,9 @@
 	rtphdr* rh =(rtphdr*) pb->data;
 
 	// get seqno and mark timestamp for this data packet
-	seqno_ = ntohs(rh->rh_seqno);
-	now_ = tfwc_sndr_now();		// double type (reference time)
-	t_now_ = tfwc_sndr_t_now();	// u_int32_t type (reference time)
+	seqno_	= ntohs(rh->rh_seqno);
+	now_	= tfwc_sndr_now();		// double type (reference time)
+	t_now_	= tfwc_sndr_t_now();	// u_int32_t type (reference time)
 
 	// timestamp vector for loss history update
 	tsvec_[seqno_%TSZ - 1] = now_;
@@ -134,32 +135,23 @@
 		jacked_ = ends_ - 1;
 
 		// declared AckVec
-		/*ackv_ = (u_int16_t *) malloc (sizeof(u_int16_t) * num_chunks);
+		ackv_ = (u_int16_t *) malloc (sizeof(u_int16_t) * num_chunks);
 
 		// clone AckVec from Vic application
-		for (int i = 1; i <= num_chunks; i++) {
-			bool odd = true;
-			int j = i/2 + 1;
-
-			if (i%2 == 0) {
-				odd = false;
-				j -= 1;
-			}
-
-			// clone AckVec array from the received chunk
-			if (odd) {
-				ackv_[i] = chunk[j] >> 16;	
-			} else {
-				ackv_[i] = chunk[j] & 0x0000FFFF;
-			}
-		}*/
+		for (int i = 0; i < num_chunks; i++) {
+			ackv_[i] = ntohs(chunk[i]);	
+		}
 
-		// generate seqno vec
-		gen_seqvec(begins_, ends_, jacked_, chunk[0]);
+		// XXX generate seqno vec
+		printf("    [%s +%d] begins:%d, ends:%d, jacked:%d\n", 
+				__FILE__, __LINE__, begins_, ends_, jacked_);
+		gen_seqvec(begins_, ends_, jacked_, ackv_[0]);
+		free(ackv_);
 		print_seqvec(begins_, ends_);
 
 		// generate margin vector
 		marginvec(jacked_);
+		print_mvec();
 
 		// detect loss
 		// 	@begin: aoa_
@@ -183,7 +175,7 @@
 		}
 
 		// set ackofack (real number)
-		aoa_ = ackofack();
+		aoa_ = ackofack(); 
 
 		// update RTT with the sampled RTT
 		tao_ = tfwc_sndr_now() - tsvec_[seqno_%TSZ];
@@ -194,7 +186,7 @@
 		ntep_++;		// number of ts echo packet received
 
 		ts_echo_ = chunk[num_chunks - 1];
-		debug_msg(" ts echo:	%d\n", ts_echo_);
+		printf("    [%s +%d] ts echo:	%f\n", __FILE__,__LINE__, ts_echo_);
 
 		tao_ = 1e-6 * (double)(tfwc_sndr_now() - ts_echo_);
 
@@ -217,12 +209,11 @@
 	bool is_there = false;
 
 	// generate tempvec elements
-	printf("\tcomparison numbers: (");
+	printf("\tcomparing numbers: (");
 	for (int i = 0; i < numvec; i++) {
 		tempvec[i] = (begin + 1) + i;
 		printf(" %d", tempvec[i]);
-	}
-	printf(" )\n");
+	} printf(" )\n");
 
 	// number of seqvec element
 	int numseq = ends_ - begins_;

Modified: vic/branches/cc/cc/tfwc_sndr.h
==============================================================================
--- vic/branches/cc/cc/tfwc_sndr.h	(original)
+++ vic/branches/cc/cc/tfwc_sndr.h	Wed Jul 22 15:41:58 2009
@@ -138,7 +138,7 @@
 	}
 	// ackofack
 	inline u_int16_t ackofack () {
-		return ((mvec_[DUPACKS - 1] - 1) < 0) ?
+		return ((mvec_[DUPACKS - 1] - 1) <= 0) ?
 			0 : (u_int16_t) (mvec_[DUPACKS - 1] - 1);
 	}
 	// print mvec



More information about the Sumover-dev mailing list