Changeset 4519

Show
Ignore:
Timestamp:
10/16/09 16:00:34 (5 years ago)
Author:
soohyunc
Message:

ackofack packet seqno is excluded when detecting packet loss (this is obvious).

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • vic/branches/cc/cc/tfwc_sndr.cpp

    r4518 r4519  
    183183 
    184184                // detect loss 
    185                 //      @begin: aoa_ 
     185                //      @begin: aoa_+1 
    186186                //      @end: mvec_[DUPACKS] - 1 
    187                 is_loss_ = detect_loss(mvec_[DUPACKS-1]-1, aoa_); 
     187                is_loss_ = detect_loss(mvec_[DUPACKS-1]-1, aoa_+1); 
    188188 
    189189                // TFWC is not turned on (i.e., no packet loss yet) 
     
    237237        // number of seqvec elements  
    238238        // (i.e., number of packets that this AckVec is representing) 
    239         int numElm = ends_ - begins_; 
     239        int num_elm = ends_ - begins_; 
    240240 
    241241        // number of AckVec chunks 
    242         int x = numElm%BITLEN; 
    243         int num_chunks = numElm/BITLEN + (x > 0); 
     242        int x = num_elm%BITLEN; 
     243        int num_chunks = num_elm/BITLEN + (x > 0); 
    244244 
    245245        int i, j, k = 0; 
    246         // start of seqvec 
    247         //int start = jacked_; 
    248         int start = begins_;    // lowest seqno 
     246 
     247        // start of seqvec (lowest seqno) 
     248        int start = begins_; 
    249249 
    250250        for (i = 0; i < num_chunks-1; i++) { 
     
    256256                } 
    257257        } 
     258 
    258259        int a = (x == 0) ? BITLEN : x; 
    259260        for (i = a; i > 0; i--) { 
     
    265266 
    266267        // therefore, the number of seqvec is: 
    267         int num_seqvec = numElm - num_loss_; 
     268        int num_seqvec = num_elm - num_loss_; 
    268269        // printing retrieved sequence numbers from received AckVec 
    269270        print_seqvec(num_seqvec); 
     
    276277bool TfwcSndr::detect_loss(int end, int begin) { 
    277278        bool ret;       // 'true' when there is a loss 
    278         bool gotIn = false; 
     279        bool is_there = false; 
    279280        int count = 0; // packet loss counter 
    280281 
    281282        // number of tempvec element when no loss 
    282         int numelm = (end - begin < 0) ? 0 : end - begin; 
    283         u_int32_t tempvec[numelm]; 
     283        int num_elm = ((end - begin  + 1) < 0) ? 0 : (end - begin + 1); 
     284        u_int32_t tempvec[num_elm]; 
    284285 
    285286        // generate tempvec elements 
    286287        printf("\tcomparing numbers: ("); 
    287         for (int i = 0; i < numelm; i++) { 
    288                 tempvec[i] = (begin + 1) + i; 
     288        for (int i = 0; i < num_elm; i++) { 
     289                tempvec[i] = begin + i; 
    289290                printf(" %d", tempvec[i]); 
    290291        } printf(" )\n"); 
    291292 
    292293        // number of seqvec element 
    293         int numseq = ends_ - begins_ - num_loss_; 
     294        int num_seqvec = num_elm - num_loss_; 
    294295 
    295296        // compare tempvec and seqvec 
    296         for (int i = 0; i < numelm; i++) { 
    297                 for (int j = numseq-1; j >= 0; j--) { 
     297        for (int i = 0; i < num_elm; i++) { 
     298                for (int j = num_seqvec-1; j >= 0; j--) { 
    298299                        if (tempvec[i] == seqvec_[j]) { 
    299                                 gotIn = true; 
     300                                is_there = true; 
    300301                                // we found it, so reset count 
    301302                                count = 0; break; 
    302303                        } else { 
    303                                 gotIn = false;  
     304                                is_there = false;  
    304305                                count++; 
    305306                        } 
     
    307308 
    308309                // record the very first lost packet seqno 
    309                 if(!gotIn) { 
     310                if(!is_there) { 
    310311                        if(!is_first_loss_seen_)  
    311312                                first_lost_pkt_ = tempvec[i]; 
     
    315316        // store tempvec elements for updating loss history 
    316317        first_elm_ = tempvec[0]; 
    317         last_elm_ = first_elm_ + (numelm - 1); 
     318        last_elm_ = first_elm_ + num_elm; 
    318319 
    319320        return ret = (count > 0) ? true : false;