Changeset 4793

Show
Ignore:
Timestamp:
05/06/10 14:11:02 (4 years ago)
Author:
soohyunc
Message:

TfwcSndr? and TfwcRcvr? were the base class for Transmitter class, making
Transmitter and SessionManager? being a derived class. However, this wasn't quite
scalable as we have more CC mechanisms.

So, what we did is to de-couple TfwcSndr? and TfwcRcvr? from Transmitter. Instead,
we created an instance for TfwcSndr? and TfwcRcvr? in Transmitter.

This change is about de-coupling TfwcSndr/TfwcRcvr? from
Transmitter/SessionManager but created class instances.

Location:
vic/branches/cc
Files:
7 modified

Legend:

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

    r4714 r4793  
    4343#include "tfwc_rcvr.h" 
    4444 
     45// TfwcRcvr instance 
     46TfwcRcvr TfwcRcvr::instance_; 
     47 
    4548TfwcRcvr::TfwcRcvr() : 
    4649        ackofack_(0), 
     
    5861 
    5962// retrive ackofack from RTCP control channel 
    60 void TfwcRcvr::tfwc_rcvr_recv_aoa(u_int16_t type, u_int16_t *chunk) 
     63void TfwcRcvr::recv_aoa(u_int16_t type, u_int16_t *chunk) 
    6164{ 
    6265        int num_chunks = 1; 
     
    8487 
    8588// retrieve data packet sequence number from RTP data channel 
    86 void TfwcRcvr::tfwc_rcvr_recv_seqno(u_int16_t seqno) 
     89void TfwcRcvr::recv_seqno(u_int16_t seqno) 
    8790{ 
    8891        // out-of-order packet reception 
  • vic/branches/cc/cc/tfwc_rcvr.h

    r4714 r4793  
    4242public: 
    4343        TfwcRcvr(); 
    44         void tfwc_rcvr_recv_aoa(u_int16_t type, u_int16_t *chunk); 
    45         void tfwc_rcvr_recv_seqno(u_int16_t seqno); 
     44        void recv_aoa(u_int16_t type, u_int16_t *chunk); 
     45        void recv_seqno(u_int16_t seqno); 
     46        // AckVec clone 
     47        inline u_int16_t getvec(int i) { return tfwcAV[i]; } 
     48        // ts echo 
     49        inline u_int32_t ts_echo() { return ts_echo_; } 
     50        // AckVec begin seqno 
     51        inline u_int16_t begins() { return begins_; } 
     52        // AckVec end seqno plus one 
     53        inline u_int16_t ends() { return ends_; } 
     54        // number of AckVec array 
     55        inline u_int16_t numvec() { return numVec_; } 
     56 
     57        // TfwcRcvr instance 
     58        static inline TfwcRcvr& instance() { return instance_; } 
    4659 
    4760protected: 
    48         // AckVec clone 
    49         inline u_int16_t tfwc_rcvr_getvec(int i) { return tfwcAV[i]; } 
    50         // ts echo 
    51         inline u_int32_t tfwc_rcvr_ts_echo() { return ts_echo_; } 
    5261 
    53         // AckVec begin seqno 
    54         inline u_int16_t tfwc_rcvr_begins() { return begins_; } 
    55         // AckVec end seqno plus one 
    56         inline u_int16_t tfwc_rcvr_ends() { return ends_; } 
    57         // number of AckVec array 
    58         inline u_int16_t tfwc_rcvr_numvec() { return numVec_; } 
     62        static TfwcRcvr instance_; 
    5963 
    6064        /* 
  • vic/branches/cc/cc/tfwc_sndr.cpp

    r4789 r4793  
    5656} 
    5757 
     58// TfwcSndr instance 
     59TfwcSndr TfwcSndr::instance_; 
     60 
    5861/*  
    5962 * TFWC sender definition 
     
    153156} 
    154157 
    155 void TfwcSndr::tfwc_sndr_send(pktbuf* pb, double now) { 
     158void TfwcSndr::send(pktbuf* pb, double now) { 
    156159        // the very first data packet 
    157160        if(seqno_ == 0) 
     
    200203 * main TFWC reception path 
    201204 */ 
    202 void TfwcSndr::tfwc_sndr_recv(u_int16_t type, u_int16_t begin, u_int16_t end, 
     205void TfwcSndr::recv(u_int16_t type, u_int16_t begin, u_int16_t end, 
    203206                u_int16_t *chunk, double so_rtime, bool recv_by_ch, pktbuf* pb) 
    204207{ 
  • vic/branches/cc/cc/tfwc_sndr.h

    r4789 r4793  
    8181 
    8282        // virtual functions 
    83         virtual void cc_tfwc_output(bool recv_by_ch=0) = 0; 
    84         virtual void cc_tfwc_output(pktbuf*) = 0; 
    85         virtual void cc_tfwc_trigger(pktbuf* pb=0) = 0; 
    86         virtual double tx_ts_offset() = 0; 
    87         virtual int tx_buf_size() = 0; 
     83        virtual void cc_tfwc_output(bool recv_by_ch=0) {}; 
     84        virtual void cc_tfwc_output(pktbuf*) {}; 
     85        virtual void cc_tfwc_trigger(pktbuf* pb=0) {}; 
     86        virtual double tx_ts_offset() {}; 
     87        virtual int tx_buf_size() {}; 
    8888 
    8989        // parse seqno and timestamp 
    90         void tfwc_sndr_send(pktbuf*, double); 
     90        void send(pktbuf*, double); 
    9191 
    9292        // main reception path (XR packet) 
    93         void tfwc_sndr_recv(u_int16_t type, u_int16_t begin, u_int16_t end, 
     93        void recv(u_int16_t type, u_int16_t begin, u_int16_t end, 
    9494        u_int16_t *chunk, double so_rtime, bool recv_by_ch, pktbuf* pb); 
    9595 
    9696        // return ackofack 
    97         inline u_int16_t tfwc_sndr_get_aoa() { return aoa_; } 
     97        inline u_int16_t get_aoa() { return aoa_; } 
    9898 
    9999        // just acked seqno in packets and in bytes 
    100         inline u_int16_t tfwc_sndr_jacked() { return jacked_; } 
    101         inline int tfwc_sndr_bjacked() { return record_[bjacked_%PSR]; } 
     100        inline u_int16_t jacked() { return jacked_; } 
     101        inline int b_jacked() { return record_[bjacked_%PSR]; } 
    102102 
    103103        // tfwc controlled cwnd value in packets and in bytes 
    104         inline u_int32_t tfwc_magic() { return cwnd_; } 
    105         inline int tfwc_bmagic() { return bcwnd_; } 
     104        inline u_int32_t magic() { return cwnd_; } 
     105        inline int b_magic() { return bcwnd_; } 
    106106 
    107107        // set timestamp in double type (TfwcSndr) 
     
    124124        void expire(int option); 
    125125 
     126        // TfwcSndr instance 
     127        static inline TfwcSndr& instance() { return instance_; } 
     128 
    126129protected: 
     130 
     131        static TfwcSndr instance_; 
     132 
    127133        // generate sequence numbers 
    128134        void gen_seqvec(u_int16_t *v, int n); 
     
    164170        // retransmission timer 
    165171        TfwcRtxTimer rtx_timer_; 
     172 
    166173        void set_rtx_timer(); 
    167174        void reset_rtx_timer(int backoff); 
  • vic/branches/cc/rtp/session.cpp

    r4789 r4793  
    464464        print_rtp_seqno(pb); 
    465465        // record seqno and timestamp at TfwcSndr side 
    466         tfwc_sndr_send(pb, tx_get_now()); 
     466        tfwc_sndr_.send(pb, tx_get_now()); 
    467467 
    468468        // Using loop_layer for now to restrict transmission as well 
     
    494494        print_rtp_seqno(pb); 
    495495        // record seqno and timestamp at TfwcSndr side 
    496         tfwc_sndr_send(pb, tx_get_now()); 
     496        tfwc_sndr_.send(pb, tx_get_now()); 
    497497 
    498498        if (pb->layer < loop_layer_) { 
     
    693693                                // this block is used for giving ackofack 
    694694                                // set AckofAck 
    695                                 chunks[num_chunks-1] = tfwc_sndr_get_aoa(); 
     695                                chunks[num_chunks-1] = tfwc_sndr_.get_aoa(); 
    696696 
    697697                                // send_xreport (sender's report) 
     
    716716                        case WBCC: 
    717717                                // get the number of required chunks for giving AckVec 
    718                                 num_chunks = tfwc_rcvr_numvec(); 
     718                                num_chunks = tfwc_rcvr_.numvec(); 
    719719                                chunks = (u_int16_t *)  
    720720                                        malloc(num_chunks * sizeof(u_int16_t)); 
     
    723723                                //fprintf(stderr, "\t   printing chunks: "); 
    724724                                for (int i = 0; i < num_chunks; i++) { 
    725                                         chunks[i] = tfwc_rcvr_getvec(i); 
     725                                        chunks[i] = tfwc_rcvr_.getvec(i); 
    726726                                //      fprintf(stderr, "[%d:%x] ", i, chunks[i]); 
    727727                                }  
     
    734734                        // send_xreport (receiver's report) 
    735735                        // - sending AckVec 
    736                         send_xreport(ch, XR_BT_1, 0, 0, tfwc_rcvr_begins(),  
    737                                         tfwc_rcvr_ends(), chunks, num_chunks, 0); 
     736                        send_xreport(ch, XR_BT_1, 0, 0, tfwc_rcvr_.begins(),  
     737                                        tfwc_rcvr_.ends(), chunks, num_chunks, 0); 
    738738                } 
    739739                else if (bt == XR_BT_3) { 
     
    10531053                case WBCC: 
    10541054                        // pass seqno to tfwc receiver to build up AckVec 
    1055                         tfwc_rcvr_recv_seqno(seqno); 
     1055                        tfwc_rcvr_.recv_seqno(seqno); 
    10561056                        fprintf(stderr, "\n\treceived seqno: %d\n\n", seqno); 
    10571057 
     
    13501350 
    13511351                                // TFWC sender (getting AckVec) 
    1352                                 tfwc_sndr_recv(xr->BT, begin, end, chunk, recv_ts_, recv_by_ch, pb); 
     1352                                tfwc_sndr_.recv(xr->BT, begin, end, chunk, recv_ts_, recv_by_ch, pb); 
    13531353 
    13541354                                // we need to call Transmitter::output(pb) to make Ack driven 
     
    13691369 
    13701370                                // TFWC receiver (getting ackofack) 
    1371                                 tfwc_rcvr_recv_aoa(xr->BT, chunk); 
     1371                                tfwc_rcvr_.recv_aoa(xr->BT, chunk); 
    13721372                                break; 
    13731373 
  • vic/branches/cc/rtp/transmitter.cpp

    r4792 r4793  
    105105        // CC related... 
    106106        epc_ = 0;       // experimental packet counter 
     107        tfwc_sndr_ = TfwcSndr::instance(); 
     108        tfwc_rcvr_ = TfwcRcvr::instance(); 
    107109} 
    108110 
     
    325327        { 
    326328                int len = 0; 
    327                 if(pb->len < tfwc_bmagic() - len) { 
     329                if(pb->len < tfwc_sndr_.b_magic() - len) { 
    328330                        len += pb->len; 
    329331                        // move head pointer 
     
    339341                rtphdr* rh = (rtphdr *) pb->data; 
    340342 
    341                 if (ntohs(rh->rh_seqno) <= tfwc_magic() + tfwc_sndr_jacked()) { 
    342                         //debug_msg("cwnd: %d\n", tfwc_magic()); 
    343                         //debug_msg("jack: %d\n", tfwc_sndr_jacked()); 
     343                if (ntohs(rh->rh_seqno) <= tfwc_sndr_.magic() + tfwc_sndr_.jacked()) { 
     344                        //debug_msg("cwnd: %d\n", tfwc_sndr_.magic()); 
     345                        //debug_msg("jack: %d\n", tfwc_sndr_.jacked()); 
    344346                         
    345347                        // move head pointer 
     
    377379        { 
    378380                int len = 0; 
    379                 while(pb->len < tfwc_bmagic() - len) { 
     381                while(pb->len < tfwc_sndr_.b_magic() - len) { 
    380382                        len += pb->len; 
    381383                        // move head pointer 
     
    397399 
    398400                // while packet seqno is within "cwnd + jack", send that packet 
    399                 while (ntohs(rh->rh_seqno) <= tfwc_magic() + tfwc_sndr_jacked()) { 
    400                         //debug_msg("cwnd: %d\n", tfwc_magic()); 
    401                         //debug_msg("jack: %d\n", tfwc_sndr_jacked()); 
     401                while (ntohs(rh->rh_seqno) <= tfwc_sndr_.magic() + tfwc_sndr_.jacked()) { 
     402                        //debug_msg("cwnd: %d\n", tfwc_sndr_.magic()); 
     403                        //debug_msg("jack: %d\n", tfwc_sndr_.jacked()); 
    402404 
    403405                        // move head pointer 
  • vic/branches/cc/rtp/transmitter.h

    r4789 r4793  
    6161#define BYM             2       // BYtes Mode 
    6262 
     63class TfwcSndr; 
     64class TfwcRcvr; 
     65 
    6366/* 
    6467 * The base object for performing the outbound path of 
    6568 * the application level protocol. 
    6669 */ 
    67 class Transmitter : public TclObject, public Timer,  
    68         public TfwcSndr, public TfwcRcvr { 
     70class Transmitter : public TclObject, public Timer { 
    6971    public: 
    7072        Transmitter(); 
     
    118120        // Tx pktbuf size 
    119121        virtual int tx_buf_size(); 
     122 
     123        TfwcSndr tfwc_sndr_; 
     124        TfwcRcvr tfwc_rcvr_; 
    120125 
    121126protected: