xcpq.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* -*-  Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*-
  2.  *
  3.  * Copyright (C) 2004 by USC/ISI
  4.  *               2002 by Dina Katabi
  5.  *
  6.  * All rights reserved.
  7.  *
  8.  * Redistribution and use in source and binary forms are permitted
  9.  * provided that the above copyright notice and this paragraph are
  10.  * duplicated in all such forms and that any documentation, advertising
  11.  * materials, and other materials related to such distribution and use
  12.  * acknowledge that the software was developed by the University of
  13.  * Southern California, Information Sciences Institute.  The name of the
  14.  * University may not be used to endorse or promote products derived from
  15.  * this software without specific prior written permission.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  18.  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  19.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  20.  *
  21.  * @(#) $Header: /cvsroot/nsnam/ns-2/xcp/xcpq.h,v 1.12 2006/07/01 19:40:04 tom_henderson Exp $
  22.  */
  23. #ifndef NS_XCPQ_H
  24. #define NS_XCPQ_H
  25. #include "drop-tail.h"
  26. #include "packet.h"
  27. #include "xcp-end-sys.h"
  28. #define  INITIAL_Te_VALUE   0.05       // Was 0.3 Be conservative when 
  29.                                        // we don't kow the RTT
  30. #define TRACE  1                       // when 0, we don't race or write 
  31.                                        // var to disk
  32. class XCPWrapQ;
  33. class XCPQueue;
  34. class XCPTimer : public TimerHandler { 
  35. public:
  36. XCPTimer(XCPQueue *a, void (XCPQueue::*call_back)() ) 
  37. : a_(a), call_back_(call_back) {};
  38. protected:
  39. virtual void expire (Event *e);
  40. XCPQueue *a_; 
  41. void (XCPQueue::*call_back_)();
  42. }; 
  43. class XCPQueue : public DropTail {
  44. friend class XCPTimer;
  45. public:
  46. XCPQueue();
  47. void Tq_timeout ();  // timeout every propagation delay 
  48. void Te_timeout ();  // timeout every avg. rtt
  49. void everyRTT();     // timeout every highest rtt seen by rtr or some
  50.                      // preset rtt value
  51. void setupTimers();  // setup timers for xcp queue only
  52. void setEffectiveRtt(double rtt) ;
  53. void routerId(XCPWrapQ* queue, int i);
  54. int routerId(int id = -1); 
  55.   
  56. int limit(int len = 0);
  57. void setBW(double bw);
  58. void setChannel(Tcl_Channel queue_trace_file);
  59. double totalDrops() { return total_drops_; }
  60.   
  61.         // Overloaded functions
  62. void enque(Packet* pkt);
  63. Packet* deque();
  64. virtual void drop(Packet* p);
  65.   
  66. // tracing var
  67. void setNumMice(int mice) {num_mice_ = mice;}
  68. protected:
  69. // Utility Functions
  70. double max(double d1, double d2) { return (d1 > d2) ? d1 : d2; }
  71. double min(double d1, double d2) { return (d1 < d2) ? d1 : d2; }
  72.         int max(int i1, int i2) { return (i1 > i2) ? i1 : i2; }
  73. int min(int i1, int i2) { return (i1 < i2) ? i1 : i2; }
  74. double abs(double d) { return (d < 0) ? -d : d; }
  75. virtual void trace_var(char * var_name, double var);
  76.   
  77. // Estimation & Control Helpers
  78. void init_vars();
  79. // called in enque, but packet may be dropped; used for 
  80. // updating the estimation helping vars such as
  81. // counting the offered_load_, sum_rtt_by_cwnd_
  82. virtual void do_on_packet_arrival(Packet* pkt);
  83. // called in deque, before packet leaves
  84. // used for writing the feedback in the packet
  85. virtual void do_before_packet_departure(Packet* p); 
  86.   
  87. // ---- Variables --------
  88. unsigned int     routerId_;
  89. XCPWrapQ*        myQueue_;   //pointer to wrapper queue lying on top
  90. XCPTimer*        queue_timer_;
  91. XCPTimer*        estimation_control_timer_;
  92. XCPTimer*        rtt_timer_;
  93. double           link_capacity_bps_;
  94. static const double ALPHA_;
  95. static const double BETA_;
  96. static const double GAMMA_;
  97. static const double XCP_MAX_INTERVAL;
  98. static const double XCP_MIN_INTERVAL;
  99. double          Te_;       // control interval
  100. double          Tq_;    
  101. double          Tr_;
  102. double          avg_rtt_;       // average rtt of flows
  103. double          high_rtt_;      // highest rtt seen in flows
  104. double          effective_rtt_; // pre-set rtt value 
  105. double          Cp_;
  106. double          Cn_;
  107. double          residue_pos_fbk_;
  108. double          residue_neg_fbk_;
  109. double          queue_bytes_;   // our estimate of the fluid model queue
  110. double          input_traffic_bytes_;       // traffic in Te 
  111. double          sum_rtt_by_throughput_;
  112. double          sum_inv_throughput_;
  113. double          running_min_queue_bytes_;
  114. unsigned int    num_cc_packets_in_Te_;
  115.   
  116. double thruput_elep_;
  117. double thruput_mice_;
  118. double total_thruput_;
  119. int num_mice_;
  120. int min_queue_ci_;
  121. int max_queue_ci_;
  122. // drops
  123. int  drops_;
  124. double total_drops_ ;
  125.   
  126. // ----- For Tracing Vars --------------//
  127. Tcl_Channel  queue_trace_file_;
  128.   
  129. };
  130. #endif //NS_XCPQ_H