aboutsummaryrefslogtreecommitdiff
path: root/src/ats-tests/ats-testing-traffic.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2014-01-31 16:13:14 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2014-01-31 16:13:14 +0000
commitbf9c6ce12b8ad43d58cc05e62f75a86d59778f54 (patch)
tree792565279055ba9d0bcfa6fa453ba39cd5944a01 /src/ats-tests/ats-testing-traffic.c
parent12e3ee5beb64ee106df8e8974c228a003a676a53 (diff)
downloadgnunet-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.c45
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
36get_delay (struct TrafficGenerator *tg) 36get_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 */
250struct TrafficGenerator * 266struct TrafficGenerator *
251GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src, 267GNUNET_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)) )