GNUnet  0.10.x
Data Structures | Macros | Functions | Variables
gnunet-nse-profiler.c File Reference

Profiling driver for the network size estimation service. More...

#include "platform.h"
#include "gnunet_testbed_service.h"
#include "gnunet_nse_service.h"
Include dependency graph for gnunet-nse-profiler.c:

Go to the source code of this file.

Data Structures

struct  NSEPeer
 Information we track for a peer in the testbed. More...
 
struct  OpListEntry
 Operation map entry. More...
 

Macros

#define LOG(kind, ...)   GNUNET_log(kind, __VA_ARGS__)
 Generic loggins shorthand. More...
 
#define LOG_DEBUG(...)   LOG(GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__)
 Debug logging shorthand. More...
 

Functions

static void close_monitor_connections ()
 Clean up all of the monitoring connections to NSE and STATISTICS that we keep to selected peers. More...
 
static void shutdown_task (void *cls)
 Task run on shutdown; cleans up everything. More...
 
static void handle_estimate (void *cls, struct GNUNET_TIME_Absolute timestamp, double estimate, double std_dev)
 Callback to call when network size estimate is updated. More...
 
static void * nse_connect_adapter (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg)
 Adapter function called to establish a connection to NSE service. More...
 
static void nse_disconnect_adapter (void *cls, void *op_result)
 Adapter function called to destroy a connection to NSE service. More...
 
static int stat_iterator (void *cls, const char *subsystem, const char *name, uint64_t value, int is_persistent)
 Callback function to process statistic values. More...
 
static void * stat_connect_adapter (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg)
 Called to open a connection to the peer's statistics. More...
 
static void stat_disconnect_adapter (void *cls, void *op_result)
 Called to disconnect from peer's statistics service. More...
 
static void stat_comp_cb (void *cls, struct GNUNET_TESTBED_Operation *op, void *ca_result, const char *emsg)
 Called after successfully opening a connection to a peer's statistics service; we register statistics monitoring for CORE and NSE here. More...
 
static void connect_nse_service ()
 Task run to connect to the NSE and statistics services to a subset of all of the running peers. More...
 
static void next_round (void *cls)
 Task that starts/stops peers to move to the next round. More...
 
static void finish_round (void *cls)
 We're at the end of a round. More...
 
static void run_round ()
 We have reached the desired number of peers for the current round. More...
 
static struct OpListEntrymake_oplist_entry ()
 Creates an oplist entry and adds it to the oplist DLL. More...
 
static void manage_service_cb (void *cls, struct GNUNET_TESTBED_Operation *op, const char *emsg)
 Callback to be called when NSE service is started or stopped at peers. More...
 
static void adjust_running_peers ()
 Adjust the number of running peers to match the required number of running peers for the round. More...
 
static void master_controller_cb (void *cls, const struct GNUNET_TESTBED_EventInformation *event)
 Function that will be called whenever something in the testbed changes. More...
 
static void test_master (void *cls, struct GNUNET_TESTBED_RunHandle *h, unsigned int num_peers_, struct GNUNET_TESTBED_Peer **peers, unsigned int links_succeeded, unsigned int links_failed)
 Signature of a main function for a testcase. More...
 
static void run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
 Actual main function that runs the emulation. More...
 
int main (int argc, char *const *argv)
 Main function. More...
 

Variables

static struct NSEPeerpeer_head
 Head of DLL of peers we monitor closely. More...
 
static struct NSEPeerpeer_tail
 Tail of DLL of peers we monitor closely. More...
 
static int ok
 Return value from 'main' (0 == success) More...
 
static unsigned int verbose
 Be verbose (configuration option) More...
 
static char * hosts_file
 Name of the file with the hosts to run the test over (configuration option) More...
 
static unsigned int num_peers
 Maximum number of peers in the test. More...
 
static unsigned int num_rounds
 Total number of rounds to execute. More...
 
static unsigned int current_round
 Current round we are in. More...
 
static unsigned int * num_peers_in_round
 Array of size 'num_rounds' with the requested number of peers in the given round. More...
 
static unsigned int peers_running
 How many peers are running right now? More...
 
static char * num_peer_spec
 Specification for the numbers of peers to have in each round. More...
 
static struct GNUNET_TESTBED_Peer ** daemons
 Handles to all of the running peers. More...
 
static struct GNUNET_CONFIGURATION_Handletesting_cfg
 Global configuration file. More...
 
static unsigned int connection_limit
 Maximum number of connections to NSE services. More...
 
static unsigned int total_connections
 Total number of connections in the whole network. More...
 
static struct GNUNET_DISK_FileHandleoutput_file
 File to report results to. More...
 
static char * output_filename
 Filename to log results to. More...
 
static struct GNUNET_DISK_FileHandledata_file
 File to log connection info, statistics to. More...
 
static char * data_filename
 Filename to log connection info, statistics to. More...
 
static struct GNUNET_TIME_Relative wait_time = { 60 * 1000 }
 How long to wait before triggering next round? Default: 60 s. More...
 
static struct OpListEntryoplist_head
 DLL head for operation list. More...
 
static struct OpListEntryoplist_tail
 DLL tail for operation list. More...
 
static struct GNUNET_SCHEDULER_Taskround_task
 Task running each round of the experiment. More...
 

Detailed Description

Profiling driver for the network size estimation service.

Generally, the profiler starts a given number of peers, then churns some off, waits a certain amount of time, then churns again, and repeats.

Author
Christian Grothoff
Nathan Evans
Sree Harsha Totakura

Definition in file gnunet-nse-profiler.c.

Macro Definition Documentation

◆ LOG

#define LOG (   kind,
  ... 
)    GNUNET_log(kind, __VA_ARGS__)

Generic loggins shorthand.

Definition at line 39 of file gnunet-nse-profiler.c.

Referenced by finish_round(), and manage_service_cb().

◆ LOG_DEBUG

#define LOG_DEBUG (   ...)    LOG(GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__)

Function Documentation

◆ close_monitor_connections()

static void close_monitor_connections ( )
static

Clean up all of the monitoring connections to NSE and STATISTICS that we keep to selected peers.

Definition at line 232 of file gnunet-nse-profiler.c.

References GNUNET_CONTAINER_DLL_remove, GNUNET_free, GNUNET_TESTBED_operation_done(), NSEPeer::nse_op, OpListEntry::op, and NSEPeer::stat_op.

Referenced by finish_round(), and shutdown_task().

233 {
234  struct NSEPeer *pos;
235  struct OpListEntry *oplist_entry;
236 
237  while (NULL != (pos = peer_head))
238  {
239  if (NULL != pos->nse_op)
241  if (NULL != pos->stat_op)
244  GNUNET_free(pos);
245  }
246  while (NULL != (oplist_entry = oplist_head))
247  {
249  GNUNET_TESTBED_operation_done(oplist_entry->op);
250  GNUNET_free(oplist_entry);
251  }
252 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
static struct NSEPeer * peer_head
Head of DLL of peers we monitor closely.
static struct OpListEntry * oplist_head
DLL head for operation list.
struct GNUNET_TESTBED_Operation * nse_op
Testbed operation to connect to NSE service.
Information we track for a peer in the testbed.
static struct OpListEntry * oplist_tail
DLL tail for operation list.
Operation map entry.
static struct NSEPeer * peer_tail
Tail of DLL of peers we monitor closely.
void GNUNET_TESTBED_operation_done(struct GNUNET_TESTBED_Operation *operation)
This function is used to signal that the event information (struct GNUNET_TESTBED_EventInformation) f...
Definition: testbed_api.c:2037
struct GNUNET_TESTBED_Operation * stat_op
Testbed operation to connect to statistics service.
struct GNUNET_TESTBED_Operation * op
The testbed operation.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ shutdown_task()

static void shutdown_task ( void *  cls)
static

Task run on shutdown; cleans up everything.

Parameters
clsunused

Definition at line 261 of file gnunet-nse-profiler.c.

References close_monitor_connections(), GNUNET_CONFIGURATION_destroy(), GNUNET_DISK_file_close(), GNUNET_SCHEDULER_cancel(), and LOG_DEBUG.

Referenced by run().

262 {
263  LOG_DEBUG("Ending test.\n");
265  if (NULL != round_task)
266  {
268  round_task = NULL;
269  }
270  if (NULL != data_file)
271  {
273  data_file = NULL;
274  }
275  if (NULL != output_file)
276  {
278  output_file = NULL;
279  }
280  if (NULL != testing_cfg)
281  {
283  testing_cfg = NULL;
284  }
285 }
static void close_monitor_connections()
Clean up all of the monitoring connections to NSE and STATISTICS that we keep to selected peers...
int GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1339
static struct GNUNET_DISK_FileHandle * data_file
File to log connection info, statistics to.
static struct GNUNET_SCHEDULER_Task * round_task
Task running each round of the experiment.
void GNUNET_CONFIGURATION_destroy(struct GNUNET_CONFIGURATION_Handle *cfg)
Destroy configuration object.
static struct GNUNET_CONFIGURATION_Handle * testing_cfg
Global configuration file.
#define LOG_DEBUG(...)
Debug logging shorthand.
static struct GNUNET_DISK_FileHandle * output_file
File to report results to.
void * GNUNET_SCHEDULER_cancel(struct GNUNET_SCHEDULER_Task *task)
Cancel the task with the specified identifier.
Definition: scheduler.c:956
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_estimate()

static void handle_estimate ( void *  cls,
struct GNUNET_TIME_Absolute  timestamp,
double  estimate,
double  std_dev 
)
static

Callback to call when network size estimate is updated.

Parameters
clsclosure with the 'struct NSEPeer' providing the update
timestampserver timestamp
estimatethe value of the current network size estimate
std_devstandard deviation (rounded down to nearest integer) of the size estimation values seen

Definition at line 298 of file gnunet-nse-profiler.c.

References GNUNET_TIME_Absolute::abs_value_us, GNUNET_DISK_file_write(), GNUNET_ERROR_TYPE_WARNING, GNUNET_log, GNUNET_NSE_log_estimate_to_n, GNUNET_snprintf(), peer, peers_running, and size.

Referenced by nse_connect_adapter().

302 {
303  struct NSEPeer *peer = cls;
304  char output_buffer[512];
305  size_t size;
306 
307  if (NULL == output_file)
308  {
309  fprintf(stderr,
310  "Received network size estimate from peer %p. Size: %f std.dev. %f\n",
311  peer,
312  estimate,
313  std_dev);
314  return;
315  }
316  size = GNUNET_snprintf(output_buffer,
317  sizeof(output_buffer),
318  "%p %llu %llu %f %f %f\n",
319  peer,
321  (unsigned long long)timestamp.abs_value_us,
323  estimate,
324  std_dev);
325  if (size != GNUNET_DISK_file_write(output_file, output_buffer, size))
326  GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Unable to write to file!\n");
327 }
int GNUNET_snprintf(char *buf, size_t size, const char *format,...)
Like snprintf, just aborts if the buffer is of insufficient size.
uint64_t abs_value_us
The actual value.
Information we track for a peer in the testbed.
ssize_t GNUNET_DISK_file_write(const struct GNUNET_DISK_FileHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: disk.c:817
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
static unsigned int size
Size of the "table".
Definition: peer.c:66
#define GNUNET_log(kind,...)
static unsigned int peers_running
How many peers are running right now?
#define GNUNET_NSE_log_estimate_to_n(loge)
Convert the logarithmic estimated returned to the 'GNUNET_NSE_Callback' into an absolute estimate in ...
static struct GNUNET_DISK_FileHandle * output_file
File to report results to.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nse_connect_adapter()

static void* nse_connect_adapter ( void *  cls,
const struct GNUNET_CONFIGURATION_Handle cfg 
)
static

Adapter function called to establish a connection to NSE service.

Parameters
clsclosure (the 'struct NSEPeer')
cfgconfiguration of the peer to connect to; will be available until GNUNET_TESTBED_operation_done() is called on the operation returned from GNUNET_TESTBED_service_connect()
Returns
service handle to return in 'op_result', NULL on error

Definition at line 341 of file gnunet-nse-profiler.c.

References GNUNET_NSE_connect(), and handle_estimate().

Referenced by connect_nse_service().

342 {
343  struct NSEPeer *current_peer = cls;
344 
345  return GNUNET_NSE_connect(cfg, &handle_estimate, current_peer);
346 }
struct GNUNET_NSE_Handle * GNUNET_NSE_connect(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_NSE_Callback func, void *func_cls)
Connect to the network size estimation service.
Definition: nse_api.c:164
Information we track for a peer in the testbed.
static void handle_estimate(void *cls, struct GNUNET_TIME_Absolute timestamp, double estimate, double std_dev)
Callback to call when network size estimate is updated.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nse_disconnect_adapter()

static void nse_disconnect_adapter ( void *  cls,
void *  op_result 
)
static

Adapter function called to destroy a connection to NSE service.

Parameters
clsclosure
op_resultservice handle returned from the connect adapter

Definition at line 357 of file gnunet-nse-profiler.c.

References GNUNET_NSE_disconnect().

Referenced by connect_nse_service().

358 {
360 }
static int op_result(struct GNUNET_OP_Handle *h, uint64_t op_id, int64_t result_code, const void *data, uint16_t data_size, void **ctx, uint8_t cancel)
Remove an operation, and call its result callback (unless it was cancelled).
Definition: op.c:243
void GNUNET_NSE_disconnect(struct GNUNET_NSE_Handle *h)
Disconnect from network size estimation service.
Definition: nse_api.c:192
Here is the call graph for this function:
Here is the caller graph for this function:

◆ stat_iterator()

static int stat_iterator ( void *  cls,
const char *  subsystem,
const char *  name,
uint64_t  value,
int  is_persistent 
)
static

Callback function to process statistic values.

Parameters
clsstruct NSEPeer
subsystemname of subsystem that created the statistic
namethe name of the datum
valuethe current value
is_persistentGNUNET_YES if the value is persistent, GNUNET_NO if not
Returns
GNUNET_OK to continue, GNUNET_SYSERR to abort iteration

Definition at line 374 of file gnunet-nse-profiler.c.

References GNUNET_TIME_Absolute::abs_value_us, GNUNET_asprintf(), GNUNET_assert, GNUNET_DISK_file_write(), GNUNET_ERROR_TYPE_WARNING, GNUNET_free, GNUNET_log, GNUNET_OK, GNUNET_SYSERR, GNUNET_TIME_absolute_get(), and size.

Referenced by stat_comp_cb(), and stat_disconnect_adapter().

379 {
380  char *output_buffer;
381  struct GNUNET_TIME_Absolute now;
382  int size;
383  unsigned int flag;
384 
385  GNUNET_assert(NULL != data_file);
386  now = GNUNET_TIME_absolute_get();
387  flag = strcasecmp(subsystem, "core");
388  if (0 != flag)
389  flag = 1;
390  size = GNUNET_asprintf(&output_buffer,
391  "%llu %llu %u\n",
392  now.abs_value_us / 1000LL / 1000LL,
393  value,
394  flag);
395  if (0 > size)
396  {
397  GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Error formatting output buffer.\n");
398  GNUNET_free(output_buffer);
399  return GNUNET_SYSERR;
400  }
401  if (size != GNUNET_DISK_file_write(data_file, output_buffer, (size_t)size))
402  {
403  GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Unable to write to file!\n");
404  GNUNET_free(output_buffer);
405  return GNUNET_SYSERR;
406  }
407  GNUNET_free(output_buffer);
408  return GNUNET_OK;
409 }
static char * subsystem
Set to subsystem that we're going to get stats for (or NULL for all).
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
static struct GNUNET_DISK_FileHandle * data_file
File to log connection info, statistics to.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
int GNUNET_asprintf(char **buf, const char *format,...)
Like asprintf, just portable.
static char * value
Value of the record to add/remove.
ssize_t GNUNET_DISK_file_write(const struct GNUNET_DISK_FileHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: disk.c:817
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get(void)
Get the current time.
Definition: time.c:118
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static unsigned int size
Size of the "table".
Definition: peer.c:66
#define GNUNET_log(kind,...)
Time for absolute times used by GNUnet, in microseconds.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ stat_connect_adapter()

static void* stat_connect_adapter ( void *  cls,
const struct GNUNET_CONFIGURATION_Handle cfg 
)
static

Called to open a connection to the peer's statistics.

Parameters
clspeer context
cfgconfiguration of the peer to connect to; will be available until GNUNET_TESTBED_operation_done() is called on the operation returned from GNUNET_TESTBED_service_connect()
Returns
service handle to return in 'op_result', NULL on error

Definition at line 422 of file gnunet-nse-profiler.c.

References GNUNET_STATISTICS_create(), peer, and NSEPeer::sh.

Referenced by connect_nse_service().

423 {
424  struct NSEPeer *peer = cls;
425 
426  peer->sh = GNUNET_STATISTICS_create("nse-profiler", cfg);
427  return peer->sh;
428 }
struct GNUNET_STATISTICS_Handle * GNUNET_STATISTICS_create(const char *subsystem, const struct GNUNET_CONFIGURATION_Handle *cfg)
Get handle for the statistics service.
Information we track for a peer in the testbed.
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
struct GNUNET_STATISTICS_Handle * sh
Handle to the statistics service.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ stat_disconnect_adapter()

static void stat_disconnect_adapter ( void *  cls,
void *  op_result 
)
static

Called to disconnect from peer's statistics service.

Parameters
clspeer context
op_resultservice handle returned from the connect adapter

Definition at line 438 of file gnunet-nse-profiler.c.

References GNUNET_break, GNUNET_NO, GNUNET_OK, GNUNET_STATISTICS_destroy(), GNUNET_STATISTICS_watch_cancel(), peer, NSEPeer::sh, and stat_iterator().

Referenced by connect_nse_service().

439 {
440  struct NSEPeer *peer = cls;
441 
444  "core",
445  "# peers connected",
447  peer));
450  "nse",
451  "# peers connected",
453  peer));
455  peer->sh = NULL;
456 }
static int op_result(struct GNUNET_OP_Handle *h, uint64_t op_id, int64_t result_code, const void *data, uint16_t data_size, void **ctx, uint8_t cancel)
Remove an operation, and call its result callback (unless it was cancelled).
Definition: op.c:243
#define GNUNET_NO
Definition: gnunet_common.h:78
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
void GNUNET_STATISTICS_destroy(struct GNUNET_STATISTICS_Handle *h, int sync_first)
Destroy a handle (free all state associated with it).
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
Information we track for a peer in the testbed.
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
struct GNUNET_STATISTICS_Handle * sh
Handle to the statistics service.
int GNUNET_STATISTICS_watch_cancel(struct GNUNET_STATISTICS_Handle *handle, const char *subsystem, const char *name, GNUNET_STATISTICS_Iterator proc, void *proc_cls)
Stop watching statistics from the peer.
static int stat_iterator(void *cls, const char *subsystem, const char *name, uint64_t value, int is_persistent)
Callback function to process statistic values.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ stat_comp_cb()

