You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ SPDX-License-Identifier: AGPL3.0-or-later
*/
/**
* @file rps/test_rps.c
STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL, /* 6 */
STAT_TYPE_ISSUED_PUSH_SEND, /* 7 */
STAT_TYPE_ISSUED_PULL_REQ, /* 8 */
- STAT_TYPE_ISSUED_PULL_REP, /* 9 */
- STAT_TYPE_SENT_PUSH_SEND, /* 10 */
- STAT_TYPE_SENT_PULL_REQ, /* 11 */
- STAT_TYPE_SENT_PULL_REP, /* 12 */
- STAT_TYPE_RECV_PUSH_SEND, /* 13 */
- STAT_TYPE_RECV_PULL_REQ, /* 14 */
- STAT_TYPE_RECV_PULL_REP, /* 15 */
- STAT_TYPE_MAX, /* 16 */
+ STAT_TYPE_ISSUED_PULL_REQ_MH, /* 9 */
+ STAT_TYPE_ISSUED_PULL_REP, /* 10 */
+ STAT_TYPE_SENT_PUSH_SEND, /* 11 */
+ STAT_TYPE_SENT_PULL_REQ, /* 12 */
+ STAT_TYPE_SENT_PULL_REQ_MH, /* 13 */
+ STAT_TYPE_SENT_PULL_REP, /* 14 */
+ STAT_TYPE_RECV_PUSH_SEND, /* 15 */
+ STAT_TYPE_RECV_PULL_REQ, /* 16 */
+ STAT_TYPE_RECV_PULL_REQ_MH, /* 17 */
+ STAT_TYPE_RECV_PULL_REP, /* 18 */
+ STAT_TYPE_RECV_PULL_REP_MH, /* 19 */
+ STAT_TYPE_VIEW_SIZE, /* 20 */
+ STAT_TYPE_KNOWN_PEERS, /* 21 */
+ STAT_TYPE_VALID_PEERS, /* 22 */
+ STAT_TYPE_LEARND_PEERS, /* 23 */
+ STAT_TYPE_PENDING_ONLINE_CHECKS, /* 24 */
+ STAT_TYPE_UNREQUESTED_PULL_REPLIES, /* 25 */
+ STAT_TYPE_PEERS_IN_PUSH_MAP, /* 26 */
+ STAT_TYPE_PEERS_IN_PULL_MAP, /* 27 */
+ STAT_TYPE_PEERS_IN_VIEW, /* 28 */
+ STAT_TYPE_VIEW_SIZE_AIM, /* 29 */
+ STAT_TYPE_MAX, /* 30 */
};
static char* stat_type_strings[] = {
"# rounds blocked - no pushes, no pull replies",
"# push send issued",
"# pull request send issued",
+ "# pull request send issued (multi-hop peer)",
"# pull reply send issued",
"# pushes sent",
"# pull requests sent",
+ "# pull requests sent (multi-hop peer)",
"# pull replys sent",
"# push message received",
"# pull request message received",
+ "# pull request message received (multi-hop peer)",
"# pull reply messages received",
+ "# pull reply messages received (multi-hop peer)",
+ "view size",
+ "# known peers",
+ "# valid peers",
+ "# learnd peers",
+ "# pending online checks",
+ "# unrequested pull replies",
+ "# peers in push map at end of round",
+ "# peers in pull map at end of round",
+ "# peers in view at end of round",
+ "view size aim",
};
struct STATcls
{
return STAT_TYPE_ISSUED_PULL_REQ;
}
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_ISSUED_PULL_REQ_MH],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_ISSUED_PULL_REQ_MH])))
+ {
+ return STAT_TYPE_ISSUED_PULL_REQ_MH;
+ }
else if (0 == strncmp (stat_type_strings[STAT_TYPE_ISSUED_PULL_REP],
stat_str,
strlen (stat_type_strings[STAT_TYPE_ISSUED_PULL_REP])))
{
return STAT_TYPE_SENT_PULL_REQ;
}
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_SENT_PULL_REQ_MH],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_SENT_PULL_REQ_MH])))
+ {
+ return STAT_TYPE_SENT_PULL_REQ_MH;
+ }
else if (0 == strncmp (stat_type_strings[STAT_TYPE_SENT_PULL_REP],
stat_str,
strlen (stat_type_strings[STAT_TYPE_SENT_PULL_REP])))
{
return STAT_TYPE_RECV_PULL_REQ;
}
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_RECV_PULL_REQ_MH],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_RECV_PULL_REQ_MH])))
+ {
+ return STAT_TYPE_RECV_PULL_REQ_MH;
+ }
else if (0 == strncmp (stat_type_strings[STAT_TYPE_RECV_PULL_REP],
stat_str,
strlen (stat_type_strings[STAT_TYPE_RECV_PULL_REP])))
{
return STAT_TYPE_RECV_PULL_REP;
}
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_RECV_PULL_REP_MH],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_RECV_PULL_REP_MH])))
+ {
+ return STAT_TYPE_RECV_PULL_REP_MH;
+ }
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_VIEW_SIZE],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_VIEW_SIZE])))
+ {
+ return STAT_TYPE_VIEW_SIZE;
+ }
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_KNOWN_PEERS],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_KNOWN_PEERS])))
+ {
+ return STAT_TYPE_KNOWN_PEERS;
+ }
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_VALID_PEERS],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_VALID_PEERS])))
+ {
+ return STAT_TYPE_VALID_PEERS;
+ }
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_LEARND_PEERS],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_LEARND_PEERS])))
+ {
+ return STAT_TYPE_LEARND_PEERS;
+ }
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_PENDING_ONLINE_CHECKS],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_PENDING_ONLINE_CHECKS])))
+ {
+ return STAT_TYPE_PENDING_ONLINE_CHECKS;
+ }
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_UNREQUESTED_PULL_REPLIES],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_UNREQUESTED_PULL_REPLIES])))
+ {
+ return STAT_TYPE_UNREQUESTED_PULL_REPLIES;
+ }
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_PEERS_IN_PUSH_MAP],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_PEERS_IN_PUSH_MAP])))
+ {
+ return STAT_TYPE_PEERS_IN_PUSH_MAP;
+ }
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_PEERS_IN_PULL_MAP],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_PEERS_IN_PULL_MAP])))
+ {
+ return STAT_TYPE_PEERS_IN_PULL_MAP;
+ }
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_PEERS_IN_VIEW],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_PEERS_IN_VIEW])))
+ {
+ return STAT_TYPE_PEERS_IN_VIEW;
+ }
+ else if (0 == strncmp (stat_type_strings[STAT_TYPE_VIEW_SIZE_AIM],
+ stat_str,
+ strlen (stat_type_strings[STAT_TYPE_VIEW_SIZE_AIM])))
+ {
+ return STAT_TYPE_VIEW_SIZE_AIM;
+ }
return STAT_TYPE_MAX;
}
*/
static struct GNUNET_PeerIdentity *target_peer;
-/**
- * ID of the peer that requests for the evaluation.
- */
-static struct RPSPeer *eval_peer;
-
/**
* Number of online peers.
*/
rps_peer->num_pending_reps--;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Cancelling rps get reply\n");
+ GNUNET_assert (NULL != pending_rep->req_handle);
GNUNET_RPS_request_cancel (pending_rep->req_handle);
GNUNET_free (pending_rep);
}
{
clean_peer (i);
}
+ close_all_files();
}
static void
post_test_task = NULL;
post_test = GNUNET_YES;
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Post test task scheduled.\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Executing post test op.\n");
if (NULL != churn_task)
{
GNUNET_SCHEDULER_cancel (churn_task);
}
for (i = 0; i < num_peers; i++)
{
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Executing post test op. (peer %" PRIu32 ")\n",
+ rps_peers[i].index);
if (NULL != rps_peers[i].op)
{
GNUNET_TESTBED_operation_done (rps_peers[i].op);
rps_peers[i].op = NULL;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Cancelled testbed operation\n");
}
if (NULL != cur_test_run.post_test)
{
cancel_request (pending_rep);
}
GNUNET_assert (h == peer->rps_handle);
- GNUNET_RPS_disconnect (h);
+ if (NULL != h)
+ {
+ GNUNET_RPS_disconnect (h);
+ h = NULL;
+ }
peer->rps_handle = NULL;
}
}
*/
static void profiler_init_peer (struct RPSPeer *rps_peer)
{
- if (num_peers - 1 == rps_peer->index)
- {
- rps_peer->num_ids_to_request = cur_test_run.num_requests;
- } else {
- rps_peer->num_ids_to_request = 0;
- }
+ rps_peer->num_ids_to_request = cur_test_run.num_requests;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "peer shall request %i peers\n",
rps_peer->num_ids_to_request);
}
{
struct RPSPeer *rps_peer;
struct RPSPeer *rcv_rps_peer;
- char *file_name;
- char *file_name_dh;
- char *file_name_dhr;
- char *file_name_dhru;
+ char file_name_buf[128];
+ char file_name_dh_buf[128];
+ char file_name_dhr_buf[128];
+ char file_name_dhru_buf[128];
+ char *file_name = file_name_buf;
+ char *file_name_dh = file_name_dh_buf;
+ char *file_name_dhr = file_name_dhr_buf;
+ char *file_name_dhru = file_name_dhru_buf;
unsigned int i;
struct PendingReply *pending_rep = (struct PendingReply *) cls;
+ pending_rep->req_handle = NULL;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "profiler_reply_handle()\n");
rps_peer = pending_rep->rps_peer;
- file_name = "/tmp/rps/received_ids";
- file_name_dh = "/tmp/rps/diehard_input";
- file_name_dhr = "/tmp/rps/diehard_input_raw";
- file_name_dhru = "/tmp/rps/diehard_input_raw_aligned";
+ (void) GNUNET_asprintf (&file_name,
+ "/tmp/rps/received_ids-%u",
+ rps_peer->index);
+
+ (void) GNUNET_asprintf (&file_name_dh,
+ "/tmp/rps/diehard_input-%u",
+ rps_peer->index);
+ (void) GNUNET_asprintf (&file_name_dhr,
+ "/tmp/rps/diehard_input_raw-%u",
+ rps_peer->index);
+ (void) GNUNET_asprintf (&file_name_dhru,
+ "/tmp/rps/diehard_input_raw_aligned-%u",
+ rps_peer->index);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"[%s] got %" PRIu64 " peers:\n",
GNUNET_i2s (rps_peer->peer_id),
tofile (file_name_dh,
"%" PRIu32 "\n",
(uint32_t) rcv_rps_peer->index);
+#ifdef TO_FILE
to_file_raw (file_name_dhr,
(char *) &rcv_rps_peer->index,
sizeof (uint32_t));
(char *) &rcv_rps_peer->index,
sizeof (uint32_t),
bits_needed);
+#endif /* TO_FILE */
}
default_reply_handle (cls, n, recv_peers);
}
/* Only request peer ids at one peer.
* (It's the before-last because last one is target of the focussed attack.)
*/
- if (eval_peer == rps_peer)
+ if (0 < rps_peer->num_ids_to_request)
schedule_missing_requests (rps_peer);
}
* #GNUNET_NO to stop iteration with no error,
* #GNUNET_SYSERR to abort iteration with error!
*/
-int
+static int
file_name_cb (void *cls, const char *filename)
{
if (NULL != strstr (filename, "sampler_el"))
*
* Compute all perfect samples.
*/
-int
+static int
profiler_eval (void)
{
+#ifdef TO_FILE
/* Compute perfect sample for each sampler element */
if (-1 == GNUNET_DISK_directory_scan ("/tmp/rps/", file_name_cb, NULL))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Scan of directory failed\n");
}
+#endif /* TO_FILE */
return evaluate ();
}
{
//GNUNET_assert (n >= k);
if (k > n) return 0;
- if (0 > n) return 0; /* just for clarity - always false */
- if (0 > k) return 0; /* just for clarity - always false */
+ /* if (0 > n) return 0; - always false */
+ /* if (0 > k) return 0; - always false */
if (0 == k) return 1;
return fac (n)
/
for (uint32_t i = 0; i < num_peers; i++)
{
to_file ("/tmp/rps/final_stats.csv",
- ", %" PRIu32 ", " /* index */
+ "%" PRIu32 ", " /* index */
"%s, %" /* id */
PRIu64 ", %" /* rounds */
PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" /* blocking */
- PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" /* issued */
- PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" /* sent */
- PRIu64 ", %" PRIu64 ", %" PRIu64 /* recv */,
+ PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" /* issued */
+ PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" /* sent */
+ PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" /* recv */
+ PRIu64 ", %" /* view size */
+ PRIu64 ", %" /* known peers */
+ PRIu64 ", %" /* valid peers */
+ PRIu64 ", %" /* learned peers */
+ PRIu64 ", %" /* pending online checks */
+ PRIu64 ", %" /* unrequested pull replies */
+ PRIu64 ", %" /* peers in push map */
+ PRIu64 ", %" /* peers in pull map */
+ PRIu64 ", %" /* peers in view */
+ PRIu64 "\n"/* view size aim */,
i,
GNUNET_i2s (rps_peers[i].peer_id),
rps_peers[i].stats[STAT_TYPE_ROUNDS],
rps_peers[i].stats[STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL],
rps_peers[i].stats[STAT_TYPE_ISSUED_PUSH_SEND],
rps_peers[i].stats[STAT_TYPE_ISSUED_PULL_REQ],
+ rps_peers[i].stats[STAT_TYPE_ISSUED_PULL_REQ_MH],
rps_peers[i].stats[STAT_TYPE_ISSUED_PULL_REP],
rps_peers[i].stats[STAT_TYPE_SENT_PUSH_SEND],
rps_peers[i].stats[STAT_TYPE_SENT_PULL_REQ],
+ rps_peers[i].stats[STAT_TYPE_SENT_PULL_REQ_MH],
rps_peers[i].stats[STAT_TYPE_SENT_PULL_REP],
rps_peers[i].stats[STAT_TYPE_RECV_PUSH_SEND],
rps_peers[i].stats[STAT_TYPE_RECV_PULL_REQ],
- rps_peers[i].stats[STAT_TYPE_RECV_PULL_REP]);
+ rps_peers[i].stats[STAT_TYPE_RECV_PULL_REQ_MH],
+ rps_peers[i].stats[STAT_TYPE_RECV_PULL_REP_MH],
+ rps_peers[i].stats[STAT_TYPE_RECV_PULL_REP],
+ rps_peers[i].stats[STAT_TYPE_VIEW_SIZE],
+ rps_peers[i].stats[STAT_TYPE_KNOWN_PEERS],
+ rps_peers[i].stats[STAT_TYPE_VALID_PEERS],
+ rps_peers[i].stats[STAT_TYPE_LEARND_PEERS],
+ rps_peers[i].stats[STAT_TYPE_PENDING_ONLINE_CHECKS],
+ rps_peers[i].stats[STAT_TYPE_UNREQUESTED_PULL_REPLIES],
+ rps_peers[i].stats[STAT_TYPE_PEERS_IN_PUSH_MAP],
+ rps_peers[i].stats[STAT_TYPE_PEERS_IN_PULL_MAP],
+ rps_peers[i].stats[STAT_TYPE_PEERS_IN_VIEW],
+ rps_peers[i].stats[STAT_TYPE_VIEW_SIZE_AIM]);
for (enum STAT_TYPE stat_type = STAT_TYPE_ROUNDS;
stat_type < STAT_TYPE_MAX;
stat_type++)
"SUM %"
PRIu64 " %" /* rounds */
PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" /* blocking */
- PRIu64 " %" PRIu64 " %" PRIu64 " %" /* issued */
- PRIu64 " %" PRIu64 " %" PRIu64 " %" /* sent */
- PRIu64 " %" PRIu64 " %" PRIu64 /* recv */,
+ PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" /* issued */
+ PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" /* sent */
+ PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" PRIu64 ", %" /* recv */
+ PRIu64 ", %" /* view size */
+ PRIu64 ", %" /* known peers */
+ PRIu64 ", %" /* valid peers */
+ PRIu64 ", %" /* learned peers */
+ PRIu64 ", %" /* pending online checks */
+ PRIu64 ", %" /* unrequested pull replies */
+ PRIu64 ", %" /* peers in push map */
+ PRIu64 ", %" /* peers in pull map */
+ PRIu64 ", %" /* peers in view */
+ PRIu64 "\n"/* view size aim */,
sums[STAT_TYPE_ROUNDS],
sums[STAT_TYPE_BLOCKS],
sums[STAT_TYPE_BLOCKS_MANY_PUSH],
sums[STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL],
sums[STAT_TYPE_ISSUED_PUSH_SEND],
sums[STAT_TYPE_ISSUED_PULL_REQ],
+ sums[STAT_TYPE_ISSUED_PULL_REQ_MH],
sums[STAT_TYPE_ISSUED_PULL_REP],
sums[STAT_TYPE_SENT_PUSH_SEND],
sums[STAT_TYPE_SENT_PULL_REQ],
+ sums[STAT_TYPE_SENT_PULL_REQ_MH],
sums[STAT_TYPE_SENT_PULL_REP],
sums[STAT_TYPE_RECV_PUSH_SEND],
sums[STAT_TYPE_RECV_PULL_REQ],
- sums[STAT_TYPE_RECV_PULL_REP]);
+ sums[STAT_TYPE_RECV_PULL_REQ_MH],
+ sums[STAT_TYPE_RECV_PULL_REP],
+ sums[STAT_TYPE_RECV_PULL_REP_MH],
+ sums[STAT_TYPE_VIEW_SIZE],
+ sums[STAT_TYPE_KNOWN_PEERS],
+ sums[STAT_TYPE_VALID_PEERS],
+ sums[STAT_TYPE_LEARND_PEERS],
+ sums[STAT_TYPE_PENDING_ONLINE_CHECKS],
+ sums[STAT_TYPE_UNREQUESTED_PULL_REPLIES],
+ sums[STAT_TYPE_PEERS_IN_PUSH_MAP],
+ sums[STAT_TYPE_PEERS_IN_PULL_MAP],
+ sums[STAT_TYPE_PEERS_IN_VIEW],
+ sums[STAT_TYPE_VIEW_SIZE_AIM]);
}
/**
GNUNET_TESTBED_operation_done (rps_peer->stat_op);
}
- //write_final_stats ();
+ write_final_stats ();
if (GNUNET_YES == check_statistics_collect_completed())
{
- write_final_stats ();
+ //write_final_stats ();
GNUNET_free (stat_cls);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Shutting down\n");
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "\tnum_peers: %" PRIu32 "\n", num_peers);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "\tpeers: %p\n", peers);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "\tlinks_succeeded: %u\n", links_succeeded);
+ ok = 1;
GNUNET_SCHEDULER_shutdown ();
return;
}
BIT(STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL) |
BIT(STAT_TYPE_ISSUED_PUSH_SEND) |
BIT(STAT_TYPE_ISSUED_PULL_REQ) |
+ BIT(STAT_TYPE_ISSUED_PULL_REQ_MH) |
BIT(STAT_TYPE_ISSUED_PULL_REP) |
BIT(STAT_TYPE_SENT_PUSH_SEND) |
BIT(STAT_TYPE_SENT_PULL_REQ) |
+ BIT(STAT_TYPE_SENT_PULL_REQ_MH) |
BIT(STAT_TYPE_SENT_PULL_REP) |
BIT(STAT_TYPE_RECV_PUSH_SEND) |
BIT(STAT_TYPE_RECV_PULL_REQ) |
- BIT(STAT_TYPE_RECV_PULL_REP);
+ BIT(STAT_TYPE_RECV_PULL_REQ_MH) |
+ BIT(STAT_TYPE_RECV_PULL_REP) |
+ BIT(STAT_TYPE_RECV_PULL_REP_MH) |
+ BIT(STAT_TYPE_VIEW_SIZE) |
+ BIT(STAT_TYPE_KNOWN_PEERS) |
+ BIT(STAT_TYPE_VALID_PEERS) |
+ BIT(STAT_TYPE_LEARND_PEERS) |
+ BIT(STAT_TYPE_PENDING_ONLINE_CHECKS) |
+ BIT(STAT_TYPE_UNREQUESTED_PULL_REPLIES) |
+ BIT(STAT_TYPE_PEERS_IN_PUSH_MAP) |
+ BIT(STAT_TYPE_PEERS_IN_PULL_MAP) |
+ BIT(STAT_TYPE_PEERS_IN_VIEW) |
+ BIT(STAT_TYPE_VIEW_SIZE_AIM);
cur_test_run.have_collect_view = COLLECT_VIEW;
/* 'Clean' directory */
if ( (2 == mal_type) ||
(3 == mal_type))
target_peer = &rps_peer_ids[num_peers - 2];
- if (profiler_eval == cur_test_run.eval_cb)
- eval_peer = &rps_peers[num_peers - 1]; /* FIXME: eval_peer could be a
- malicious peer if not careful
- with the malicious portion */
ok = 1;
GNUNET_TESTBED_run (NULL,