[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