static void stat_comp_cb ( void *  cls,
struct GNUNET_TESTBED_Operation op,
void *  ca_result,
const char *  emsg 
)
static

Called after successfully opening a connection to a peer's statistics service; we register statistics monitoring for CORE and NSE here.

Parameters
clsthe callback closure from functions generating an operation
opthe operation that has been finished
ca_resultthe service handle returned from GNUNET_TESTBED_ConnectAdapter()
emsgerror message in case the operation has failed; will be NULL if operation has executed successfully.

Definition at line 470 of file gnunet-nse-profiler.c.

References GNUNET_break, GNUNET_OK, GNUNET_STATISTICS_watch(), peer, NSEPeer::sh, and stat_iterator().

Referenced by connect_nse_service().

474 {
475  struct GNUNET_STATISTICS_Handle *sh = ca_result;
476  struct NSEPeer *peer = cls;
477 
478  if (NULL != emsg)
479  {
480  GNUNET_break(0);
481  return;
482  }
484  "core",
485  "# peers connected",
487  peer));
489  "nse",
490  "# peers connected",
492  peer));
493 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
Handle for the service.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
Information we track for a peer in the testbed.
static struct SolverHandle * sh
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
int GNUNET_STATISTICS_watch(struct GNUNET_STATISTICS_Handle *handle, const char *subsystem, const char *name, GNUNET_STATISTICS_Iterator proc, void *proc_cls)
Watch statistics from the peer (be notified whenever they change).
static int stat_iterator(void *cls, const char *subsystem, const char *name, uint64_t value, int is_persistent)
Callback function to process statistic values.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ connect_nse_service()

