Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #if !defined(_G1050_H_)
00048 #define _G1050_H_
00049
00050
00051 #define G1050_TICKS_PER_SEC 1000
00052
00053
00054 #define SEARCHBACK_PERIOD 200
00055
00056 #define G1050_LOW_LOSS 0
00057 #define G1050_HIGH_LOSS 1
00058
00059 #define G1050_LAN_LINK 1
00060 #define G1050_ACCESS_LINK 2
00061
00062
00063 typedef struct
00064 {
00065
00066 double prob_loss_rate_change[2];
00067
00068 double prob_impulse[2][2];
00069
00070
00071 double impulse_height;
00072
00073 double impulse_coeff;
00074
00075
00076 double prob_packet_loss;
00077
00078 double prob_packet_collision_loss;
00079 } g1050_segment_constants_t;
00080
00081
00082 typedef struct
00083 {
00084 g1050_segment_constants_t segment[4];
00085 } g1050_constants_t;
00086
00087
00088 typedef struct
00089 {
00090
00091 double percentage_occupancy;
00092
00093 int mtu;
00094
00095 double max_jitter;
00096 } g1050_segment_model_t;
00097
00098
00099 typedef struct
00100 {
00101
00102 double base_regional_delay;
00103
00104 double base_intercontinental_delay;
00105
00106
00107 double percentage_packet_loss;
00108
00109 double max_jitter;
00110
00111 double route_flap_interval;
00112
00113 double route_flap_delay;
00114
00115 double link_failure_interval;
00116
00117 double link_failure_duration;
00118
00119 double prob_packet_loss;
00120
00121 double prob_oos;
00122 } g1050_core_model_t;
00123
00124
00125 typedef struct
00126 {
00127
00128 int loo[3];
00129 g1050_segment_model_t sidea_lan;
00130 g1050_segment_model_t sidea_access_link;
00131 g1050_core_model_t core;
00132 g1050_segment_model_t sideb_access_link;
00133 g1050_segment_model_t sideb_lan;
00134 } g1050_model_t;
00135
00136
00137 typedef struct
00138 {
00139 int sidea_lan_bit_rate;
00140 int sidea_lan_multiple_access;
00141 int sidea_access_link_bit_rate_ab;
00142 int sidea_access_link_bit_rate_ba;
00143 int sidea_access_link_qos_enabled;
00144 int sideb_lan_bit_rate;
00145 int sideb_lan_multiple_access;
00146 int sideb_access_link_bit_rate_ab;
00147 int sideb_access_link_bit_rate_ba;
00148 int sideb_access_link_qos_enabled;
00149 double loo;
00150 } g1050_channel_speeds_t;
00151
00152
00153 typedef struct
00154 {
00155
00156 int link_type;
00157
00158 int high_loss;
00159
00160
00161 double prob_loss_rate_change[2];
00162
00163 double prob_impulse[2];
00164
00165
00166 double impulse_height;
00167
00168 double impulse_coeff;
00169
00170
00171 double serial_delay;
00172
00173 double max_jitter;
00174
00175 double prob_packet_loss;
00176
00177 double prob_packet_collision_loss;
00178
00179 double congestion_delay;
00180
00181
00182 int qos_enabled;
00183
00184 int multiple_access;
00185
00186
00187 double last_arrival_time;
00188
00189
00190 double delays[3*G1050_TICKS_PER_SEC];
00191
00192
00193 uint32_t lost_packets;
00194
00195 uint32_t lost_packets_2;
00196 } g1050_segment_state_t;
00197
00198
00199 typedef struct
00200 {
00201
00202 int32_t route_flap_counter;
00203 int32_t route_flap_interval;
00204 double route_flap_delta;
00205
00206
00207 int32_t link_failure_counter;
00208 int32_t link_recovery_counter;
00209
00210 int32_t link_failure_interval_ticks;
00211 int32_t link_failure_duration_ticks;
00212
00213
00214 double base_delay;
00215
00216 double max_jitter;
00217
00218 double prob_packet_loss;
00219
00220 double prob_oos;
00221
00222
00223 double last_arrival_time;
00224 double delay_delta;
00225
00226
00227 double delays[3*G1050_TICKS_PER_SEC];
00228
00229
00230 uint32_t lost_packets;
00231
00232 uint32_t lost_packets_2;
00233 } g1050_core_state_t;
00234
00235
00236 typedef struct g1050_queue_element_s
00237 {
00238 struct g1050_queue_element_s *next;
00239 struct g1050_queue_element_s *prev;
00240 int seq_no;
00241 double departure_time;
00242 double arrival_time;
00243 int len;
00244 uint8_t pkt[];
00245 } g1050_queue_element_t;
00246
00247
00248 typedef struct
00249 {
00250 int packet_rate;
00251 int packet_size;
00252 float base_time;
00253 g1050_segment_state_t segment[4];
00254 g1050_core_state_t core;
00255 double arrival_times_1[3*G1050_TICKS_PER_SEC];
00256 double arrival_times_2[3*G1050_TICKS_PER_SEC];
00257 g1050_queue_element_t *first;
00258 g1050_queue_element_t *last;
00259 } g1050_state_t;
00260
00261 extern g1050_constants_t g1050_constants[1];
00262 extern g1050_channel_speeds_t g1050_speed_patterns[168];
00263 extern g1050_model_t g1050_standard_models[9];
00264
00265 #ifdef __cplusplus
00266 extern "C"
00267 {
00268 #endif
00269
00270 SPAN_DECLARE(g1050_state_t *) g1050_init(int model,
00271 int speed_pattern,
00272 int packet_size,
00273 int packet_rate);
00274
00275 SPAN_DECLARE(void) g1050_dump_parms(int model, int speed_pattern);
00276
00277 SPAN_DECLARE(int) g1050_put(g1050_state_t *s,
00278 const uint8_t buf[],
00279 int len,
00280 int seq_no,
00281 double departure_time);
00282
00283 SPAN_DECLARE(int) g1050_get(g1050_state_t *s,
00284 uint8_t buf[],
00285 int max_len,
00286 double current_time,
00287 int *seq_no,
00288 double *departure_time,
00289 double *arrival_time);
00290
00291 SPAN_DECLARE(void) g1050_queue_dump(g1050_state_t *s);
00292
00293 #ifdef __cplusplus
00294 }
00295 #endif
00296
00297 #endif
00298