diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2014-01-31 16:13:14 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2014-01-31 16:13:14 +0000 |
commit | bf9c6ce12b8ad43d58cc05e62f75a86d59778f54 (patch) | |
tree | 792565279055ba9d0bcfa6fa453ba39cd5944a01 /src/ats-tests/ats-testing-traffic.c | |
parent | 12e3ee5beb64ee106df8e8974c228a003a676a53 (diff) | |
download | gnunet-bf9c6ce12b8ad43d58cc05e62f75a86d59778f54.tar.gz gnunet-bf9c6ce12b8ad43d58cc05e62f75a86d59778f54.zip |
adding linear and saw wave support for traffic generator
Diffstat (limited to 'src/ats-tests/ats-testing-traffic.c')
-rw-r--r-- | src/ats-tests/ats-testing-traffic.c | 45 |
1 files changed, 33 insertions, 12 deletions
diff --git a/src/ats-tests/ats-testing-traffic.c b/src/ats-tests/ats-testing-traffic.c index 78ee63acb..3019d2054 100644 --- a/src/ats-tests/ats-testing-traffic.c +++ b/src/ats-tests/ats-testing-traffic.c | |||
@@ -36,19 +36,26 @@ static struct GNUNET_TIME_Relative | |||
36 | get_delay (struct TrafficGenerator *tg) | 36 | get_delay (struct TrafficGenerator *tg) |
37 | { | 37 | { |
38 | struct GNUNET_TIME_Relative delay; | 38 | struct GNUNET_TIME_Relative delay; |
39 | struct GNUNET_TIME_Relative time_delta; | ||
40 | long long int cur_rate; | ||
41 | long long int delta_rate; | ||
42 | |||
43 | |||
39 | delay.rel_value_us = 0; | 44 | delay.rel_value_us = 0; |
40 | 45 | ||
41 | switch (tg->type) { | 46 | switch (tg->type) { |
42 | case GNUNET_ATS_TEST_TG_CONSTANT: | 47 | case GNUNET_ATS_TEST_TG_CONSTANT: |
43 | if (UINT32_MAX == tg->rate) | 48 | if (UINT32_MAX == tg->base_rate) |
44 | delay.rel_value_us = 0; | 49 | return GNUNET_TIME_UNIT_ZERO; |
45 | else if (tg->rate <= TEST_MESSAGE_SIZE) | 50 | cur_rate = tg->base_rate; |
46 | delay.rel_value_us = (GNUNET_TIME_UNIT_SECONDS.rel_value_us); | 51 | return delay; |
47 | else | ||
48 | delay.rel_value_us = (GNUNET_TIME_UNIT_SECONDS.rel_value_us / (tg->rate / TEST_MESSAGE_SIZE)); | ||
49 | break; | 52 | break; |
50 | case GNUNET_ATS_TEST_TG_LINEAR: | 53 | case GNUNET_ATS_TEST_TG_LINEAR: |
51 | GNUNET_break (0); | 54 | time_delta = GNUNET_TIME_absolute_get_duration(tg->time_start); |
55 | time_delta.rel_value_us = time_delta.rel_value_us % tg->duration_period.rel_value_us; | ||
56 | delta_rate = ((double) time_delta.rel_value_us / tg->duration_period.rel_value_us) * | ||
57 | (tg->max_rate - tg->base_rate); | ||
58 | cur_rate = tg->base_rate + delta_rate; | ||
52 | break; | 59 | break; |
53 | case GNUNET_ATS_TEST_TG_RANDOM: | 60 | case GNUNET_ATS_TEST_TG_RANDOM: |
54 | GNUNET_break (0); | 61 | GNUNET_break (0); |
@@ -60,6 +67,8 @@ get_delay (struct TrafficGenerator *tg) | |||
60 | return delay; | 67 | return delay; |
61 | break; | 68 | break; |
62 | } | 69 | } |
70 | |||
71 | delay.rel_value_us = GNUNET_TIME_UNIT_SECONDS.rel_value_us * TEST_MESSAGE_SIZE / cur_rate; | ||
63 | return delay; | 72 | return delay; |
64 | } | 73 | } |
65 | 74 | ||
@@ -69,6 +78,7 @@ send_ping_ready_cb (void *cls, size_t size, void *buf) | |||
69 | struct BenchmarkPartner *p = cls; | 78 | struct BenchmarkPartner *p = cls; |
70 | static char msgbuf[TEST_MESSAGE_SIZE]; | 79 | static char msgbuf[TEST_MESSAGE_SIZE]; |
71 | struct GNUNET_MessageHeader *msg; | 80 | struct GNUNET_MessageHeader *msg; |
81 | struct GNUNET_TIME_Relative delay; | ||
72 | 82 | ||
73 | if (NULL == buf) | 83 | if (NULL == buf) |
74 | { | 84 | { |
@@ -117,8 +127,11 @@ send_ping_ready_cb (void *cls, size_t size, void *buf) | |||
117 | GNUNET_break (0); | 127 | GNUNET_break (0); |
118 | return TEST_MESSAGE_SIZE; | 128 | return TEST_MESSAGE_SIZE; |
119 | } | 129 | } |
130 | delay = get_delay (p->tg); | ||
131 | fprintf (stderr, "Delay for next transmission %llu ms\n", | ||
132 | (long long unsigned int) delay.rel_value_us / 1000); | ||
120 | p->tg->next_ping_transmission = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(), | 133 | p->tg->next_ping_transmission = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(), |
121 | get_delay (p->tg)); | 134 | delay); |
122 | 135 | ||
123 | return TEST_MESSAGE_SIZE; | 136 | return TEST_MESSAGE_SIZE; |
124 | } | 137 | } |
@@ -226,7 +239,7 @@ GNUNET_ATS_TEST_traffic_handle_pong (struct BenchmarkPartner *p) | |||
226 | 239 | ||
227 | /* Schedule next send event */ | 240 | /* Schedule next send event */ |
228 | left = GNUNET_TIME_absolute_get_remaining(p->tg->next_ping_transmission); | 241 | left = GNUNET_TIME_absolute_get_remaining(p->tg->next_ping_transmission); |
229 | if (UINT32_MAX == p->tg->rate) | 242 | if (UINT32_MAX == p->tg->base_rate) |
230 | { | 243 | { |
231 | p->tg->send_task = GNUNET_SCHEDULER_add_now (&comm_schedule_send, p); | 244 | p->tg->send_task = GNUNET_SCHEDULER_add_now (&comm_schedule_send, p); |
232 | } | 245 | } |
@@ -246,12 +259,17 @@ GNUNET_ATS_TEST_traffic_handle_pong (struct BenchmarkPartner *p) | |||
246 | * Generate between the source master and the partner and send traffic with a | 259 | * Generate between the source master and the partner and send traffic with a |
247 | * maximum rate. | 260 | * maximum rate. |
248 | * | 261 | * |
262 | * @base_rate traffic base rate to send data with | ||
263 | * @max_rate traffic maximum rate to send data with | ||
264 | * @frequency | ||
249 | */ | 265 | */ |
250 | struct TrafficGenerator * | 266 | struct TrafficGenerator * |
251 | GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src, | 267 | GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src, |
252 | struct BenchmarkPartner *dest, | 268 | struct BenchmarkPartner *dest, |
253 | enum TrafficGeneratorType type, | 269 | enum TrafficGeneratorType type, |
254 | unsigned int rate, | 270 | long int base_rate, |
271 | long int max_rate, | ||
272 | struct GNUNET_TIME_Relative period, | ||
255 | struct GNUNET_TIME_Relative duration) | 273 | struct GNUNET_TIME_Relative duration) |
256 | { | 274 | { |
257 | struct TrafficGenerator * tg; | 275 | struct TrafficGenerator * tg; |
@@ -268,14 +286,17 @@ GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src, | |||
268 | tg->type = type; | 286 | tg->type = type; |
269 | tg->src = src; | 287 | tg->src = src; |
270 | tg->dest = dest; | 288 | tg->dest = dest; |
271 | tg->rate = rate; | 289 | tg->base_rate = base_rate; |
290 | tg->max_rate = max_rate; | ||
291 | tg->duration_period = period; | ||
292 | tg->time_start = GNUNET_TIME_absolute_get(); | ||
272 | tg->next_ping_transmission = GNUNET_TIME_UNIT_FOREVER_ABS; | 293 | tg->next_ping_transmission = GNUNET_TIME_UNIT_FOREVER_ABS; |
273 | 294 | ||
274 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 295 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
275 | "Setting up traffic generator master[%u] `%s' and slave [%u] `%s' max %u Bips\n", | 296 | "Setting up traffic generator master[%u] `%s' and slave [%u] `%s' max %u Bips\n", |
276 | dest->me->no, GNUNET_i2s (&dest->me->id), | 297 | dest->me->no, GNUNET_i2s (&dest->me->id), |
277 | dest->dest->no, GNUNET_i2s (&dest->dest->id), | 298 | dest->dest->no, GNUNET_i2s (&dest->dest->id), |
278 | rate); | 299 | base_rate); |
279 | 300 | ||
280 | if ( ((GNUNET_YES == top->test_core) && (NULL != dest->cth)) || | 301 | if ( ((GNUNET_YES == top->test_core) && (NULL != dest->cth)) || |
281 | ((GNUNET_NO == top->test_core) && (NULL != dest->tth)) ) | 302 | ((GNUNET_NO == top->test_core) && (NULL != dest->tth)) ) |