static void connect_nse_service ( )
static

Task run to connect to the NSE and statistics services to a subset of all of the running peers.

Definition at line 501 of file gnunet-nse-profiler.c.

References connection_limit, connections, current_round, NSEPeer::daemon, GNUNET_CONTAINER_DLL_insert, GNUNET_new, GNUNET_TESTBED_service_connect(), LOG_DEBUG, next_round(), nse_connect_adapter(), nse_disconnect_adapter(), NSEPeer::nse_op, num_peers_in_round, stat_comp_cb(), stat_connect_adapter(), stat_disconnect_adapter(), and NSEPeer::stat_op.

Referenced by run_round().

502 {
503  struct NSEPeer *current_peer;
504  unsigned int i;
505  unsigned int connections;
506 
507  if (0 == connection_limit)
508  return;
509  LOG_DEBUG("Connecting to nse service of peers\n");
510  connections = 0;
511  for (i = 0; i < num_peers_in_round[current_round]; i++)
512  {
513  if ((num_peers_in_round[current_round] > connection_limit) &&
514  (0 != (i % (num_peers_in_round[current_round] / connection_limit))))
515  continue;
516  LOG_DEBUG("Connecting to nse service of peer %d\n", i);
517  current_peer = GNUNET_new(struct NSEPeer);
518  current_peer->daemon = daemons[i];
519  current_peer->nse_op =
521  current_peer->daemon,
522  "nse",
523  NULL,
524  NULL,
527  current_peer);
528  if (NULL != data_file)
529  current_peer->stat_op =
531  current_peer->daemon,
532  "statistics",
533  stat_comp_cb,
534  current_peer,
537  current_peer);
539  if (++connections == connection_limit)
540  break;
541  }
542 }
static struct GNUNET_TESTBED_Peer ** daemons
Handles to all of the running peers.
#define GNUNET_CONTAINER_DLL_insert(head, tail, element)
Insert an element at the head of a DLL.
static unsigned int current_round
Current round we are in.
static struct NSEPeer * peer_head
Head of DLL of peers we monitor closely.
static void * stat_connect_adapter(void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg)
Called to open a connection to the peer&#39;s statistics.
static struct GNUNET_DISK_FileHandle * data_file
File to log connection info, statistics to.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
struct GNUNET_CONTAINER_MultiShortmap * connections
Map from struct GNUNET_CADET_ConnectionTunnelIdentifier hash codes to struct CadetConnection objects...
struct GNUNET_TESTBED_Operation * nse_op
Testbed operation to connect to NSE service.
struct GNUNET_TESTBED_Operation * GNUNET_TESTBED_service_connect(void *op_cls, struct GNUNET_TESTBED_Peer *peer, const char *service_name, GNUNET_TESTBED_ServiceConnectCompletionCallback cb, void *cb_cls, GNUNET_TESTBED_ConnectAdapter ca, GNUNET_TESTBED_DisconnectAdapter da, void *cada_cls)
Connect to a service offered by the given peer.
Information we track for a peer in the testbed.
struct GNUNET_TESTBED_Peer * daemon
Handle with testbed.
static struct NSEPeer * peer_tail
Tail of DLL of peers we monitor closely.
static unsigned int connection_limit
Maximum number of connections to NSE services.
static void stat_comp_cb(void *cls, struct GNUNET_TESTBED_Operation *op, void *ca_result, const char *emsg)
Called after successfully opening a connection to a peer&#39;s statistics service; we register statistics...
static unsigned int * num_peers_in_round
Array of size &#39;num_rounds&#39; with the requested number of peers in the given round. ...
static void nse_disconnect_adapter(void *cls, void *op_result)
Adapter function called to destroy a connection to NSE service.
static void * nse_connect_adapter(void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg)
Adapter function called to establish a connection to NSE service.
struct GNUNET_TESTBED_Operation * stat_op
Testbed operation to connect to statistics service.
#define LOG_DEBUG(...)
Debug logging shorthand.
static void stat_disconnect_adapter(void *cls, void *op_result)
Called to disconnect from peer&#39;s statistics service.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ next_round()

static void next_round ( void *  cls)
static

Task that starts/stops peers to move to the next round.

