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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 2000-2002, by the Rector and Board of Visitors of the 
  3.  * University of Virginia.
  4.  * All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, 
  7.  * with or without modification, are permitted provided 
  8.  * that the following conditions are met:
  9.  *
  10.  * Redistributions of source code must retain the above 
  11.  * copyright notice, this list of conditions and the following 
  12.  * disclaimer. 
  13.  *
  14.  * Redistributions in binary form must reproduce the above 
  15.  * copyright notice, this list of conditions and the following 
  16.  * disclaimer in the documentation and/or other materials provided 
  17.  * with the distribution. 
  18.  *
  19.  * Neither the name of the University of Virginia nor the names 
  20.  * of its contributors may be used to endorse or promote products 
  21.  * derived from this software without specific prior written 
  22.  * permission. 
  23.  *
  24.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
  25.  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
  26.  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
  27.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
  28.  * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE 
  29.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 
  30.  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  31.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
  32.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
  33.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  34.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
  35.  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
  36.  * THE POSSIBILITY OF SUCH DAMAGE.
  37.  */
  38. /*
  39.  *                                                                     
  40.  * JoBS - ns-2 prototype implementation                                
  41.  *                                                                     
  42.  * Author: Nicolas Christin <nicolas@cs.virginia.edu>, 2000-2002       
  43.  *       
  44.  * JoBS algorithms originally devised and proposed by       
  45.  * Nicolas Christin and Jorg Liebeherr                                 
  46.  * Grateful acknowledgments to Tarek Abdelzaher for his help and       
  47.  * comments.                                                           
  48.  *                                                                     
  49.  * $Id: jobs.h,v 1.3 2006/12/17 15:22:42 mweigle Exp $
  50.  */
  51. #ifndef JOBS_H
  52. #define JOBS_H
  53. #include <stdlib.h>
  54. #include <string.h>
  55. #include <math.h>
  56. #include "queue.h"
  57. #include "template.h"
  58. #include "random.h"
  59. #include "flags.h"
  60. #include "delay.h"
  61. #include "marker.h"
  62. /* JoBS Queuing */
  63. #ifndef INFINITY
  64. # ifdef __SUNPRO_CC
  65. #  include <values.h>
  66. #  define INFINITY MAXDOUBLE
  67. # else
  68. #  define INFINITY +1.0e499
  69. # endif
  70. #endif
  71. #define PRECISION_ERROR +1.0e-10
  72. #define TOL 0.02 // Tolerance in the constraints (2%)
  73. #define MON_WINDOW_SIZE 0.5 // Size of the moving average window
  74. #define RESET_STATS 0
  75. #define UPDATE_STATS 1
  76. /* Dropping strategy */
  77. #define WITH_UPDATE 3
  78. #define WITHOUT_UPDATE 4
  79. /* ADC resolution */
  80. #define ORIGINAL_JOBS 0
  81. #define SHARED_PAIN 1
  82. /* FBS resolution */
  83. #define RESOLVE_OVERFLOW 0
  84. #define RESOLVE_ADC 1
  85. /* Simple macros */
  86. #define min(x, y)   ((x) < (y) ? (x) : (y))
  87. #define max(x, y)   ((x) >= (y) ? (x) : (y))
  88. /* JoBS class */
  89. class JoBS : public Queue {
  90. public: 
  91. JoBS();
  92. virtual int command(int argc, const char*const* argv);
  93. void enque(Packet*);
  94. Packet* deque();
  95. int link_id_;
  96.   
  97. protected:
  98. long total_backlog_Pkts_; // Total backlog in packets
  99. long total_backlog_Bits_; // Total backlog in bits
  100. double mean_pkt_size_;         // in bytes... Needs to be *8
  101. int drop_front_; // Drop-from-Front flag
  102. int trace_hop_; // Trace Delays and Drops locally?
  103. int adc_resolution_type_; // Type of algorithm for meeting ADCs
  104. // 0 = ORIGINAL_JOBS (see techrep)
  105. // 1 = SHARED_PAIN (drop from all classes)
  106. int shared_buffer_; // 0=separate per-class buffers
  107. // 1=common buffer
  108. LinkDelay* link_; // outgoing link 
  109. char* file_name_; // Trace files
  110. int sampling_period_;
  111. PacketQueue*  cls_[NO_CLASSES+1]; // Class queues: do not use class-0 
  112. int concerned_RDC_[NO_CLASSES+1];
  113. int concerned_RLC_[NO_CLASSES+1];
  114. int concerned_ADC_[NO_CLASSES+1];
  115. int concerned_ALC_[NO_CLASSES+1];
  116. int concerned_ARC_[NO_CLASSES+1];
  117. double RDC_[NO_CLASSES+1]; // RDC parameters
  118. double RLC_[NO_CLASSES+1]; // RLC parameters
  119. double ADC_[NO_CLASSES+1]; // ADC parameters
  120. double ALC_[NO_CLASSES+1]; // ALC parameters
  121. double ARC_[NO_CLASSES+1]; // ARC parameters
  122. double loss_prod_others_[NO_CLASSES+1];
  123. double prod_others_  [NO_CLASSES+1];
  124. double service_rate_[NO_CLASSES+1]; // in bps
  125. double current_loss_[NO_CLASSES+1]; // in fraction of 1
  126. double Rin_      [NO_CLASSES+1]; // in bits
  127. double Rout_      [NO_CLASSES+1]; // in bits
  128. double Rout_th_     [NO_CLASSES+1]; // in bits
  129. double Arrival_     [NO_CLASSES+1]; // in bits
  130. double last_rate_update_[NO_CLASSES+1];
  131. private:
  132. // Internal functions
  133. void updateError();
  134. double  projDelay(int);
  135. double* assignRateDropsADC();
  136. double* adjustRatesRDC();
  137. int minRatesNeeded(int);
  138. void arvAccounting(Packet*);
  139. int pickDroppedRLC(int);
  140. void dropTail(int, int);
  141. void dropFront(int, int);
  142. int enforceWC();
  143. void updateStats(Packet*, int);
  144. // Internal variables
  145. int idle_; // is the queue idle?
  146. double idletime_; // if so, since when?
  147. int pkt_count_;
  148. double min_share_;
  149. double last_arrival_;
  150. // Statistics
  151. double sliding_inter_;
  152. double sliding_avg_pkt_size_;
  153. double sliding_arv_pkts_;
  154. double sliding_arv_pkts_c[NO_CLASSES+1];
  155. double sliding_serviced_pkts_[NO_CLASSES+1];
  156. double sliding_serviced_bits_[NO_CLASSES+1];
  157. double sliding_class_service_rate_[NO_CLASSES+1];
  158. double sliding_class_delay_[NO_CLASSES+1];
  159. // Control variables
  160. double last_xmit_[NO_CLASSES+1]; // last time a packet was sent
  161. long backlog_Bits_ [NO_CLASSES+1];
  162. long backlog_Pkts_ [NO_CLASSES+1];
  163. double error_       [NO_CLASSES+1]; // in 10e-6*time_unit (us)
  164. double min_rate_     [NO_CLASSES+1]; // in Mbps
  165. double min_drop_     [NO_CLASSES+1]; // in fraction of 1
  166. double max_drop_     [NO_CLASSES+1]; // in fraction of 1
  167. double Rout_last_up_ [NO_CLASSES+1]; // last update of Rout's value
  168. double avg_elapsed_  [NO_CLASSES+1]; // average time spent in the queue
  169. double excess_drops_ [NO_CLASSES+1]; 
  170. double util_; // Offered load
  171. double Kp_static_; 
  172. double Kp_dynamic_; // Proportional Controller Parameter
  173. int ABS_present_; 
  174. double monitoring_window_;
  175. double last_monitor_update_;
  176. FILE* hop_trace_; // Trace File
  177. };
  178. #endif /* JOBS_H */