aboutsummaryrefslogtreecommitdiff
path: root/src/testing
diff options
context:
space:
mode:
Diffstat (limited to 'src/testing')
-rw-r--r--src/testing/test_testing_topology.c52
-rw-r--r--src/testing/testing_group.c54
2 files changed, 71 insertions, 35 deletions
diff --git a/src/testing/test_testing_topology.c b/src/testing/test_testing_topology.c
index 0461af89c..66540c078 100644
--- a/src/testing/test_testing_topology.c
+++ b/src/testing/test_testing_topology.c
@@ -26,7 +26,9 @@
26#include "gnunet_core_service.h" 26#include "gnunet_core_service.h"
27#include "gnunet_os_lib.h" 27#include "gnunet_os_lib.h"
28 28
29#define VERBOSE GNUNET_YES 29#define VERBOSE GNUNET_NO
30
31#define PROGRESS_BARS GNUNET_YES
30 32
31#define DELAY_FOR_LOGGING GNUNET_NO 33#define DELAY_FOR_LOGGING GNUNET_NO
32 34
@@ -359,7 +361,7 @@ process_mtype (void *cls,
359 if (pos->uid != ntohl (msg->uid)) 361 if (pos->uid != ntohl (msg->uid))
360 return GNUNET_OK; 362 return GNUNET_OK;
361 363
362#if VERBOSE 364#if PROGRESS_BARS
363 if ((total_messages_received) % modnum == 0) 365 if ((total_messages_received) % modnum == 0)
364 { 366 {
365 if (total_messages_received == 0) 367 if (total_messages_received == 0)
@@ -390,7 +392,7 @@ process_mtype (void *cls,
390 392
391 if (total_messages_received == expected_messages) 393 if (total_messages_received == expected_messages)
392 { 394 {
393#if VERBOSE 395#if PROGRESS_BARS
394 fprintf (stdout, "100%%]\n"); 396 fprintf (stdout, "100%%]\n");
395#endif 397#endif
396 GNUNET_SCHEDULER_cancel (die_task); 398 GNUNET_SCHEDULER_cancel (die_task);
@@ -691,7 +693,7 @@ topology_callback (void *cls,
691 struct TestMessageContext *temp_context; 693 struct TestMessageContext *temp_context;
692 if (emsg == NULL) 694 if (emsg == NULL)
693 { 695 {
694#if VERBOSE 696#if PROGRESS_BARS
695 if ((total_connections) % modnum == 0) 697 if ((total_connections) % modnum == 0)
696 { 698 {
697 if (total_connections == 0) 699 if (total_connections == 0)
@@ -738,7 +740,7 @@ topology_callback (void *cls,
738 740
739 if (total_connections == expected_connections) 741 if (total_connections == expected_connections)
740 { 742 {
741#if VERBOSE 743#if PROGRESS_BARS
742 fprintf (stdout, "100%%]\n"); 744 fprintf (stdout, "100%%]\n");
743#endif 745#endif
744#if VERBOSE 746#if VERBOSE
@@ -748,6 +750,10 @@ topology_callback (void *cls,
748#endif 750#endif
749 modnum = expected_messages / 4; 751 modnum = expected_messages / 4;
750 dotnum = (expected_messages / 50) + 1; 752 dotnum = (expected_messages / 50) + 1;
753 if (modnum == 0)
754 modnum = 1;
755 if (dotnum == 0)
756 dotnum = 1;
751 GNUNET_SCHEDULER_cancel (die_task); 757 GNUNET_SCHEDULER_cancel (die_task);
752 die_task = GNUNET_SCHEDULER_NO_TASK; 758 die_task = GNUNET_SCHEDULER_NO_TASK;
753#if DELAY_FOR_LOGGING 759#if DELAY_FOR_LOGGING
@@ -764,7 +770,7 @@ topology_callback (void *cls,
764 GNUNET_SCHEDULER_add_delayed (settle_time, &send_test_messages, 770 GNUNET_SCHEDULER_add_delayed (settle_time, &send_test_messages,
765 test_messages); 771 test_messages);
766#endif 772#endif
767#if VERBOSE 773#if PROGRESS_BARS
768 fprintf (stdout, "Test message progress: ["); 774 fprintf (stdout, "Test message progress: [");
769#endif 775#endif
770 776
@@ -821,8 +827,8 @@ connect_topology ()
821 connect_timeout, 827 connect_timeout,
822 connect_attempts, 828 connect_attempts,
823 &topology_creation_finished, NULL); 829 &topology_creation_finished, NULL);
824#if VERBOSE 830#if PROGRESS_BARS
825 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 831 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
826 "Have %d expected connections\n", expected_connections); 832 "Have %d expected connections\n", expected_connections);
827#endif 833#endif
828 } 834 }
@@ -836,12 +842,18 @@ connect_topology ()
836 return; 842 return;
837 } 843 }
838 844
839 die_task = GNUNET_SCHEDULER_add_delayed (TEST_TIMEOUT, 845 die_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
846 (GNUNET_TIME_UNIT_SECONDS,
847 SECONDS_PER_PEER_START * num_peers),
840 &end_badly, 848 &end_badly,
841 "from connect topology (timeout)"); 849 "from connect topology (timeout)");
842 modnum = expected_connections / 4; 850 modnum = expected_connections / 4;
843 dotnum = (expected_connections / 50) + 1; 851 dotnum = (expected_connections / 50) + 1;
844#if VERBOSE 852 if (modnum == 0)
853 modnum = 1;
854 if (dotnum == 0)
855 dotnum = 1;
856#if PROGRESS_BARS
845 fprintf (stdout, "Peer connection progress: ["); 857 fprintf (stdout, "Peer connection progress: [");
846#endif 858#endif
847} 859}
@@ -854,7 +866,7 @@ create_topology ()
854 (pg, topology, blacklist_topology, 866 (pg, topology, blacklist_topology,
855 blacklist_transports) != GNUNET_SYSERR) 867 blacklist_transports) != GNUNET_SYSERR)
856 { 868 {
857#if VERBOSE 869#if PROGRESS_BARS
858 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 870 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
859 "Topology set up, now starting peers!\n"); 871 "Topology set up, now starting peers!\n");
860 fprintf (stdout, "Daemon start progress ["); 872 fprintf (stdout, "Daemon start progress [");
@@ -869,7 +881,9 @@ create_topology ()
869 "from create topology (bad return)"); 881 "from create topology (bad return)");
870 } 882 }
871 GNUNET_SCHEDULER_cancel (die_task); 883 GNUNET_SCHEDULER_cancel (die_task);
872 die_task = GNUNET_SCHEDULER_add_delayed (TEST_TIMEOUT, 884 die_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
885 (GNUNET_TIME_UNIT_SECONDS,
886 SECONDS_PER_PEER_START * num_peers),
873 &end_badly, 887 &end_badly,
874 "from continue startup (timeout)"); 888 "from continue startup (timeout)");
875} 889}
@@ -892,7 +906,7 @@ peers_started_callback (void *cls,
892 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Started daemon %llu out of %llu\n", 906 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Started daemon %llu out of %llu\n",
893 (num_peers - peers_left) + 1, num_peers); 907 (num_peers - peers_left) + 1, num_peers);
894#endif 908#endif
895#if VERBOSE 909#if PROGRESS_BARS
896 if ((num_peers - peers_left) % modnum == 0) 910 if ((num_peers - peers_left) % modnum == 0)
897 { 911 {
898 if (num_peers - peers_left == 0) 912 if (num_peers - peers_left == 0)
@@ -912,7 +926,7 @@ peers_started_callback (void *cls,
912 peers_left--; 926 peers_left--;
913 if (peers_left == 0) 927 if (peers_left == 0)
914 { 928 {
915#if VERBOSE 929#if PROGRESS_BARS
916 fprintf (stdout, "100%%]\n"); 930 fprintf (stdout, "100%%]\n");
917#endif 931#endif
918#if VERBOSE 932#if VERBOSE
@@ -965,7 +979,7 @@ hostkey_callback (void *cls,
965 num_peers - peers_left, num_peers, GNUNET_i2s (id)); 979 num_peers - peers_left, num_peers, GNUNET_i2s (id));
966#endif 980#endif
967 981
968#if VERBOSE 982#if PROGRESS_BARS
969 if ((num_peers - peers_left) % modnum == 0) 983 if ((num_peers - peers_left) % modnum == 0)
970 { 984 {
971 if (num_peers - peers_left == 0) 985 if (num_peers - peers_left == 0)
@@ -985,7 +999,7 @@ hostkey_callback (void *cls,
985 peers_left--; 999 peers_left--;
986 if (peers_left == 0) 1000 if (peers_left == 0)
987 { 1001 {
988#if VERBOSE 1002#if PROGRESS_BARS
989 fprintf (stdout, "100%%]\n"); 1003 fprintf (stdout, "100%%]\n");
990 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1004 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
991 "All %d hostkeys created, now creating topology!\n", 1005 "All %d hostkeys created, now creating topology!\n",
@@ -1148,7 +1162,11 @@ run (void *cls,
1148 peers_left = num_peers; 1162 peers_left = num_peers;
1149 modnum = num_peers / 4; 1163 modnum = num_peers / 4;
1150 dotnum = (num_peers / 50) + 1; 1164 dotnum = (num_peers / 50) + 1;
1151#if VERBOSE 1165 if (modnum == 0)
1166 modnum = 1;
1167 if (dotnum == 0)
1168 dotnum = 1;
1169#if PROGRESS_BARS
1152 fprintf (stdout, "Hostkey generation progress: ["); 1170 fprintf (stdout, "Hostkey generation progress: [");
1153#endif 1171#endif
1154 /* Set up a task to end testing if peer start fails */ 1172 /* Set up a task to end testing if peer start fails */
diff --git a/src/testing/testing_group.c b/src/testing/testing_group.c
index a35a63a75..b4420115d 100644
--- a/src/testing/testing_group.c
+++ b/src/testing/testing_group.c
@@ -56,8 +56,6 @@
56/* Maximum time to delay connect attempt */ 56/* Maximum time to delay connect attempt */
57#define MAX_CONNECT_DELAY 300 57#define MAX_CONNECT_DELAY 300
58 58
59#define MAX_CONCURRENT_HOSTKEYS 500
60
61/** 59/**
62 * Which list of peers do we need to modify? 60 * Which list of peers do we need to modify?
63 */ 61 */
@@ -656,6 +654,11 @@ struct GNUNET_TESTING_PeerGroup
656 unsigned int max_outstanding_connections; 654 unsigned int max_outstanding_connections;
657 655
658 /** 656 /**
657 * Number of ssh connections to peers (max).
658 */
659 unsigned int max_concurrent_ssh;
660
661 /**
659 * Number of connects we are waiting on, allows us to rate limit 662 * Number of connects we are waiting on, allows us to rate limit
660 * connect attempts. 663 * connect attempts.
661 */ 664 */
@@ -1125,6 +1128,7 @@ update_config (void *cls,
1125 * out of "*port" numbers, return NULL. 1128 * out of "*port" numbers, return NULL.
1126 * 1129 *
1127 * @param cfg template configuration 1130 * @param cfg template configuration
1131 * @param off the current peer offset
1128 * @param port port numbers to use, update to reflect 1132 * @param port port numbers to use, update to reflect
1129 * port numbers that were used 1133 * port numbers that were used
1130 * @param upnum number to make unix domain socket names unique 1134 * @param upnum number to make unix domain socket names unique
@@ -1136,6 +1140,7 @@ update_config (void *cls,
1136 */ 1140 */
1137static struct GNUNET_CONFIGURATION_Handle * 1141static struct GNUNET_CONFIGURATION_Handle *
1138make_config (const struct GNUNET_CONFIGURATION_Handle *cfg, 1142make_config (const struct GNUNET_CONFIGURATION_Handle *cfg,
1143 uint32_t off,
1139 uint16_t * port, 1144 uint16_t * port,
1140 uint32_t * upnum, const char *hostname, uint32_t * fdnum) 1145 uint32_t * upnum, const char *hostname, uint32_t * fdnum)
1141{ 1146{
@@ -1143,6 +1148,7 @@ make_config (const struct GNUNET_CONFIGURATION_Handle *cfg,
1143 uint16_t orig; 1148 uint16_t orig;
1144 char *control_host; 1149 char *control_host;
1145 char *allowed_hosts; 1150 char *allowed_hosts;
1151 unsigned long long temp_port;
1146 1152
1147 orig = *port; 1153 orig = *port;
1148 uc.nport = *port; 1154 uc.nport = *port;
@@ -1171,20 +1177,28 @@ make_config (const struct GNUNET_CONFIGURATION_Handle *cfg,
1171 1177
1172 GNUNET_CONFIGURATION_set_value_string (uc.ret, "core", "ACCEPT_FROM", 1178 GNUNET_CONFIGURATION_set_value_string (uc.ret, "core", "ACCEPT_FROM",
1173 allowed_hosts); 1179 allowed_hosts);
1174 GNUNET_CONFIGURATION_set_value_string (uc.ret, "core", "UNIXPATH",
1175 "");
1176 GNUNET_CONFIGURATION_set_value_string (uc.ret, "transport", 1180 GNUNET_CONFIGURATION_set_value_string (uc.ret, "transport",
1177 "ACCEPT_FROM", allowed_hosts); 1181 "ACCEPT_FROM", allowed_hosts);
1178 GNUNET_CONFIGURATION_set_value_string (uc.ret, "transport", "UNIXPATH",
1179 "");
1180 GNUNET_CONFIGURATION_set_value_string (uc.ret, "dht", "ACCEPT_FROM", 1182 GNUNET_CONFIGURATION_set_value_string (uc.ret, "dht", "ACCEPT_FROM",
1181 allowed_hosts); 1183 allowed_hosts);
1182 GNUNET_CONFIGURATION_set_value_string (uc.ret, "dht", "UNIXPATH",
1183 "");
1184 GNUNET_CONFIGURATION_set_value_string (uc.ret, "statistics", 1184 GNUNET_CONFIGURATION_set_value_string (uc.ret, "statistics",
1185 "ACCEPT_FROM", allowed_hosts); 1185 "ACCEPT_FROM", allowed_hosts);
1186 GNUNET_CONFIGURATION_set_value_string (uc.ret, "statistics", "UNIXPATH", 1186
1187 ""); 1187 GNUNET_CONFIGURATION_set_value_string (uc.ret, "core", "UNIXPATH", "");
1188 GNUNET_CONFIGURATION_set_value_string (uc.ret, "transport", "UNIXPATH", "");
1189 GNUNET_CONFIGURATION_set_value_string (uc.ret, "dht", "UNIXPATH", "");
1190 GNUNET_CONFIGURATION_set_value_string (uc.ret, "statistics", "UNIXPATH", "");
1191
1192
1193 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_number(uc.orig, "statistics", "port", &temp_port) &&
1194 (temp_port != 0) &&
1195 (GNUNET_YES !=
1196 GNUNET_CONFIGURATION_get_value_yesno (uc.orig, "testing",
1197 "single_statistics_per_host")))
1198 {
1199 GNUNET_CONFIGURATION_set_value_number (uc.ret, "statistics", "port", temp_port + off);
1200 }
1201
1188 GNUNET_free_non_null (control_host); 1202 GNUNET_free_non_null (control_host);
1189 GNUNET_free (allowed_hosts); 1203 GNUNET_free (allowed_hosts);
1190 } 1204 }
@@ -4614,7 +4628,7 @@ internal_continue_startup (void *cls,
4614 return; 4628 return;
4615 } 4629 }
4616 4630
4617 if (internal_context->peer->pg->starting < internal_context->peer->pg->max_outstanding_connections) 4631 if (internal_context->peer->pg->starting < internal_context->peer->pg->max_concurrent_ssh)
4618 { 4632 {
4619 internal_context->peer->pg->starting++; 4633 internal_context->peer->pg->starting++;
4620 GNUNET_TESTING_daemon_continue_startup (internal_context->peer->daemon); 4634 GNUNET_TESTING_daemon_continue_startup (internal_context->peer->daemon);
@@ -4697,7 +4711,7 @@ schedule_churn_restart (void *cls,
4697 struct ChurnRestartContext *startup_ctx = 4711 struct ChurnRestartContext *startup_ctx =
4698 peer_restart_ctx->churn_restart_ctx; 4712 peer_restart_ctx->churn_restart_ctx;
4699 4713
4700 if (startup_ctx->outstanding > startup_ctx->pg->max_outstanding_connections) 4714 if (startup_ctx->outstanding > startup_ctx->pg->max_concurrent_ssh)
4701 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 4715 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
4702 (GNUNET_TIME_UNIT_MILLISECONDS, 100), 4716 (GNUNET_TIME_UNIT_MILLISECONDS, 100),
4703 &schedule_churn_restart, peer_restart_ctx); 4717 &schedule_churn_restart, peer_restart_ctx);
@@ -4721,7 +4735,7 @@ internal_start (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
4721 return; 4735 return;
4722 } 4736 }
4723 4737
4724 if (internal_context->peer->pg->starting < MAX_CONCURRENT_HOSTKEYS) 4738 if (internal_context->peer->pg->starting < internal_context->peer->pg->max_concurrent_ssh)
4725 { 4739 {
4726 internal_context->peer->pg->starting++; 4740 internal_context->peer->pg->starting++;
4727 internal_context->peer->daemon = 4741 internal_context->peer->daemon =
@@ -4774,7 +4788,9 @@ GNUNET_TESTING_daemons_continue_startup (struct GNUNET_TESTING_PeerGroup *pg)
4774 * @param cfg configuration template to use 4788 * @param cfg configuration template to use
4775 * @param total number of daemons to start 4789 * @param total number of daemons to start
4776 * @param max_concurrent_connections for testing, how many peers can 4790 * @param max_concurrent_connections for testing, how many peers can
4777 * we connect to simultaneously 4791* we connect to simultaneously
4792 * @param max_concurrent_ssh when starting with ssh, how many ssh
4793 * connections will we allow at once (based on remote hosts allowed!)
4778 * @param timeout total time allowed for peers to start 4794 * @param timeout total time allowed for peers to start
4779 * @param hostkey_callback function to call on each peers hostkey generation 4795 * @param hostkey_callback function to call on each peers hostkey generation
4780 * if NULL, peers will be started by this call, if non-null, 4796 * if NULL, peers will be started by this call, if non-null,
@@ -4794,6 +4810,7 @@ struct GNUNET_TESTING_PeerGroup *
4794GNUNET_TESTING_daemons_start (const struct GNUNET_CONFIGURATION_Handle *cfg, 4810GNUNET_TESTING_daemons_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
4795 unsigned int total, 4811 unsigned int total,
4796 unsigned int max_concurrent_connections, 4812 unsigned int max_concurrent_connections,
4813 unsigned int max_concurrent_ssh,
4797 struct GNUNET_TIME_Relative timeout, 4814 struct GNUNET_TIME_Relative timeout,
4798 GNUNET_TESTING_NotifyHostkeyCreated 4815 GNUNET_TESTING_NotifyHostkeyCreated
4799 hostkey_callback, void *hostkey_cls, 4816 hostkey_callback, void *hostkey_cls,
@@ -4847,6 +4864,7 @@ GNUNET_TESTING_daemons_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
4847 pg->max_timeout = GNUNET_TIME_relative_to_absolute (timeout); 4864 pg->max_timeout = GNUNET_TIME_relative_to_absolute (timeout);
4848 pg->peers = GNUNET_malloc (total * sizeof (struct PeerData)); 4865 pg->peers = GNUNET_malloc (total * sizeof (struct PeerData));
4849 pg->max_outstanding_connections = max_concurrent_connections; 4866 pg->max_outstanding_connections = max_concurrent_connections;
4867 pg->max_concurrent_ssh = max_concurrent_ssh;
4850 if (NULL != hostnames) 4868 if (NULL != hostnames)
4851 { 4869 {
4852 off = 0; 4870 off = 0;
@@ -4935,7 +4953,6 @@ GNUNET_TESTING_daemons_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
4935 &baseservicehome)); 4953 &baseservicehome));
4936 for (i = 0; i < pg->num_hosts; i++) 4954 for (i = 0; i < pg->num_hosts; i++)
4937 { 4955 {
4938
4939 if (NULL != pg->hosts[i].username) 4956 if (NULL != pg->hosts[i].username)
4940 GNUNET_asprintf (&arg, "%s@%s", pg->hosts[i].username, pg->hosts[i].hostname); 4957 GNUNET_asprintf (&arg, "%s@%s", pg->hosts[i].username, pg->hosts[i].hostname);
4941 else 4958 else
@@ -5003,6 +5020,7 @@ GNUNET_TESTING_daemons_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
5003 username = pg->hosts[off % hostcnt].username; 5020 username = pg->hosts[off % hostcnt].username;
5004 sshport = pg->hosts[off % hostcnt].sshport; 5021 sshport = pg->hosts[off % hostcnt].sshport;
5005 pcfg = make_config (cfg, 5022 pcfg = make_config (cfg,
5023 off,
5006 &pg->hosts[off % hostcnt].minport, 5024 &pg->hosts[off % hostcnt].minport,
5007 &upnum, hostname, &fdnum); 5025 &upnum, hostname, &fdnum);
5008 } 5026 }
@@ -5011,7 +5029,7 @@ GNUNET_TESTING_daemons_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
5011 hostname = NULL; 5029 hostname = NULL;
5012 username = NULL; 5030 username = NULL;
5013 sshport = 0; 5031 sshport = 0;
5014 pcfg = make_config (cfg, &minport, &upnum, hostname, &fdnum); 5032 pcfg = make_config (cfg, off, &minport, &upnum, hostname, &fdnum);
5015 } 5033 }
5016 5034
5017 if (NULL == pcfg) 5035 if (NULL == pcfg)
@@ -5252,7 +5270,7 @@ schedule_churn_shutdown_task (void *cls,
5252 shutdown_ctx = peer_shutdown_ctx->shutdown_ctx; 5270 shutdown_ctx = peer_shutdown_ctx->shutdown_ctx;
5253 GNUNET_assert (shutdown_ctx != NULL); 5271 GNUNET_assert (shutdown_ctx != NULL);
5254 churn_ctx = (struct ChurnContext *)shutdown_ctx->cb_cls; 5272 churn_ctx = (struct ChurnContext *)shutdown_ctx->cb_cls;
5255 if (shutdown_ctx->outstanding > churn_ctx->pg->max_outstanding_connections) 5273 if (shutdown_ctx->outstanding > churn_ctx->pg->max_concurrent_ssh)
5256 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 5274 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
5257 (GNUNET_TIME_UNIT_MILLISECONDS, 100), 5275 (GNUNET_TIME_UNIT_MILLISECONDS, 100),
5258 &schedule_churn_shutdown_task, 5276 &schedule_churn_shutdown_task,
@@ -5602,7 +5620,7 @@ schedule_shutdown_task (void *cls,
5602 shutdown_ctx = peer_shutdown_ctx->shutdown_ctx; 5620 shutdown_ctx = peer_shutdown_ctx->shutdown_ctx;
5603 GNUNET_assert (shutdown_ctx != NULL); 5621 GNUNET_assert (shutdown_ctx != NULL);
5604 5622
5605 if (shutdown_ctx->outstanding > shutdown_ctx->pg->max_outstanding_connections) 5623 if (shutdown_ctx->outstanding > shutdown_ctx->pg->max_concurrent_ssh)
5606 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply 5624 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
5607 (GNUNET_TIME_UNIT_MILLISECONDS, 100), 5625 (GNUNET_TIME_UNIT_MILLISECONDS, 100),
5608 &schedule_shutdown_task, peer_shutdown_ctx); 5626 &schedule_shutdown_task, peer_shutdown_ctx);