aboutsummaryrefslogtreecommitdiff
path: root/src/set/gnunet-set-profiler.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/set/gnunet-set-profiler.c')
-rw-r--r--src/set/gnunet-set-profiler.c128
1 files changed, 82 insertions, 46 deletions
diff --git a/src/set/gnunet-set-profiler.c b/src/set/gnunet-set-profiler.c
index d83e034a6..349bce6ea 100644
--- a/src/set/gnunet-set-profiler.c
+++ b/src/set/gnunet-set-profiler.c
@@ -59,8 +59,9 @@ static struct GNUNET_PeerIdentity local_peer;
59static struct GNUNET_SET_ListenHandle *set_listener; 59static struct GNUNET_SET_ListenHandle *set_listener;
60 60
61static int byzantine; 61static int byzantine;
62static int force_delta; 62static unsigned int force_delta;
63static int force_full; 63static unsigned int force_full;
64static unsigned int element_size = 32;
64 65
65/** 66/**
66 * Handle to the statistics service. 67 * Handle to the statistics service.
@@ -90,7 +91,7 @@ map_remove_iterator (void *cls,
90 91
91 GNUNET_assert (NULL != key); 92 GNUNET_assert (NULL != key);
92 93
93 ret = GNUNET_CONTAINER_multihashmap_remove (m, key, NULL); 94 ret = GNUNET_CONTAINER_multihashmap_remove_all (m, key);
94 if (GNUNET_OK != ret) 95 if (GNUNET_OK != ret)
95 printf ("spurious element\n"); 96 printf ("spurious element\n");
96 return GNUNET_YES; 97 return GNUNET_YES;
@@ -196,7 +197,7 @@ set_result_cb (void *cls,
196 GNUNET_assert (0); 197 GNUNET_assert (0);
197 } 198 }
198 199
199 if (element->size != sizeof (struct GNUNET_HashCode)) 200 if (element->size != element_size)
200 { 201 {
201 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 202 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
202 "wrong element size: %u, expected %u\n", 203 "wrong element size: %u, expected %u\n",
@@ -208,8 +209,10 @@ set_result_cb (void *cls,
208 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "set %s: got element (%s)\n", 209 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "set %s: got element (%s)\n",
209 info->id, GNUNET_h2s (element->data)); 210 info->id, GNUNET_h2s (element->data));
210 GNUNET_assert (NULL != element->data); 211 GNUNET_assert (NULL != element->data);
212 struct GNUNET_HashCode data_hash;
213 GNUNET_CRYPTO_hash (element->data, element_size, &data_hash);
211 GNUNET_CONTAINER_multihashmap_put (info->received, 214 GNUNET_CONTAINER_multihashmap_put (info->received,
212 element->data, NULL, 215 &data_hash, NULL,
213 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); 216 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
214} 217}
215 218
@@ -261,16 +264,12 @@ set_insert_iterator (void *cls,
261 void *value) 264 void *value)
262{ 265{
263 struct GNUNET_SET_Handle *set = cls; 266 struct GNUNET_SET_Handle *set = cls;
264 struct GNUNET_SET_Element *el; 267 struct GNUNET_SET_Element el;
265 268
266 el = GNUNET_malloc (sizeof (struct GNUNET_SET_Element) + 269 el.element_type = 0;
267 sizeof (struct GNUNET_HashCode)); 270 el.data = value;
268 el->element_type = 0; 271 el.size = element_size;
269 GNUNET_memcpy (&el[1], key, sizeof *key); 272 GNUNET_SET_add_element (set, &el, NULL, NULL);
270 el->data = &el[1];
271 el->size = sizeof *key;
272 GNUNET_SET_add_element (set, el, NULL, NULL);
273 GNUNET_free (el);
274 return GNUNET_YES; 273 return GNUNET_YES;
275} 274}
276 275
@@ -322,6 +321,8 @@ run (void *cls,
322 321
323 config = cfg; 322 config = cfg;
324 323
324 GNUNET_assert (element_size > 0);
325
325 if (GNUNET_OK != GNUNET_CRYPTO_get_peer_identity (cfg, &local_peer)) 326 if (GNUNET_OK != GNUNET_CRYPTO_get_peer_identity (cfg, &local_peer))
326 { 327 {
327 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "could not retrieve host identity\n"); 328 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "could not retrieve host identity\n");
@@ -345,22 +346,28 @@ run (void *cls,
345 346
346 for (i = 0; i < num_a; i++) 347 for (i = 0; i < num_a; i++)
347 { 348 {
348 GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG, &hash); 349 char *data = GNUNET_malloc (element_size);
349 GNUNET_CONTAINER_multihashmap_put (info1.sent, &hash, NULL, 350 GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, data, element_size);
351 GNUNET_CRYPTO_hash (data, element_size, &hash);
352 GNUNET_CONTAINER_multihashmap_put (info1.sent, &hash, data,
350 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); 353 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
351 } 354 }
352 355
353 for (i = 0; i < num_b; i++) 356 for (i = 0; i < num_b; i++)
354 { 357 {
355 GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG, &hash); 358 char *data = GNUNET_malloc (element_size);
356 GNUNET_CONTAINER_multihashmap_put (info2.sent, &hash, NULL, 359 GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, data, element_size);
360 GNUNET_CRYPTO_hash (data, element_size, &hash);
361 GNUNET_CONTAINER_multihashmap_put (info2.sent, &hash, data,
357 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); 362 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
358 } 363 }
359 364
360 for (i = 0; i < num_c; i++) 365 for (i = 0; i < num_c; i++)
361 { 366 {
362 GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_STRONG, &hash); 367 char *data = GNUNET_malloc (element_size);
363 GNUNET_CONTAINER_multihashmap_put (common_sent, &hash, NULL, 368 GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, data, element_size);
369 GNUNET_CRYPTO_hash (data, element_size, &hash);
370 GNUNET_CONTAINER_multihashmap_put (common_sent, &hash, data,
364 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); 371 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
365 } 372 }
366 373
@@ -419,31 +426,60 @@ pre_run (void *cls, char *const *args, const char *cfgfile,
419int 426int
420main (int argc, char **argv) 427main (int argc, char **argv)
421{ 428{
422 static const struct GNUNET_GETOPT_CommandLineOption options[] = { 429 struct GNUNET_GETOPT_CommandLineOption options[] = {
423 { 'A', "num-first", NULL, 430 GNUNET_GETOPT_OPTION_SET_UINT ('A',
424 gettext_noop ("number of values"), 431 "num-first",
425 GNUNET_YES, &GNUNET_GETOPT_set_uint, &num_a }, 432 NULL,
426 { 'B', "num-second", NULL, 433 gettext_noop ("number of values"),
427 gettext_noop ("number of values"), 434 &num_a),
428 GNUNET_YES, &GNUNET_GETOPT_set_uint, &num_b }, 435
429 { 'b', "byzantine", NULL, 436 GNUNET_GETOPT_OPTION_SET_UINT ('B',
430 gettext_noop ("use byzantine mode"), 437 "num-second",
431 GNUNET_NO, &GNUNET_GETOPT_set_one, &byzantine }, 438 NULL,
432 { 'f', "force-full", NULL, 439 gettext_noop ("number of values"),
433 gettext_noop ("force sending full set"), 440 &num_b),
434 GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_full }, 441
435 { 'd', "force-delta", NULL, 442 GNUNET_GETOPT_OPTION_SET_ONE ('b',
436 gettext_noop ("number delta operation"), 443 "byzantine",
437 GNUNET_NO, &GNUNET_GETOPT_set_uint, &force_delta }, 444 gettext_noop ("use byzantine mode"),
438 { 'C', "num-common", NULL, 445 &byzantine),
439 gettext_noop ("number of values"), 446
440 GNUNET_YES, &GNUNET_GETOPT_set_uint, &num_c }, 447 GNUNET_GETOPT_OPTION_SET_UINT ('f',
441 { 'x', "operation", NULL, 448 "force-full",
442 gettext_noop ("operation to execute"), 449 NULL,
443 GNUNET_YES, &GNUNET_GETOPT_set_string, &op_str }, 450 gettext_noop ("force sending full set"),
444 { 's', "statistics", NULL, 451 &force_full),
445 gettext_noop ("write statistics to file"), 452
446 GNUNET_YES, &GNUNET_GETOPT_set_filename, &statistics_filename }, 453 GNUNET_GETOPT_OPTION_SET_UINT ('d',
454 "force-delta",
455 NULL,
456 gettext_noop ("number delta operation"),
457 &force_delta),
458
459 GNUNET_GETOPT_OPTION_SET_UINT ('C',
460 "num-common",
461 NULL,
462 gettext_noop ("number of values"),
463 &num_c),
464
465 GNUNET_GETOPT_OPTION_STRING ('x',
466 "operation",
467 NULL,
468 gettext_noop ("operation to execute"),
469 &op_str),
470
471 GNUNET_GETOPT_OPTION_SET_UINT ('w',
472 "element-size",
473 NULL,
474 gettext_noop ("element size"),
475 &element_size),
476
477 GNUNET_GETOPT_OPTION_FILENAME ('s',
478 "statistics",
479 "FILENAME",
480 gettext_noop ("write statistics to file"),
481 &statistics_filename),
482
447 GNUNET_GETOPT_OPTION_END 483 GNUNET_GETOPT_OPTION_END
448 }; 484 };
449 GNUNET_PROGRAM_run2 (argc, argv, "gnunet-set-profiler", 485 GNUNET_PROGRAM_run2 (argc, argv, "gnunet-set-profiler",