/*
This file is part of GNUnet.
- Copyright (C) 2009--2013 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2009--2015 Christian Grothoff (and other contributing authors)
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
* @file ats-tool/gnunet-ats.c
* @brief ATS command line tool
* @author Matthias Wachs
+ * @author Christian Grothoff
*/
#include "platform.h"
#include "gnunet_util_lib.h"
*/
static int stat_pending;
+/**
+ * Which peer should we connect to?
+ */
+static char *cpid_str;
+
/**
* ATS performance handle used
*/
static struct GNUNET_ATS_PerformanceHandle *ph;
+/**
+ * Our connectivity handle.
+ */
+static struct GNUNET_ATS_ConnectivityHandle *ats_ch;
+
+/**
+ * Handle for address suggestion request.
+ */
+static struct GNUNET_ATS_ConnectivitySuggestHandle *ats_sh;
+
/**
* ATS address list handle used
*/
void *value)
{
struct ATSAddress *a = value;
- GNUNET_assert (GNUNET_OK == GNUNET_CONTAINER_multipeermap_remove (addresses, key, value));
+
+ GNUNET_assert (GNUNET_OK ==
+ GNUNET_CONTAINER_multipeermap_remove (addresses,
+ key,
+ value));
GNUNET_HELLO_address_free (a->address);
GNUNET_free (a);
return GNUNET_OK;
FPRINTF (stdout,
_("ATS returned stat_results for %u addresses\n"),
stat_results);
+
+ if (NULL != ats_sh)
+ {
+ GNUNET_ATS_connectivity_suggest_cancel (ats_sh);
+ ats_sh = NULL;
+ }
+ if (NULL != ats_ch)
+ {
+ GNUNET_ATS_connectivity_done (ats_ch);
+ ats_ch = NULL;
+ }
ret = 0;
}
/**
- * Function called with the result from the test if ATS is
- * running. Runs the actual main logic.
+ * Main function that will be run by the scheduler.
*
- * @param cls the `struct GNUNET_CONFIGURATION_Handle *`
- * @param result result of the test, #GNUNET_YES if ATS is running
+ * @param cls closure
+ * @param args remaining command-line arguments
+ * @param cfgfile name of the configuration file used (for saving, can be NULL!)
+ * @param my_cfg configuration
*/
static void
-testservice_ats (void *cls,
- int result)
+run (void *cls,
+ char * const *args,
+ const char *cfgfile,
+ const struct GNUNET_CONFIGURATION_Handle *my_cfg)
{
- struct GNUNET_CONFIGURATION_Handle *cfg = cls;
struct GNUNET_PeerIdentity pid;
+ struct GNUNET_PeerIdentity cpid;
unsigned int c;
unsigned int type;
+ cfg = (struct GNUNET_CONFIGURATION_Handle *) my_cfg;
addresses = GNUNET_CONTAINER_multipeermap_create (10, GNUNET_NO);
-
- if (GNUNET_YES != result)
- {
- FPRINTF (stderr,
- _("Service `%s' is not running\n"),
- "ats");
- return;
- }
-
stat_results = 0;
+ c = 0;
if (NULL != opt_pid_str)
{
- if (GNUNET_OK
- != GNUNET_CRYPTO_eddsa_public_key_from_string (opt_pid_str,
- strlen (opt_pid_str), &pid.public_key))
+ if (GNUNET_OK !=
+ GNUNET_CRYPTO_eddsa_public_key_from_string (opt_pid_str,
+ strlen (opt_pid_str),
+ &pid.public_key))
{
FPRINTF (stderr,
_("Failed to parse peer identity `%s'\n"),
return;
}
}
+ if (NULL != cpid_str)
+ {
+ if (GNUNET_OK !=
+ GNUNET_CRYPTO_eddsa_public_key_from_string (cpid_str,
+ strlen (cpid_str),
+ &cpid.public_key))
+ {
+ FPRINTF (stderr,
+ _("Failed to parse peer identity `%s'\n"),
+ cpid_str);
+ return;
+ }
+ c++;
+ }
+
+ c += opt_list_all + opt_list_used + opt_monitor + opt_set_pref;
- c = opt_list_all + opt_list_used + opt_monitor + opt_set_pref;
- if ((1 < c))
+ if (1 < c)
{
FPRINTF (stderr,
- _("Please select one operation : %s or %s or %s or %s or %s\n"),
+ _("Please select one operation: %s or %s or %s or %s or %s\n"),
"--used",
"--all",
"--monitor",
"--quotas");
return;
}
- if ((0 == c))
+ if (0 == c)
opt_list_used = GNUNET_YES; /* set default */
if (opt_print_quotas)
{
_("Cannot connect to ATS service, exiting...\n"));
return;
}
-
alh = GNUNET_ATS_performance_list_addresses (ph,
(NULL == opt_pid_str) ? NULL : &pid,
GNUNET_YES,
return;
}
shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
- &end,
- NULL);
+ &end,
+ NULL);
+ return;
}
- else if (opt_list_used)
+ if (opt_list_used)
{
ph = GNUNET_ATS_performance_init (cfg, NULL, NULL);
if (NULL == ph)
shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
&end,
NULL);
+ return;
}
- else if (opt_monitor)
+ if (opt_monitor)
{
ph = GNUNET_ATS_performance_init (cfg,
&ats_perf_mon_cb,
"%s",
_("Cannot connect to ATS service, exiting...\n"));
shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
- &end,
- NULL);
-
+ &end,
+ NULL);
+ return;
}
- else if (opt_set_pref)
+ if (opt_set_pref)
{
if (NULL == opt_type_str)
{
GNUNET_ATS_PREFERENCE_END);
shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
- &end,
- NULL);
+ &end,
+ NULL);
+ return;
+ }
+ if (NULL != cpid_str)
+ {
+ ats_ch = GNUNET_ATS_connectivity_init (cfg);
+ ats_sh = GNUNET_ATS_connectivity_suggest (ats_ch,
+ &cpid,
+ 1000);
+ shutdown_task
+ = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+ &end,
+ NULL);
+ return;
}
ret = 1;
}
-/**
- * Main function that will be run by the scheduler.
- *
- * @param cls closure
- * @param args remaining command-line arguments
- * @param cfgfile name of the configuration file used (for saving, can be NULL!)
- * @param my_cfg configuration
- */
-static void
-run (void *cls,
- char * const *args,
- const char *cfgfile,
- const struct GNUNET_CONFIGURATION_Handle *my_cfg)
-{
- cfg = (struct GNUNET_CONFIGURATION_Handle *) my_cfg;
- GNUNET_CLIENT_service_test ("ats", cfg,
- GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5),
- &testservice_ats, (void *) cfg);
-}
-
-
/**
* The main function.
*
stat_receive_done = GNUNET_NO;
opt_type_str = NULL;
- static const struct GNUNET_GETOPT_CommandLineOption options[] =
- {
- { 'u', "used", NULL,
+ static const struct GNUNET_GETOPT_CommandLineOption options[] = {
+ { 'u', "used", NULL,
gettext_noop ("get list of active addresses currently used"), 0,
&GNUNET_GETOPT_set_one, &opt_list_used },
- { 'a', "all", NULL, gettext_noop ("get list of all active addresses"), 0,
+ { 'a', "all", NULL, gettext_noop ("get list of all active addresses"), 0,
&GNUNET_GETOPT_set_one, &opt_list_all },
- { 'n', "numeric", NULL,
+ { 'C', "connect", "PEER",
+ gettext_noop ("connect to PEER"), 1,
+ &GNUNET_GETOPT_set_string, &cpid_str },
+ { 'n', "numeric", NULL,
gettext_noop ("do not resolve IP addresses to hostnames"), 0,
&GNUNET_GETOPT_set_one, &opt_resolve_addresses_numeric },
- { 'm', "monitor", NULL, gettext_noop ("monitor mode"), 0,
+ { 'm', "monitor", NULL, gettext_noop ("monitor mode"), 0,
&GNUNET_GETOPT_set_one, &opt_monitor },
- { 'p', "preference", NULL, gettext_noop ("set preference for the given peer"),
+ { 'p', "preference", NULL, gettext_noop ("set preference for the given peer"),
0, &GNUNET_GETOPT_set_one, &opt_set_pref },
- { 'q', "quotas", NULL, gettext_noop ("print all configured quotas"), 0,
+ { 'q', "quotas", NULL, gettext_noop ("print all configured quotas"), 0,
&GNUNET_GETOPT_set_one, &opt_print_quotas },
- { 'i', "id", "TYPE", gettext_noop ("peer id"), 1, &GNUNET_GETOPT_set_string,
+ { 'i', "id", "TYPE", gettext_noop ("peer id"), 1, &GNUNET_GETOPT_set_string,
&opt_pid_str },
- { 't', "type", "TYPE",
+ { 't', "type", "TYPE",
gettext_noop ("preference type to set: latency | bandwidth"), 1,
&GNUNET_GETOPT_set_string, &opt_type_str },
- { 'k', "value", "VALUE", gettext_noop ("preference value"), 1,
+ { 'k', "value", "VALUE", gettext_noop ("preference value"), 1,
&GNUNET_GETOPT_set_uint, &opt_pref_value },
- { 'V', "verbose", NULL,
+ { 'V', "verbose", NULL,
gettext_noop ("verbose output (include ATS address properties)"), 0,
- &GNUNET_GETOPT_set_one, &opt_verbose }, GNUNET_GETOPT_OPTION_END };
+ &GNUNET_GETOPT_set_one, &opt_verbose },
+ GNUNET_GETOPT_OPTION_END
+ };
if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
return 2;
- res = GNUNET_PROGRAM_run (argc, argv, "gnunet-ats",
+ res = GNUNET_PROGRAM_run (argc, argv,
+ "gnunet-ats",
gettext_noop ("Print information about ATS state"),
options,
&run, NULL);
return ret;
else
return 1;
-
}
/* end of gnunet-ats.c */
#define RESOLUTION_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
/**
- * Timeout for an operations
+ * Timeout for an operation
*/
#define OP_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
static struct GNUNET_CONFIGURATION_Handle *cfg;
/**
- * Try connect handle
+ * Blacklisting handle
*/
-struct GNUNET_TRANSPORT_TryConnectHandle *tc_handle;
-
-/**
- * Try disconnect handle
- */
-struct GNUNET_TRANSPORT_TryDisconnectHandle *td_handle;
+struct GNUNET_TRANSPORT_Blacklist *blacklist;
/**
* Option -s.
*/
static int monitor_plugins;
-/**
- * Option -C.
- */
-static int try_connect;
-
/**
* Option -D.
*/
-static int try_disconnect;
+static int do_disconnect;
/**
* Option -n.
GNUNET_SCHEDULER_cancel (op_timeout);
op_timeout = NULL;
}
- if (NULL != tc_handle)
- {
- GNUNET_TRANSPORT_try_connect_cancel (tc_handle);
- tc_handle = NULL;
- }
if (NULL != pic)
{
GNUNET_TRANSPORT_monitor_peers_cancel (pic);
GNUNET_CONTAINER_multipeermap_destroy (monitored_plugins);
monitored_plugins = NULL;
}
+ if (NULL != blacklist)
+ {
+ GNUNET_TRANSPORT_blacklist_cancel (blacklist);
+ blacklist = NULL;
+ ret = 0;
+ }
}
+/**
+ * We are done, shut down.
+ */
static void
operation_timeout (void *cls,
const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct PeerResolutionContext *cur;
struct PeerResolutionContext *next;
+
op_timeout = NULL;
- if ((try_connect) || (benchmark_send) || (benchmark_receive))
+ if ((benchmark_send) || (benchmark_receive))
{
FPRINTF (stdout,
_("Failed to connect to `%s'\n"),
if (0 != memcmp (&pid, peer, sizeof(struct GNUNET_PeerIdentity)))
return;
ret = 0;
- if (try_connect)
- {
- /* all done, terminate instantly */
- FPRINTF (stdout, _("Successfully connected to `%s'\n"),
- GNUNET_i2s_full (peer));
- ret = 0;
-
- if (NULL != op_timeout)
- {
- GNUNET_SCHEDULER_cancel (op_timeout);
- op_timeout = NULL;
- }
-
- if (NULL != end)
- GNUNET_SCHEDULER_cancel (end);
- end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
- return;
- }
if (benchmark_send)
{
if (NULL != op_timeout)
if (0 != memcmp (&pid, peer, sizeof(struct GNUNET_PeerIdentity)))
return;
- if (try_disconnect)
- {
- /* all done, terminate instantly */
- FPRINTF (stdout, _("Successfully disconnected from `%s'\n"),
- GNUNET_i2s_full (peer));
- ret = 0;
-
- if (NULL != op_timeout)
- {
- GNUNET_SCHEDULER_cancel (op_timeout);
- op_timeout = NULL;
- }
-
- if (NULL != end)
- GNUNET_SCHEDULER_cancel (end);
- end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
- return;
- }
-
if (NULL != th)
{
GNUNET_TRANSPORT_notify_transmit_ready_cancel (th);
op_timeout = NULL;
}
ret = 0;
- end = GNUNET_SCHEDULER_add_now (&shutdown_task,
+ end = GNUNET_SCHEDULER_add_now (&shutdown_task,
NULL);
}
}
struct PeerResolutionContext *rc;
rc = GNUNET_new (struct PeerResolutionContext);
- GNUNET_CONTAINER_DLL_insert (rc_head,
+ GNUNET_CONTAINER_DLL_insert (rc_head,
rc_tail,
rc);
address_resolutions++;
address->transport_name);
if (NULL != address)
- resolve_peer_address (address,
- numeric,
+ resolve_peer_address (address,
+ numeric,
state,
state_timeout);
else
- print_info (peer,
+ print_info (peer,
NULL,
NULL,
state,
&operation_timeout,
NULL);
- if (NULL == (m = GNUNET_CONTAINER_multipeermap_get (monitored_peers,
+ if (NULL == (m = GNUNET_CONTAINER_multipeermap_get (monitored_peers,
peer)))
{
m = GNUNET_new (struct MonitoredPeer);
return; /* No real change */
}
if ( (m->state == state) &&
- (NULL != address) &&
+ (NULL != address) &&
(NULL != m->address) &&
(0 == GNUNET_HELLO_address_cmp(m->address, address)) )
return; /* No real change */
/**
- * Function called with our result of trying to connect to a peer
- * using the transport service. Will retry 10 times, and if we still
- * fail to connect terminate with an error message.
- *
- * @param cls NULL
- * @param result #GNUNET_OK if we connected to the service
- */
-static void
-try_connect_cb (void *cls,
- const int result)
-{
- static int retries = 0;
-
- tc_handle = NULL;
- if (GNUNET_OK == result)
- return;
- retries++;
- if (retries < 10)
- {
- tc_handle = GNUNET_TRANSPORT_try_connect (handle,
- &pid,
- &try_connect_cb,
- NULL);
- return;
- }
- FPRINTF (stderr,
- "%s",
- _("Failed to send connect request to transport service\n"));
- if (NULL != end)
- GNUNET_SCHEDULER_cancel (end);
- ret = 1;
- end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
-}
-
-
-/**
- * Function called with our result of trying to disconnect a peer
- * using the transport service. Will retry 10 times, and if we still
- * fail to disconnect, terminate with an error message.
+ * Function called with the transport service checking if we
+ * want to blacklist a peer. Return #GNUNET_SYSERR for the
+ * peer that we should disconnect from.
*
* @param cls NULL
- * @param result #GNUNET_OK if we connected to the service
+ * @param cpid peer to check blacklisting for
+ * @return #GNUNET_OK if the connection is allowed, #GNUNET_SYSERR if not
*/
-static void
-try_disconnect_cb (void *cls,
- const int result)
+static int
+blacklist_cb (void *cls,
+ const struct GNUNET_PeerIdentity *cpid)
{
- static int retries = 0;
-
- td_handle = NULL;
- if (GNUNET_OK == result)
- return;
- retries++;
- if (retries < 10)
- {
- td_handle = GNUNET_TRANSPORT_try_disconnect (handle,
- &pid,
- &try_disconnect_cb,
- NULL);
- return;
- }
- FPRINTF (stderr, "%s",
- _("Failed to send disconnect request to transport service\n"));
- if (NULL != end)
- GNUNET_SCHEDULER_cancel (end);
- ret = 1;
- end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+ if (0 == memcmp (cpid,
+ &pid,
+ sizeof (struct GNUNET_PeerIdentity)))
+ return GNUNET_SYSERR;
+ return GNUNET_OK;
}
return;
}
- if ((NULL != cpid)
- && (GNUNET_OK
- != GNUNET_CRYPTO_eddsa_public_key_from_string (cpid, strlen (cpid),
- &pid.public_key)))
+ if ( (NULL != cpid) &&
+ (GNUNET_OK !=
+ GNUNET_CRYPTO_eddsa_public_key_from_string (cpid,
+ strlen (cpid),
+ &pid.public_key)))
{
- FPRINTF (stderr, _("Failed to parse peer identity `%s'\n"), cpid);
+ FPRINTF (stderr,
+ _("Failed to parse peer identity `%s'\n"),
+ cpid);
return;
}
counter = benchmark_send + benchmark_receive + iterate_connections
- + monitor_connections + monitor_connects + try_connect + try_disconnect +
+ + monitor_connections + monitor_connects + do_disconnect +
+ iterate_validation + monitor_validation + monitor_plugins;
if (1 < counter)
{
FPRINTF (stderr,
- _("Multiple operations given. Please choose only one operation: %s, %s, %s, %s, %s, %s %s\n"),
- "connect", "benchmark send", "benchmark receive", "information",
+ _("Multiple operations given. Please choose only one operation: %s, %s, %s, %s, %s, %s %s\n"),
+ "disconnect", "benchmark send", "benchmark receive", "information",
"monitor", "events", "plugins");
return;
}
{
FPRINTF (stderr,
_("No operation given. Please choose one operation: %s, %s, %s, %s, %s, %s, %s\n"),
- "connect", "benchmark send", "benchmark receive", "information",
+ "disconnect", "benchmark send", "benchmark receive", "information",
"monitor", "events", "plugins");
return;
}
- if (try_connect) /* -C: Connect to peer */
+ if (do_disconnect) /* -D: Disconnect from peer */
{
if (NULL == cpid)
{
- FPRINTF (stderr, _("Option `%s' makes no sense without option `%s'.\n"),
- "-C", "-p");
- ret = 1;
- return;
- }
- handle = GNUNET_TRANSPORT_connect (cfg, NULL, NULL, ¬ify_receive,
- ¬ify_connect, ¬ify_disconnect);
- if (NULL == handle)
- {
- FPRINTF (stderr, "%s", _("Failed to connect to transport service\n"));
- ret = 1;
- return;
- }
- tc_handle = GNUNET_TRANSPORT_try_connect (handle, &pid, try_connect_cb,
- NULL);
- if (NULL == tc_handle)
- {
- FPRINTF (stderr, "%s",
- _("Failed to send request to transport service\n"));
- ret = 1;
- return;
- }
- op_timeout = GNUNET_SCHEDULER_add_delayed (OP_TIMEOUT, &operation_timeout,
- NULL);
-
- }
- else if (try_disconnect) /* -D: Disconnect from peer */
- {
- if (NULL == cpid)
- {
- FPRINTF (stderr, _("Option `%s' makes no sense without option `%s'.\n"),
- "-D", "-p");
- ret = 1;
- return;
- }
- handle = GNUNET_TRANSPORT_connect (cfg, NULL, NULL, ¬ify_receive,
- ¬ify_connect, ¬ify_disconnect);
- if (NULL == handle)
- {
- FPRINTF (stderr, "%s", _("Failed to connect to transport service\n"));
+ FPRINTF (stderr,
+ _("Option `%s' makes no sense without option `%s'.\n"),
+ "-D", "-p");
ret = 1;
return;
}
- td_handle = GNUNET_TRANSPORT_try_disconnect (handle, &pid,
- &try_disconnect_cb,
- NULL);
- if (NULL == td_handle)
+ blacklist = GNUNET_TRANSPORT_blacklist (cfg,
+ &blacklist_cb,
+ NULL);
+ if (NULL == blacklist)
{
- FPRINTF (stderr, "%s",
- _("Failed to send request to transport service\n"));
+ FPRINTF (stderr,
+ "%s",
+ _("Failed to connect to transport service for disconnection\n"));
ret = 1;
return;
}
- op_timeout = GNUNET_SCHEDULER_add_delayed (OP_TIMEOUT, &operation_timeout,
- NULL);
-
+ FPRINTF (stdout,
+ "%s",
+ _("Blacklisting request in place, stop with CTRL-C\n"));
}
else if (benchmark_send) /* -s: Benchmark sending */
{
ret = 1;
return;
}
- handle = GNUNET_TRANSPORT_connect (cfg, NULL, NULL,
+ handle = GNUNET_TRANSPORT_connect (cfg,
+ NULL,
+ NULL,
¬ify_receive,
¬ify_connect,
¬ify_disconnect);
ret = 1;
return;
}
- tc_handle = GNUNET_TRANSPORT_try_connect (handle,
- &pid,
- &try_connect_cb,
- NULL);
- if (NULL == tc_handle)
- {
- FPRINTF (stderr, "%s",
- _("Failed to send request to transport service\n"));
- ret = 1;
- return;
- }
start_time = GNUNET_TIME_absolute_get ();
op_timeout = GNUNET_SCHEDULER_add_delayed (OP_TIMEOUT,
&operation_timeout,
}
else if (benchmark_receive) /* -b: Benchmark receiving */
{
- handle = GNUNET_TRANSPORT_connect (cfg, NULL, NULL, ¬ify_receive, NULL,
- NULL);
+ handle = GNUNET_TRANSPORT_connect (cfg,
+ NULL,
+ NULL,
+ ¬ify_receive,
+ NULL,
+ NULL);
if (NULL == handle)
{
FPRINTF (stderr, "%s", _("Failed to connect to transport service\n"));
address_resolution_in_progress = GNUNET_YES;
pic = GNUNET_TRANSPORT_monitor_peers (cfg, (NULL == cpid) ? NULL : &pid,
GNUNET_YES, TIMEOUT, &process_peer_iteration_cb, (void *) cfg);
- op_timeout = GNUNET_SCHEDULER_add_delayed (OP_TIMEOUT, &operation_timeout,
- NULL);
+ op_timeout = GNUNET_SCHEDULER_add_delayed (OP_TIMEOUT,
+ &operation_timeout,
+ NULL);
}
else if (monitor_connections) /* -m: List information about peers continuously */
{
- monitored_peers = GNUNET_CONTAINER_multipeermap_create (10,
+ monitored_peers = GNUNET_CONTAINER_multipeermap_create (10,
GNUNET_NO);
address_resolution_in_progress = GNUNET_YES;
- pic = GNUNET_TRANSPORT_monitor_peers (cfg,
+ pic = GNUNET_TRANSPORT_monitor_peers (cfg,
(NULL == cpid) ? NULL : &pid,
- GNUNET_NO,
+ GNUNET_NO,
TIMEOUT,
&process_peer_monitoring_cb, NULL);
}
{ 'b', "benchmark", NULL,
gettext_noop ("measure how fast we are receiving data from all peers (until CTRL-C)"),
0, &GNUNET_GETOPT_set_one, &benchmark_receive },
- { 'C', "connect",
- NULL, gettext_noop ("connect to a peer"), 0,
- &GNUNET_GETOPT_set_one, &try_connect },
{ 'D', "disconnect",
NULL, gettext_noop ("disconnect to a peer"), 0,
- &GNUNET_GETOPT_set_one, &try_disconnect },
+ &GNUNET_GETOPT_set_one, &do_disconnect },
{ 'd', "validation", NULL,
gettext_noop ("print information for all pending validations "),
0, &GNUNET_GETOPT_set_one, &iterate_validation },