Changeset 4728

Show
Ignore:
Timestamp:
03/26/10 17:03:45 (4 years ago)
Author:
soohyunc
Message:

o Packet/AckVec re-ordering

when the sender received a deprecated ack (out of 3 dupack range), then do
nothing but trigger send packets out to keep the Jacob's packet conservative
rule.

when the sender received a re-ordered ack, then do nothing but trigger send
packets out as the above.

o trim TfwcSndr? and Transmitter

only need to pass ts_off_ once at the very beginning.

Location:
vic/branches/cc
Files:
4 modified

Legend:

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

    r4721 r4728  
    134134} 
    135135 
    136 void TfwcSndr::tfwc_sndr_send(int seqno, double now, double offset) { 
     136void TfwcSndr::tfwc_sndr_send(int seqno, double now) { 
     137        if(seqno_ == 0) 
     138        ts_off_ = tx_ts_offset(); 
    137139 
    138140        // parse seqno and mark timestamp for this data packet 
    139141        seqno_  = seqno; 
    140142        now_    = now; 
    141         ts_off_ = offset; 
    142143 
    143144        // timestamp vector for loss history update 
     
    207208                // this ack is deprecated message (e.g., too old). 
    208209                if(jacked_ < aoa_) { 
    209                   debug_msg("warning: this ack(%d) is older than AoA(%d)!\n",jacked_,aoa_); 
     210                  debug_msg("warning: this ack(%d) is older than AoA(%d)!\n", jacked_,aoa_); 
     211                  // trigger packets out to keep Jacob's packet conservation rule 
     212                  cc_tfwc_output(); 
    210213                  return; 
    211214                } 
     
    214217                  debug_msg("warning: this ack(%d) itself is out-of-order!\n",jacked_); 
    215218                  outofack = true; 
    216                   // cwnd process 
    217                   if(is_tfwc_on_) control(); 
    218                   else cwnd_++; 
    219                   // update RTT using previously sampled RTT 
    220                   update_rtt(tao_); 
     219                  // trigger packets out to keep Jacob's packet conservation rule 
     220                  cc_tfwc_output(); 
    221221                  return; 
    222222                } 
    223                 // packet is out-of-order 
     223                // packet is out-of-order, so adjust ackvec re-construction 
    224224                else { 
    225225                  debug_msg("warning: packet reordering occurred!\n"); 
     
    286286        aoa_ = ackofack();  
    287287 
     288        if(!reorder) { 
    288289        // sampled RTT 
    289         if(!reorder) 
    290290        tao_ = so_recv_ - tsvec_[jacked_%TSZ]; 
    291291        // update RTT with the sampled RTT 
    292292        update_rtt(tao_); 
     293        } 
    293294 
    294295        // is TFWC being driven by timeout mechanism? 
     
    335336 
    336337void TfwcSndr::reset_var() { 
     338        // init vars------------* 
    337339        num_missing_ = 0; 
     340        //----------------------* 
    338341 
    339342        // store jack'ed 
  • vic/branches/cc/cc/tfwc_sndr.h

    r4721 r4728  
    8080 
    8181        virtual void cc_tfwc_output() = 0; 
     82        virtual double tx_ts_offset() = 0; 
    8283 
    8384        // parse seqno and timestamp 
    84         void tfwc_sndr_send(int, double, double); 
     85        void tfwc_sndr_send(int, double); 
    8586 
    8687        // main reception path (XR packet) 
  • vic/branches/cc/rtp/transmitter.cpp

    r4683 r4728  
    328328        if (ntohs(rh->rh_seqno) <= magic + jack) { 
    329329                // record seqno and timestamp at TfwcSndr side 
    330                 tfwc_sndr_send(ntohs(rh->rh_seqno),  
    331                                 tx_now()-tx_now_offset_, 
    332                                 tx_now_offset_); 
    333  
     330                tfwc_sndr_send(ntohs(rh->rh_seqno), tx_now()-tx_now_offset_); 
    334331                // move head pointer 
    335332                head_ = pb->next; 
    336  
    337333                // call Transmitter::output_data_only(pb) 
    338334                output_data_only(pb); 
     
    382378        while (ntohs(rh->rh_seqno) <= magic + jack) { 
    383379                // record seqno and timestamp at TfwcSndr side 
    384                 tfwc_sndr_send(ntohs(rh->rh_seqno),  
    385                                 tx_now()-tx_now_offset_, 
    386                                 tx_now_offset_); 
    387  
     380                tfwc_sndr_send(ntohs(rh->rh_seqno), tx_now()-tx_now_offset_); 
    388381                // move head pointer 
    389382                head_ = pb->next; 
    390  
    391383                // call Transmitter::output(pb) 
    392384                output(pb); 
  • vic/branches/cc/rtp/transmitter.h

    r4683 r4728  
    108108        } 
    109109        double tx_now_offset_; 
     110        virtual inline double tx_ts_offset() { return (tx_now_offset_); } 
    110111 
    111112        // Tx pktbuf size