Task run at the end of a round.

Parameters
clsNULL, unused

Disconnect from all monitored peers; then get statistics from all peers.

Parameters
clsNULL, unused

Definition at line 672 of file gnunet-nse-profiler.c.

References adjust_running_peers(), current_round, GNUNET_SCHEDULER_shutdown(), LOG_DEBUG, num_peers_in_round, num_rounds, ok, peers_running, and run_round().

Referenced by connect_nse_service(), and finish_round().

673 {
674  round_task = NULL;
675  LOG_DEBUG("Disconnecting nse service of peers\n");
676  current_round++;
677  if (current_round == num_rounds)
678  {
679  /* this was the last round, terminate */
680  ok = 0;
682  return;
683  }
685  {
686  /* no need to churn, just run next round */
687  run_round();
688  return;
689  }
691 }
static unsigned int current_round
Current round we are in.
static int ok
Return value from &#39;main&#39; (0 == success)
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
static struct GNUNET_SCHEDULER_Task * round_task
Task running each round of the experiment.
static void adjust_running_peers()
Adjust the number of running peers to match the required number of running peers for the round...
static unsigned int num_rounds
Total number of rounds to execute.
static unsigned int * num_peers_in_round
Array of size &#39;num_rounds&#39; with the requested number of peers in the given round. ...
static void run_round()
We have reached the desired number of peers for the current round.
static unsigned int peers_running
How many peers are running right now?
#define LOG_DEBUG(...)
Debug logging shorthand.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ finish_round()

static void finish_round ( void *  cls)
static

We're at the end of a round.

Stop monitoring, write total number of connections to log and get full stats. Then trigger the next round.

Parameters
clsunused, NULL

Definition at line 562 of file gnunet-nse-profiler.c.

References close_monitor_connections(), GNUNET_ERROR_TYPE_INFO, GNUNET_SCHEDULER_add_now(), LOG, next_round(), and total_connections.

Referenced by run_round().

563 {
564  LOG(GNUNET_ERROR_TYPE_INFO, "Have %u connections\n", total_connections);
567 }
static void close_monitor_connections()
Clean up all of the monitoring connections to NSE and STATISTICS that we keep to selected peers...
static void next_round(void *cls)
Task that starts/stops peers to move to the next round.
static struct GNUNET_SCHEDULER_Task * round_task
Task running each round of the experiment.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_now(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run as soon as possible.
Definition: scheduler.c:1264
static unsigned int total_connections
Total number of connections in the whole network.
#define LOG(kind,...)
Generic loggins shorthand.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ run_round()

static void run_round ( )
static

We have reached the desired number of peers for the current round.

Run it (by connecting and monitoring a few peers and waiting the specified delay before finishing the round).

Definition at line 576 of file gnunet-nse-profiler.c.

References connect_nse_service(), current_round, finish_round(), GNUNET_SCHEDULER_add_delayed(), and LOG_DEBUG.

Referenced by manage_service_cb(), next_round(), and test_master().

577 {
578  LOG_DEBUG("Running round %u\n", current_round);
581 }
static unsigned int current_round
Current round we are in.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_delayed(struct GNUNET_TIME_Relative delay, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay.
Definition: scheduler.c:1237
static struct GNUNET_TIME_Relative wait_time
How long to wait before triggering next round? Default: 60 s.
static void finish_round(void *cls)
We&#39;re at the end of a round.
static void connect_nse_service()
Task run to connect to the NSE and statistics services to a subset of all of the running peers...
#define LOG_DEBUG(...)
Debug logging shorthand.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ make_oplist_entry()

static struct OpListEntry* make_oplist_entry ( )
static

Creates an oplist entry and adds it to the oplist DLL.

Definition at line 588 of file gnunet-nse-profiler.c.

References GNUNET_CONTAINER_DLL_insert_tail, and GNUNET_new.

Referenced by adjust_running_peers().

589 {
590  struct OpListEntry *entry;
591 
592  entry = GNUNET_new(struct OpListEntry);
594  return entry;
595 }
#define GNUNET_new(type)
Allocate a struct or union of the given type.
static struct OpListEntry * oplist_head
DLL head for operation list.
static struct OpListEntry * oplist_tail
DLL tail for operation list.
Operation map entry.
#define GNUNET_CONTAINER_DLL_insert_tail(head, tail, element)
Insert an element at the tail of a DLL.
Here is the caller graph for this function:

◆ manage_service_cb()

static void manage_service_cb ( void *  cls,
struct GNUNET_TESTBED_Operation op,
const char *  emsg 
)
static

Callback to be called when NSE service is started or stopped at peers.

Parameters
clsNULL
opthe operation handle
emsgNULL on success; otherwise an error description

Definition at line 606 of file gnunet-nse-profiler.c.

References current_round, OpListEntry::delta, GNUNET_assert, GNUNET_CONTAINER_DLL_remove, GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_SCHEDULER_shutdown(), GNUNET_TESTBED_operation_done(), LOG, num_peers_in_round, OpListEntry::op, peers_running, and run_round().

Referenced by adjust_running_peers().

609 {
610  struct OpListEntry *entry = cls;
611 
613  if (NULL != emsg)
614  {
615  LOG(GNUNET_ERROR_TYPE_ERROR, "Failed to start/stop NSE at a peer\n");
617  return;
618  }
619  GNUNET_assert(0 != entry->delta);
620  peers_running += entry->delta;
622  GNUNET_free(entry);
624  run_round();
625 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
static unsigned int current_round
Current round we are in.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
static struct OpListEntry * oplist_head
DLL head for operation list.
static struct OpListEntry * oplist_tail
DLL tail for operation list.
Operation map entry.
void GNUNET_TESTBED_operation_done(struct GNUNET_TESTBED_Operation *operation)
This function is used to signal that the event information (struct GNUNET_TESTBED_EventInformation) f...
Definition: testbed_api.c:2037
int delta
Depending on whether we start or stop NSE service at the peer set this to 1 or -1.
static unsigned int * num_peers_in_round
Array of size &#39;num_rounds&#39; with the requested number of peers in the given round. ...
#define LOG(kind,...)
Generic loggins shorthand.
static void run_round()
We have reached the desired number of peers for the current round.
static unsigned int peers_running
How many peers are running right now?
struct GNUNET_TESTBED_Operation * op
The testbed operation.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ adjust_running_peers()

static void adjust_running_peers ( )
static

Adjust the number of running peers to match the required number of running peers for the round.

Definition at line 633 of file gnunet-nse-profiler.c.

References current_round, OpListEntry::delta, GNUNET_TESTBED_peer_manage_service(), make_oplist_entry(), manage_service_cb(), num_peers_in_round, OpListEntry::op, and peers_running.

Referenced by next_round(), and test_master().

634 {
635  struct OpListEntry *entry;
636  unsigned int i;
637 
638  /* start peers if we have too few */
639  for (i = peers_running; i < num_peers_in_round[current_round]; i++)
640  {
641  entry = make_oplist_entry();
642  entry->delta = 1;
644  daemons[i],
645  "nse",
647  entry,
648  1);
649  }
650  /* stop peers if we have too many */
651  for (i = num_peers_in_round[current_round]; i < peers_running; i++)
652  {
653  entry = make_oplist_entry();
654  entry->delta = -1;
656  daemons[i],
657  "nse",
659  entry,
660  0);
661  }
662 }
static struct GNUNET_TESTBED_Peer ** daemons
Handles to all of the running peers.
static unsigned int current_round
Current round we are in.
static struct OpListEntry * make_oplist_entry()
Creates an oplist entry and adds it to the oplist DLL.
Operation map entry.
int delta
Depending on whether we start or stop NSE service at the peer set this to 1 or -1.
static unsigned int * num_peers_in_round
Array of size &#39;num_rounds&#39; with the requested number of peers in the given round. ...
static void manage_service_cb(void *cls, struct GNUNET_TESTBED_Operation *op, const char *emsg)
Callback to be called when NSE service is started or stopped at peers.
static unsigned int peers_running
How many peers are running right now?
struct GNUNET_TESTBED_Operation * GNUNET_TESTBED_peer_manage_service(void *op_cls, struct GNUNET_TESTBED_Peer *peer, const char *service_name, GNUNET_TESTBED_OperationCompletionCallback cb, void *cb_cls, unsigned int start)
Start or stop given service at a peer.
struct GNUNET_TESTBED_Operation * op
The testbed operation.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ master_controller_cb()

static void master_controller_cb ( void *  cls,
const struct GNUNET_TESTBED_EventInformation event 
)
static

Function that will be called whenever something in the testbed changes.

Parameters
clsclosure, NULL
eventinformation on what is happening

Definition at line 702 of file gnunet-nse-profiler.c.

References GNUNET_TESTBED_ET_CONNECT, GNUNET_TESTBED_ET_DISCONNECT, total_connections, and GNUNET_TESTBED_EventInformation::type.

Referenced by run().

704 {
705  switch (event->type)
706  {
709  break;
710 
713  break;
714 
715  default:
716  break;
717  }
718 }
enum GNUNET_TESTBED_EventType type
Type of the event.
static unsigned int total_connections
Total number of connections in the whole network.
A connection between two peers was torn down.
A connection between two peers was established.
Here is the caller graph for this function:

◆ test_master()

static void test_master ( void *  cls,
struct GNUNET_TESTBED_RunHandle h,
unsigned int  num_peers_,
struct GNUNET_TESTBED_Peer **  peers,
unsigned int  links_succeeded,
unsigned int  links_failed 
)
static

Signature of a main function for a testcase.

Parameters
clsNULL
hthe run handle
num_peers_number of peers in 'peers'
peershandle to peers run in the testbed. NULL upon timeout (see GNUNET_TESTBED_test_run()).
links_succeededthe number of overlay link connection attempts that succeeded
links_failedthe number of overlay link connection attempts that failed

Definition at line 735 of file gnunet-nse-profiler.c.

References adjust_running_peers(), current_round, GNUNET_break, GNUNET_SCHEDULER_shutdown(), num_peers, num_peers_in_round, peers, peers_running, and run_round().

Referenced by run().

741 {
742  if (NULL == peers)
743  {
745  return;
746  }
747  daemons = peers;
748  GNUNET_break(num_peers_ == num_peers);
751  {
752  /* no need to churn, just run the starting round */
753  run_round();
754  return;
755  }
757 }
static struct GNUNET_TESTBED_Peer ** daemons
Handles to all of the running peers.
static unsigned int current_round
Current round we are in.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
static unsigned int num_peers
Maximum number of peers in the test.
static void adjust_running_peers()
Adjust the number of running peers to match the required number of running peers for the round...
static unsigned int * num_peers_in_round
Array of size &#39;num_rounds&#39; with the requested number of peers in the given round. ...
static struct CadetPeer * peers
Operation to get peer ids.
static void run_round()
We have reached the desired number of peers for the current round.
static unsigned int peers_running
How many peers are running right now?
Here is the call graph for this function:
Here is the caller graph for this function:

◆ run()

static void run ( void *  cls,
char *const *  args,
const char *  cfgfile,
const struct GNUNET_CONFIGURATION_Handle cfg 
)
static

Actual main function that runs the emulation.

Parameters
clsunused
argsremaining args, unused
cfgfilename of the configuration
cfgconfiguration handle

Definition at line 769 of file gnunet-nse-profiler.c.

References data_filename, event_mask, GNUNET_array_append, GNUNET_CONFIGURATION_dup(), GNUNET_DISK_file_open(), GNUNET_DISK_OPEN_CREATE, GNUNET_DISK_OPEN_READWRITE, GNUNET_DISK_OPEN_TRUNCATE, GNUNET_DISK_PERM_USER_READ, GNUNET_DISK_PERM_USER_WRITE, GNUNET_ERROR_TYPE_ERROR, GNUNET_log_strerror_file, GNUNET_MAX, GNUNET_SCHEDULER_add_shutdown(), GNUNET_TESTBED_ET_CONNECT, GNUNET_TESTBED_ET_DISCONNECT, GNUNET_TESTBED_ET_PEER_START, GNUNET_TESTBED_ET_PEER_STOP, GNUNET_TESTBED_run(), hosts_file, LOG_DEBUG, master_controller_cb(), num_peer_spec, num_peers, num_peers_in_round, num_rounds, ok, output_filename, shutdown_task(), and test_master().

Referenced by main().

773 {
774  char *tok;
775  uint64_t event_mask;
776  unsigned int num;
777 
778  ok = 1;
780  LOG_DEBUG("Starting daemons.\n");
781  if (NULL == num_peer_spec)
782  {
783  fprintf(stderr, "You need to specify the number of peers to run\n");
784  return;
785  }
786  for (tok = strtok(num_peer_spec, ","); NULL != tok; tok = strtok(NULL, ","))
787  {
788  if (1 != sscanf(tok, "%u", &num))
789  {
790  fprintf(stderr, "You need to specify numbers, not `%s'\n", tok);
791  return;
792  }
793  if (0 == num)
794  {
795  fprintf(stderr, "Refusing to run a round with 0 peers\n");
796  return;
797  }
800  }
801  if (0 == num_peers)
802  {
803  fprintf(stderr, "Refusing to run a testbed with no rounds\n");
804  return;
805  }
806  if ((NULL != data_filename) &&
807  (NULL ==
815 
816  if ((NULL != output_filename) &&
817  (NULL ==
824  event_mask = 0LL;
825  event_mask |= (1LL << GNUNET_TESTBED_ET_PEER_START);
826  event_mask |= (1LL << GNUNET_TESTBED_ET_PEER_STOP);
827  event_mask |= (1LL << GNUNET_TESTBED_ET_CONNECT);
828  event_mask |= (1LL << GNUNET_TESTBED_ET_DISCONNECT);
830  cfg,
831  num_peers,
832  event_mask,
834  NULL, /* master_controller_cb cls */
835  &test_master,
836  NULL); /* test_master cls */
838 }
Create file if it doesn&#39;t exist.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_shutdown(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run on shutdown, that is when a CTRL-C signal is received, or when GNUNET_SCHEDULER_shutdown() is being invoked.
Definition: scheduler.c:1284
static int ok
Return value from &#39;main&#39; (0 == success)
static void test_master(void *cls, struct GNUNET_TESTBED_RunHandle *h, unsigned int num_peers_, struct GNUNET_TESTBED_Peer **peers, unsigned int links_succeeded, unsigned int links_failed)
Signature of a main function for a testcase.
static struct GNUNET_DISK_FileHandle * data_file
File to log connection info, statistics to.
static char * hosts_file
Name of the file with the hosts to run the test over (configuration option)
static void master_controller_cb(void *cls, const struct GNUNET_TESTBED_EventInformation *event)
Function that will be called whenever something in the testbed changes.
static void shutdown_task(void *cls)
Task run on shutdown; cleans up everything.
#define GNUNET_log_strerror_file(level, cmd, filename)
Log an error message at log-level &#39;level&#39; that indicates a failure of the command &#39;cmd&#39; with the mess...
static unsigned int num_peers
Maximum number of peers in the test.
Truncate file if it exists.
#define GNUNET_MAX(a, b)
Definition: gnunet_common.h:82
static char * data_filename
Filename to log connection info, statistics to.
static struct GNUNET_CONFIGURATION_Handle * testing_cfg
Global configuration file.
void GNUNET_TESTBED_run(const char *host_filename, const struct GNUNET_CONFIGURATION_Handle *cfg, unsigned int num_peers, uint64_t event_mask, GNUNET_TESTBED_ControllerCallback cc, void *cc_cls, GNUNET_TESTBED_TestMaster test_master, void *test_master_cls)
Convenience method for running a testbed with a single call.
A connection between two peers was torn down.
uint64_t event_mask
Global event mask for all testbed events.
A connection between two peers was established.
static unsigned int num_rounds
Total number of rounds to execute.
struct GNUNET_CONFIGURATION_Handle * GNUNET_CONFIGURATION_dup(const struct GNUNET_CONFIGURATION_Handle *cfg)
Duplicate an existing configuration object.
static unsigned int * num_peers_in_round
Array of size &#39;num_rounds&#39; with the requested number of peers in the given round. ...
#define GNUNET_array_append(arr, size, element)
Append an element to a list (growing the list by one).
static char * num_peer_spec
Specification for the numbers of peers to have in each round.
Open the file for both reading and writing.
A peer has been stopped.
struct GNUNET_DISK_FileHandle * GNUNET_DISK_file_open(const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm)
Open a file.
Definition: disk.c:1262
#define LOG_DEBUG(...)
Debug logging shorthand.
static struct GNUNET_DISK_FileHandle * output_file
File to report results to.
static char * output_filename
Filename to log results to.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ main()

int main ( int  argc,
char *const *  argv 
)

Main function.

Returns
0 on success

Definition at line 847 of file gnunet-nse-profiler.c.

References connection_limit, data_filename, gettext_noop, GNUNET_GETOPT_OPTION_END, GNUNET_GETOPT_option_increment_uint(), GNUNET_GETOPT_option_relative_time(), GNUNET_GETOPT_option_string(), GNUNET_GETOPT_option_uint(), GNUNET_OK, GNUNET_PROGRAM_run(), GNUNET_STRINGS_get_utf8_args(), hosts_file, num_peer_spec, ok, output_filename, run(), and verbose.

848 {
851  'C',
852  "connections",
853  "COUNT",
854  gettext_noop(
855  "limit to the number of connections to NSE services, 0 for none"),
858  'd',
859  "details",
860  "FILENAME",
861  gettext_noop(
862  "name of the file for writing connection information and statistics"),
863  &data_filename),
864 
866  'H',
867  "hosts",
868  "FILENAME",
869  gettext_noop(
870  "name of the file with the login information for the testbed"),
871  &hosts_file),
872 
874  'o',
875  "output",
876  "FILENAME",
877  gettext_noop("name of the file for writing the main results"),
878  &output_filename),
879 
880 
882  'p',
883  "peers",
884  "NETWORKSIZESPEC",
885  gettext_noop(
886  "Number of peers to run in each round, separated by commas"),
887  &num_peer_spec),
888 
890  'V',
891  "verbose",
892  gettext_noop("be verbose (print progress information)"),
893  &verbose),
894 
896  "wait",
897  "DELAY",
898  gettext_noop("delay between rounds"),
899  &wait_time),
901 
902  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args(argc, argv, &argc, &argv))
903  return 2;
904  if (
905  GNUNET_OK !=
906  GNUNET_PROGRAM_run(argc,
907  argv,
908  "nse-profiler",
909  gettext_noop(
910  "Measure quality and performance of the NSE service."),
911  options,
912  &run,
913  NULL))
914  ok = 1;
915  return ok;
916 }
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_relative_time(char shortName, const char *name, const char *argumentHelp, const char *description, struct GNUNET_TIME_Relative *val)
Allow user to specify a struct GNUNET_TIME_Relative (using human-readable "fancy" time)...
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
int GNUNET_STRINGS_get_utf8_args(int argc, char *const *argv, int *u8argc, char *const **u8argv)
Returns utf-8 encoded arguments.
Definition: strings.c:1439
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_increment_uint(char shortName, const char *name, const char *description, unsigned int *val)
Increment val each time the option flag is given by one.
static int ok
Return value from &#39;main&#39; (0 == success)
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
Definition of a command line option.
static char * hosts_file
Name of the file with the hosts to run the test over (configuration option)
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_OPTION_END
Definition: 002.c:13
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_string(char shortName, const char *name, const char *argumentHelp, const char *description, char **str)
Allow user to specify a string.
static char * data_filename
Filename to log connection info, statistics to.
static unsigned int verbose
Be verbose (configuration option)
static struct GNUNET_TIME_Relative wait_time
How long to wait before triggering next round? Default: 60 s.
static unsigned int connection_limit
Maximum number of connections to NSE services.
static void run(void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
Actual main function that runs the emulation.
static char * num_peer_spec
Specification for the numbers of peers to have in each round.
int GNUNET_PROGRAM_run(int argc, char *const *argv, const char *binaryName, const char *binaryHelp, const struct GNUNET_GETOPT_CommandLineOption *options, GNUNET_PROGRAM_Main task, void *task_cls)
Run a standard GNUnet command startup sequence (initialize loggers and configuration, parse options).
Definition: program.c:367
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_uint(char shortName, const char *name, const char *argumentHelp, const char *description, unsigned int *val)
Allow user to specify an unsigned int.
static char * output_filename
Filename to log results to.
#define gettext_noop(String)
Definition: gettext.h:69
Here is the call graph for this function:

Variable Documentation

◆ peer_head

struct NSEPeer* peer_head
static

Head of DLL of peers we monitor closely.

Definition at line 113 of file gnunet-nse-profiler.c.

◆ peer_tail

struct NSEPeer* peer_tail
static

Tail of DLL of peers we monitor closely.

Definition at line 118 of file gnunet-nse-profiler.c.

◆ ok

int ok
static

◆ verbose

unsigned int verbose
static

Be verbose (configuration option)

Definition at line 128 of file gnunet-nse-profiler.c.

Referenced by main().

◆ hosts_file

char* hosts_file
static

Name of the file with the hosts to run the test over (configuration option)

Definition at line 133 of file gnunet-nse-profiler.c.

Referenced by main(), and run().

◆ num_peers

unsigned int num_peers
static

Maximum number of peers in the test.

Definition at line 138 of file gnunet-nse-profiler.c.

Referenced by run(), and test_master().

◆ num_rounds

unsigned int num_rounds
static

Total number of rounds to execute.

Definition at line 143 of file gnunet-nse-profiler.c.

Referenced by next_round(), and run().

◆ current_round

unsigned int current_round
static

Current round we are in.

Definition at line 148 of file gnunet-nse-profiler.c.

Referenced by adjust_running_peers(), connect_nse_service(), manage_service_cb(), next_round(), run_round(), and test_master().

◆ num_peers_in_round

unsigned int* num_peers_in_round
static

Array of size 'num_rounds' with the requested number of peers in the given round.

Definition at line 153 of file gnunet-nse-profiler.c.

Referenced by adjust_running_peers(), connect_nse_service(), manage_service_cb(), next_round(), run(), and test_master().

◆ peers_running

unsigned int peers_running
static

How many peers are running right now?

Definition at line 158 of file gnunet-nse-profiler.c.

Referenced by adjust_running_peers(), handle_estimate(), manage_service_cb(), next_round(), and test_master().

◆ num_peer_spec

char* num_peer_spec
static

Specification for the numbers of peers to have in each round.

Definition at line 163 of file gnunet-nse-profiler.c.

Referenced by main(), and run().

◆ daemons

struct GNUNET_TESTBED_Peer** daemons
static

Handles to all of the running peers.

Definition at line 168 of file gnunet-nse-profiler.c.

◆ testing_cfg

struct GNUNET_CONFIGURATION_Handle* testing_cfg
static

Global configuration file.

Definition at line 173 of file gnunet-nse-profiler.c.

◆ connection_limit

unsigned int connection_limit
static

Maximum number of connections to NSE services.

Definition at line 178 of file gnunet-nse-profiler.c.

Referenced by connect_nse_service(), and main().

◆ total_connections

unsigned int total_connections
static

Total number of connections in the whole network.

Definition at line 183 of file gnunet-nse-profiler.c.

Referenced by finish_round(), and master_controller_cb().

◆ output_file

struct GNUNET_DISK_FileHandle* output_file
static

File to report results to.

Definition at line 188 of file gnunet-nse-profiler.c.

◆ output_filename

char* output_filename
static

Filename to log results to.

Definition at line 193 of file gnunet-nse-profiler.c.

Referenced by main(), and run().

◆ data_file

struct GNUNET_DISK_FileHandle* data_file
static

File to log connection info, statistics to.

Definition at line 198 of file gnunet-nse-profiler.c.

◆ data_filename

char* data_filename
static

Filename to log connection info, statistics to.

Definition at line 203 of file gnunet-nse-profiler.c.

Referenced by main(), and run().

◆ wait_time

struct GNUNET_TIME_Relative wait_time = { 60 * 1000 }
static

How long to wait before triggering next round? Default: 60 s.

Definition at line 209 of file gnunet-nse-profiler.c.

◆ oplist_head

struct OpListEntry* oplist_head
static

DLL head for operation list.

Definition at line 214 of file gnunet-nse-profiler.c.

◆ oplist_tail

struct OpListEntry* oplist_tail
static

DLL tail for operation list.

Definition at line 219 of file gnunet-nse-profiler.c.

◆ round_task

struct GNUNET_SCHEDULER_Task* round_task
static

Task running each round of the experiment.

Definition at line 224 of file gnunet-nse-profiler.c.