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

ATS command line tool. More...

#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_ats_service.h"
#include "gnunet_transport_service.h"
Include dependency graph for gnunet-ats.c:

Go to the source code of this file.

Data Structures

struct  PendingResolutions
 Structure used to remember all pending address resolutions. More...
 
struct  ATSAddress
 Information we keep for an address. More...
 
struct  AddressFindCtx
 Closure for find_address_it(). More...
 

Macros

#define UNLIMITED_STRING   "unlimited"
 String to respresent unlimited. More...
 

Functions

static int free_addr_it (void *cls, const struct GNUNET_PeerIdentity *key, void *value)
 Free address corresponding to a given peer. More...
 
static void end (void *cls)
 Task run on shutdown. More...
 
static void transport_addr_to_str_cb (void *cls, const char *address, int res)
 Function to call with a textual representation of an address. More...
 
static int find_address_it (void *cls, const struct GNUNET_PeerIdentity *key, void *value)
 Find address corresponding to a given peer. More...
 
static void ats_perf_mon_cb (void *cls, const struct GNUNET_HELLO_Address *address, int active, struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, const struct GNUNET_ATS_Properties *prop)
 Signature of a function that is called with QoS information about an address. More...
 
static void ats_perf_cb (void *cls, const struct GNUNET_HELLO_Address *address, int active, struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, const struct GNUNET_ATS_Properties *prop)
 Signature of a function that is called with QoS information about an address. More...
 
static unsigned int print_quotas (const struct GNUNET_CONFIGURATION_Handle *cfg)
 Print information about the quotas configured for the various network scopes. More...
 
static void run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *my_cfg)
 Main function that will be run by the scheduler. More...
 
int main (int argc, char *const *argv)
 The main function. More...
 

Variables

static int opt_resolve_addresses_numeric
 CLI Opt: More...
 
static int opt_verbose
 CLI Opt: Print verbose ATS information. More...
 
static int opt_list_used
 CLI Option: List only addresses currently used (active) More...
 
static int opt_list_all
 CLI Option: List all addresses. More...
 
static int opt_set_pref
 CLI Option: set preference. More...
 
static int opt_print_quotas
 CLI Option: print quotas configured. More...
 
static int opt_monitor
 CLI Option: Monitor addresses used. More...
 
static char * opt_pid_str
 CLI Option: use specific peer. More...
 
static char * opt_type_str
 CLI Option: preference type to set. More...
 
static unsigned int opt_pref_value
 CLI Option: preference value to set. More...
 
static int ret
 Final status code. More...
 
static int stat_results
 Number of results returned from service. More...
 
static int stat_receive_done
 State: all pending receive operations done? More...
 
static int stat_pending
 State: number of pending operations. More...
 
static char * cpid_str
 Which peer should we connect to? More...
 
static struct GNUNET_ATS_PerformanceHandleph
 ATS performance handle used. More...
 
static struct GNUNET_ATS_ConnectivityHandleats_ch
 Our connectivity handle. More...
 
static struct GNUNET_ATS_ConnectivitySuggestHandleats_sh
 Handle for address suggestion request. More...
 
static struct GNUNET_ATS_AddressListHandlealh
 ATS address list handle used. More...
 
static struct GNUNET_CONFIGURATION_Handlecfg
 Configuration handle. More...
 
static struct GNUNET_SCHEDULER_Taskshutdown_task
 Shutdown task. More...
 
static struct GNUNET_CONTAINER_MultiPeerMapaddresses
 Hashmap to store addresses. More...
 
static struct PendingResolutionshead
 Head of list of pending resolution requests. More...
 
static struct PendingResolutionstail
 Tail of list of pending resolution requests. More...
 

Detailed Description

ATS command line tool.

Author
Matthias Wachs
Christian Grothoff

Definition in file gnunet-ats.c.

Macro Definition Documentation

◆ UNLIMITED_STRING

#define UNLIMITED_STRING   "unlimited"

String to respresent unlimited.

Definition at line 35 of file gnunet-ats.c.

Referenced by print_quotas().

Function Documentation

◆ free_addr_it()

static int free_addr_it ( void *  cls,
const struct GNUNET_PeerIdentity key,
void *  value 
)
static

Free address corresponding to a given peer.

Parameters
clsNULL
keypeer identity
valuethe struct ATSAddress * to be freed
Returns
GNUNET_YES (always)

Definition at line 245 of file gnunet-ats.c.

References ATSAddress::address, GNUNET_assert, GNUNET_CONTAINER_multipeermap_remove(), GNUNET_free, GNUNET_HELLO_address_free, GNUNET_OK, and value.

Referenced by ats_perf_mon_cb(), and end().

246 {
247  struct ATSAddress *a = value;
248 
252  GNUNET_free(a);
253  return GNUNET_OK;
254 }
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
int GNUNET_CONTAINER_multipeermap_remove(struct GNUNET_CONTAINER_MultiPeerMap *map, const struct GNUNET_PeerIdentity *key, const void *value)
Remove the given key-value pair from the map.
static struct GNUNET_CONTAINER_MultiPeerMap * addresses
Hashmap to store addresses.
Definition: gnunet-ats.c:146
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
static char * value
Value of the record to add/remove.
struct GNUNET_HELLO_Address * address
Address information.
Definition: gnunet-ats.c:206
Information we keep for an address.
Definition: gnunet-ats.c:202
#define GNUNET_HELLO_address_free(addr)
Free an address.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ end()

static void end ( void *  cls)
static

Task run on shutdown.

Parameters
clsNULL

Definition at line 263 of file gnunet-ats.c.

References _, PendingResolutions::address, free_addr_it(), GNUNET_ATS_connectivity_done(), GNUNET_ATS_connectivity_suggest_cancel(), GNUNET_ATS_performance_done(), GNUNET_ATS_performance_list_addresses_cancel(), GNUNET_CONTAINER_DLL_remove, GNUNET_CONTAINER_multipeermap_destroy(), GNUNET_CONTAINER_multipeermap_iterate(), GNUNET_free, GNUNET_TRANSPORT_address_to_string_cancel(), head, PendingResolutions::next, opt_list_all, opt_list_used, pending, ret, stat_results, and PendingResolutions::tats_ctx.

Referenced by ats_perf_cb(), run(), and transport_addr_to_str_cb().

264 {
265  struct PendingResolutions *pr;
266  struct PendingResolutions *next;
267  unsigned int pending;
268 
269  if (NULL != alh)
270  {
272  alh = NULL;
273  }
274 
275  if (NULL != ph)
276  {
278  ph = NULL;
279  }
280 
281  pending = 0;
282  next = head;
283  while (NULL != (pr = next))
284  {
285  next = pr->next;
288  GNUNET_free(pr->address);
289  GNUNET_free(pr);
290  pending++;
291  }
294  addresses = NULL;
295 
296  if (0 < pending)
297  fprintf(stdout, _("%u address resolutions had a timeout\n"), pending);
299  fprintf(stdout,
300  _("ATS returned stat_results for %u addresses\n"),
301  stat_results);
302 
303  if (NULL != ats_sh)
304  {
306  ats_sh = NULL;
307  }
308  if (NULL != ats_ch)
309  {
311  ats_ch = NULL;
312  }
313  ret = 0;
314 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
static int opt_list_all
CLI Option: List all addresses.
Definition: gnunet-ats.c:56
Structure used to remember all pending address resolutions.
Definition: gnunet-ats.c:154
struct GNUNET_HELLO_Address * address
Copy of the address we are resolving.
Definition: gnunet-ats.c:168
static struct GNUNET_ATS_PerformanceHandle * ph
ATS performance handle used.
Definition: gnunet-ats.c:116
static int opt_list_used
CLI Option: List only addresses currently used (active)
Definition: gnunet-ats.c:51
void GNUNET_ATS_performance_done(struct GNUNET_ATS_PerformanceHandle *ph)
Client is done using the ATS performance subsystem, release resources.
static struct GNUNET_CONTAINER_MultiPeerMap * addresses
Hashmap to store addresses.
Definition: gnunet-ats.c:146
void GNUNET_ATS_connectivity_suggest_cancel(struct GNUNET_ATS_ConnectivitySuggestHandle *sh)
We no longer care about being connected to a peer.
void GNUNET_CONTAINER_multipeermap_destroy(struct GNUNET_CONTAINER_MultiPeerMap *map)
Destroy a hash map.
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static struct GNUNET_ATS_AddressListHandle * alh
ATS address list handle used.
Definition: gnunet-ats.c:131
struct PendingResolutions * next
Kept in a DLL.
Definition: gnunet-ats.c:158
struct GNUNET_TRANSPORT_AddressToStringContext * tats_ctx
Handle to the transport request to convert the address to a string.
Definition: gnunet-ats.c:174
void GNUNET_TRANSPORT_address_to_string_cancel(struct GNUNET_TRANSPORT_AddressToStringContext *alc)
Cancel request for address conversion.
static int stat_results
Number of results returned from service.
Definition: gnunet-ats.c:96
static int free_addr_it(void *cls, const struct GNUNET_PeerIdentity *key, void *value)
Free address corresponding to a given peer.
Definition: gnunet-ats.c:245
static struct GNUNET_ATS_ConnectivitySuggestHandle * ats_sh
Handle for address suggestion request.
Definition: gnunet-ats.c:126
static int ret
Final status code.
Definition: gnunet-ats.c:91
static unsigned int pending
The number of queries that are outstanding.
int GNUNET_CONTAINER_multipeermap_iterate(struct GNUNET_CONTAINER_MultiPeerMap *map, GNUNET_CONTAINER_PeerMapIterator it, void *it_cls)
Iterate over all entries in the map.
static struct PendingResolutions * head
Head of list of pending resolution requests.
Definition: gnunet-ats.c:228
void GNUNET_ATS_performance_list_addresses_cancel(struct GNUNET_ATS_AddressListHandle *alh)
Cancel a pending address listing operation.
static struct PendingResolutions * tail
Tail of list of pending resolution requests.
Definition: gnunet-ats.c:233
void GNUNET_ATS_connectivity_done(struct GNUNET_ATS_ConnectivityHandle *ch)
Client is done with ATS connectivity management, release resources.
static struct GNUNET_ATS_ConnectivityHandle * ats_ch
Our connectivity handle.
Definition: gnunet-ats.c:121
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ transport_addr_to_str_cb()

static void transport_addr_to_str_cb ( void *  cls,
const char *  address,
int  res 
)
static

Function to call with a textual representation of an address.

This function will be called several times with different possible textual representations, and a last time with address being NULL to signal the end of the iteration. Note that address NULL always is the last call, regardless of the value in res.

Parameters
clsclosure, a struct PendingResolutions *
addressNULL on end of iteration, otherwise 0-terminated printable UTF-8 string, in particular an empty string if res is GNUNET_NO
resresult of the address to string conversion: if GNUNET_OK: conversion successful if GNUNET_NO: address was invalid (or not supported) if GNUNET_SYSERR: communication error (IPC error)

Definition at line 334 of file gnunet-ats.c.

References _, PendingResolutions::active, PendingResolutions::address, GNUNET_HELLO_Address::address_length, PendingResolutions::bandwidth_in, PendingResolutions::bandwidth_out, end(), GNUNET_break, GNUNET_CONTAINER_DLL_remove, GNUNET_free, GNUNET_i2s(), GNUNET_NO, GNUNET_NT_to_string(), GNUNET_OK, GNUNET_SCHEDULER_add_now(), GNUNET_SCHEDULER_cancel(), GNUNET_SYSERR, GNUNET_YES, GNUNET_HELLO_Address::peer, PendingResolutions::properties, GNUNET_ATS_Properties::scope, stat_pending, stat_receive_done, GNUNET_HELLO_Address::transport_name, and GNUNET_BANDWIDTH_Value32NBO::value__.

Referenced by ats_perf_cb(), and ats_perf_mon_cb().

335 {
336  struct PendingResolutions *pr = cls;
337 
338  if (NULL == address)
339  {
340  /* We're done */
342  GNUNET_free(pr->address);
343  GNUNET_free(pr);
344  stat_pending--;
345 
346  if ((GNUNET_YES == stat_receive_done) && (0 == stat_pending))
347  {
348  /* All messages received and no resolutions pending*/
349  if (shutdown_task != NULL)
352  }
353  return;
354  }
355  switch (res)
356  {
357  case GNUNET_SYSERR:
358  fprintf(
359  stderr,
360  "Failed to convert address for peer `%s' plugin `%s' length %u to string (communication error)\n",
361  GNUNET_i2s(&pr->address->peer),
362  pr->address->transport_name,
363  (unsigned int)pr->address->address_length);
364  return;
365 
366  case GNUNET_NO:
367  fprintf(
368  stderr,
369  "Failed to convert address for peer `%s' plugin `%s' length %u to string (address invalid or not supported)\n",
370  GNUNET_i2s(&pr->address->peer),
371  pr->address->transport_name,
372  (unsigned int)pr->address->address_length);
373  return;
374 
375  case GNUNET_OK:
376  /* continues below */
377  break;
378 
379  default:
380  GNUNET_break(0);
381  return;
382  }
383 
384  fprintf(
385  stdout,
386  _(
387  "Peer `%s' plugin `%s', address `%s', `%s' bw out: %u Bytes/s, bw in %u Bytes/s, %s\n"),
388  GNUNET_i2s(&pr->address->peer),
389  pr->address->transport_name,
390  address,
392  ntohl(pr->bandwidth_out.value__),
393  ntohl(pr->bandwidth_in.value__),
394  pr->active ? _("active ") : _("inactive "));
395 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
size_t address_length
Number of bytes in address.
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in
Amount of inbound bandwidth assigned by ATS.
Definition: gnunet-ats.c:189
const char * GNUNET_NT_to_string(enum GNUNET_NetworkType net)
Convert a enum GNUNET_NetworkType to a string.
Definition: nt.c:43
static int stat_receive_done
State: all pending receive operations done?
Definition: gnunet-ats.c:101
static void end(void *cls)
Task run on shutdown.
Definition: gnunet-ats.c:263
Structure used to remember all pending address resolutions.
Definition: gnunet-ats.c:154
struct GNUNET_HELLO_Address * address
Copy of the address we are resolving.
Definition: gnunet-ats.c:168
struct GNUNET_ATS_Properties properties
Performance data.
Definition: gnunet-ats.c:179
#define GNUNET_NO
Definition: gnunet_common.h:78
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
uint32_t value__
The actual value (bytes per second).
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static struct GNUNET_SCHEDULER_Task * shutdown_task
Shutdown task.
Definition: gnunet-ats.c:141
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
const char * transport_name
Name of the transport plugin enabling the communication using this address.
static int res
static int stat_pending
State: number of pending operations.
Definition: gnunet-ats.c:106
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out
Amount of outbound bandwidth assigned by ATS.
Definition: gnunet-ats.c:184
struct GNUNET_PeerIdentity peer
For which peer is this an address?
int active
Is this an active address?
Definition: gnunet-ats.c:194
enum GNUNET_NetworkType scope
Which network scope does the respective address belong to? This property does not change...
static struct PendingResolutions * head
Head of list of pending resolution requests.
Definition: gnunet-ats.c:228
static struct PendingResolutions * tail
Tail of list of pending resolution requests.
Definition: gnunet-ats.c:233
#define GNUNET_YES
Definition: gnunet_common.h:77
static char * address
GNS address for this phone.
const char * GNUNET_i2s(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
#define GNUNET_free(ptr)
Wrapper around free.
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:

◆ find_address_it()

static int find_address_it ( void *  cls,
const struct GNUNET_PeerIdentity key,
void *  value 
)
static

Find address corresponding to a given peer.

Parameters
clsthe struct AddressFindCtx *
keypeer identity
valuethe struct ATSAddress * for an existing address
Returns
GNUNET_NO if we found a match, GNUNET_YES if not

Definition at line 423 of file gnunet-ats.c.

References ATSAddress::address, GNUNET_HELLO_address_cmp(), GNUNET_NO, GNUNET_YES, AddressFindCtx::res, AddressFindCtx::src, and value.

Referenced by ats_perf_mon_cb().

424 {
425  struct AddressFindCtx *actx = cls;
426  struct ATSAddress *exist = value;
427 
428  if (0 == GNUNET_HELLO_address_cmp(actx->src, exist->address))
429  {
430  actx->res = exist;
431  return GNUNET_NO;
432  }
433  return GNUNET_YES;
434 }
#define GNUNET_NO
Definition: gnunet_common.h:78
const struct GNUNET_HELLO_Address * src
Address we are looking for.
Definition: gnunet-ats.c:405
int GNUNET_HELLO_address_cmp(const struct GNUNET_HELLO_Address *a1, const struct GNUNET_HELLO_Address *a2)
Compare two addresses.
Definition: address.c:130
static char * value
Value of the record to add/remove.
struct ATSAddress * res
Where to write the struct ATSAddress if we found one that matches.
Definition: gnunet-ats.c:410
struct GNUNET_HELLO_Address * address
Address information.
Definition: gnunet-ats.c:206
Information we keep for an address.
Definition: gnunet-ats.c:202
Closure for find_address_it().
Definition: gnunet-ats.c:401
#define GNUNET_YES
Definition: gnunet_common.h:77
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ats_perf_mon_cb()

static void ats_perf_mon_cb ( void *  cls,
const struct GNUNET_HELLO_Address address,
int  active,
struct GNUNET_BANDWIDTH_Value32NBO  bandwidth_out,
struct GNUNET_BANDWIDTH_Value32NBO  bandwidth_in,
const struct GNUNET_ATS_Properties prop 
)
static

Signature of a function that is called with QoS information about an address.

Parameters
clsclosure (NULL)
addressthe address, NULL if ATS service was disconnected
activeGNUNET_YES if this address is actively used to maintain a connection to a peer; GNUNET_NO if the address is not actively used; GNUNET_SYSERR if this address is no longer available for ATS
bandwidth_outassigned outbound bandwidth for the connection
bandwidth_inassigned inbound bandwidth for the connection
propperformance data for the address (as far as known)

Definition at line 451 of file gnunet-ats.c.

References _, PendingResolutions::active, ATSAddress::active, PendingResolutions::address, ATSAddress::address, PendingResolutions::bandwidth_in, ATSAddress::bandwidth_in, PendingResolutions::bandwidth_out, ATSAddress::bandwidth_out, find_address_it(), free_addr_it(), GNUNET_break, GNUNET_CONTAINER_DLL_insert, GNUNET_CONTAINER_DLL_remove, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE, GNUNET_CONTAINER_multipeermap_get_multiple(), GNUNET_CONTAINER_multipeermap_iterate(), GNUNET_CONTAINER_multipeermap_put(), GNUNET_CONTAINER_multipeermap_remove(), GNUNET_free, GNUNET_HELLO_address_copy(), GNUNET_HELLO_address_free, GNUNET_i2s(), GNUNET_new, GNUNET_NO, GNUNET_OK, GNUNET_SYSERR, GNUNET_TIME_relative_multiply(), GNUNET_TIME_UNIT_SECONDS, GNUNET_TRANSPORT_address_to_string(), GNUNET_TRANSPORT_address_to_string_cancel(), head, PendingResolutions::next, opt_resolve_addresses_numeric, opt_verbose, GNUNET_HELLO_Address::peer, PendingResolutions::properties, AddressFindCtx::res, AddressFindCtx::src, stat_pending, stat_results, PendingResolutions::tats_ctx, transport_addr_to_str_cb(), GNUNET_HELLO_Address::transport_name, and GNUNET_BANDWIDTH_Value32NBO::value__.

Referenced by run().

457 {
458  struct PendingResolutions *pr;
459  struct PendingResolutions *cur;
460  struct PendingResolutions *next;
461 
462  if (NULL == address)
463  {
464  /* ATS service temporarily disconnected, remove current state */
465  next = head;
466  for (cur = next; NULL != cur; cur = next)
467  {
468  next = cur->next;
472  GNUNET_free(cur);
473  }
475  return;
476  }
477  if (GNUNET_SYSERR == active)
478  {
479  /* remove address */
480  struct AddressFindCtx actx;
481 
482  actx.src = address;
483  actx.res = NULL;
485  &address->peer,
487  &actx);
488  if (NULL == actx.res)
489  {
490  GNUNET_break(0);
491  return;
492  }
495  &address->peer,
496  actx.res));
497  fprintf(stdout,
498  _("Removed address of peer `%s' with plugin `%s'\n"),
499  GNUNET_i2s(&address->peer),
500  actx.res->address->transport_name);
501  GNUNET_HELLO_address_free(actx.res);
502  return;
503  }
504 
505  if (GNUNET_NO == opt_verbose)
506  {
507  struct AddressFindCtx actx;
508  struct ATSAddress *a;
509 
510  actx.src = address;
511  actx.res = NULL;
513  &address->peer,
515  &actx);
516  if ((NULL != actx.res))
517  {
518  if ((bandwidth_in.value__ == actx.res->bandwidth_in.value__) &&
519  (bandwidth_out.value__ == actx.res->bandwidth_out.value__) &&
520  (active == actx.res->active))
521  {
522  return; /* Nothing to do here */
523  }
524  else
525  {
526  actx.res->bandwidth_in = bandwidth_in;
527  actx.res->bandwidth_out = bandwidth_out;
528  }
529  }
530  else
531  {
532  a = GNUNET_new(struct ATSAddress);
533 
534  a->address = GNUNET_HELLO_address_copy(address);
537  a->active = active;
539  addresses,
540  &address->peer,
541  a,
543  }
544  }
545 
546  pr = GNUNET_new(struct PendingResolutions);
547  pr->properties = *prop;
548  pr->address = GNUNET_HELLO_address_copy(address);
551  pr->active = active;
553  cfg,
554  address,
558  pr);
560  stat_results++;
561  stat_pending++;
562 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in
Current inbound bandwidth.
Definition: gnunet-ats.c:216
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in
Amount of inbound bandwidth assigned by ATS.
Definition: gnunet-ats.c:189
int active
Is this an active address?
Definition: gnunet-ats.c:221
#define GNUNET_CONTAINER_DLL_insert(head, tail, element)
Insert an element at the head of a DLL.
Structure used to remember all pending address resolutions.
Definition: gnunet-ats.c:154
struct GNUNET_HELLO_Address * address
Copy of the address we are resolving.
Definition: gnunet-ats.c:168
#define GNUNET_TIME_UNIT_SECONDS
One second.
struct GNUNET_ATS_Properties properties
Performance data.
Definition: gnunet-ats.c:179
int GNUNET_CONTAINER_multipeermap_remove(struct GNUNET_CONTAINER_MultiPeerMap *map, const struct GNUNET_PeerIdentity *key, const void *value)
Remove the given key-value pair from the map.
#define GNUNET_NO
Definition: gnunet_common.h:78
static struct GNUNET_CONTAINER_MultiPeerMap * addresses
Hashmap to store addresses.
Definition: gnunet-ats.c:146
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
#define GNUNET_new(type)
Allocate a struct or union of the given type.
const struct GNUNET_HELLO_Address * src
Address we are looking for.
Definition: gnunet-ats.c:405
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
uint32_t value__
The actual value (bytes per second).
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
struct PendingResolutions * next
Kept in a DLL.
Definition: gnunet-ats.c:158
struct GNUNET_TRANSPORT_AddressToStringContext * tats_ctx
Handle to the transport request to convert the address to a string.
Definition: gnunet-ats.c:174
void GNUNET_TRANSPORT_address_to_string_cancel(struct GNUNET_TRANSPORT_AddressToStringContext *alc)
Cancel request for address conversion.
static int opt_resolve_addresses_numeric
CLI Opt:
Definition: gnunet-ats.c:41
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out
Current outbound bandwidth.
Definition: gnunet-ats.c:211
static struct GNUNET_CONFIGURATION_Handle * cfg
Configuration handle.
Definition: gnunet-ats.c:136
static int stat_results
Number of results returned from service.
Definition: gnunet-ats.c:96
static int free_addr_it(void *cls, const struct GNUNET_PeerIdentity *key, void *value)
Free address corresponding to a given peer.
Definition: gnunet-ats.c:245
struct GNUNET_TIME_Relative GNUNET_TIME_relative_multiply(struct GNUNET_TIME_Relative rel, unsigned long long factor)
Multiply relative time by a given factor.
Definition: time.c:440
static int stat_pending
State: number of pending operations.
Definition: gnunet-ats.c:106
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
struct GNUNET_TRANSPORT_AddressToStringContext * GNUNET_TRANSPORT_address_to_string(const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_HELLO_Address *address, int numeric, struct GNUNET_TIME_Relative timeout, GNUNET_TRANSPORT_AddressToStringCallback aluc, void *aluc_cls)
Convert a binary address into a human readable address.
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out
Amount of outbound bandwidth assigned by ATS.
Definition: gnunet-ats.c:184
struct GNUNET_PeerIdentity peer
For which peer is this an address?
int active
Is this an active address?
Definition: gnunet-ats.c:194
static int find_address_it(void *cls, const struct GNUNET_PeerIdentity *key, void *value)
Find address corresponding to a given peer.
Definition: gnunet-ats.c:423
Allow multiple values with the same key.
int GNUNET_CONTAINER_multipeermap_put(struct GNUNET_CONTAINER_MultiPeerMap *map, const struct GNUNET_PeerIdentity *key, void *value, enum GNUNET_CONTAINER_MultiHashMapOption opt)
Store a key-value pair in the map.
int GNUNET_CONTAINER_multipeermap_iterate(struct GNUNET_CONTAINER_MultiPeerMap *map, GNUNET_CONTAINER_PeerMapIterator it, void *it_cls)
Iterate over all entries in the map.
struct GNUNET_HELLO_Address * address
Address information.
Definition: gnunet-ats.c:206
static struct PendingResolutions * head
Head of list of pending resolution requests.
Definition: gnunet-ats.c:228
Information we keep for an address.
Definition: gnunet-ats.c:202
static int opt_verbose
CLI Opt: Print verbose ATS information.
Definition: gnunet-ats.c:46
struct GNUNET_HELLO_Address * GNUNET_HELLO_address_copy(const struct GNUNET_HELLO_Address *address)
Copy an address struct.
Definition: address.c:109
static void transport_addr_to_str_cb(void *cls, const char *address, int res)
Function to call with a textual representation of an address.
Definition: gnunet-ats.c:334
Closure for find_address_it().
Definition: gnunet-ats.c:401
static struct PendingResolutions * tail
Tail of list of pending resolution requests.
Definition: gnunet-ats.c:233
static char * address
GNS address for this phone.
const char * GNUNET_i2s(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
#define GNUNET_HELLO_address_free(addr)
Free an address.
int GNUNET_CONTAINER_multipeermap_get_multiple(struct GNUNET_CONTAINER_MultiPeerMap *map, const struct GNUNET_PeerIdentity *key, GNUNET_CONTAINER_PeerMapIterator it, void *it_cls)
Iterate over all entries in the map that match a particular key.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ats_perf_cb()

static void ats_perf_cb ( void *  cls,
const struct GNUNET_HELLO_Address address,
int  active,
struct GNUNET_BANDWIDTH_Value32NBO  bandwidth_out,
struct GNUNET_BANDWIDTH_Value32NBO  bandwidth_in,
const struct GNUNET_ATS_Properties prop 
)
static

Signature of a function that is called with QoS information about an address.

Parameters
clsclosure (NULL)
addressthe address, NULL if ATS service was disconnected
activeis this address actively used to maintain a connection to a peer
bandwidth_outassigned outbound bandwidth for the connection
bandwidth_inassigned inbound bandwidth for the connection
propperformance data for the address (as far as known)

Definition at line 577 of file gnunet-ats.c.

References PendingResolutions::active, PendingResolutions::address, PendingResolutions::bandwidth_in, PendingResolutions::bandwidth_out, end(), GNUNET_CONTAINER_DLL_insert, GNUNET_HELLO_address_copy(), GNUNET_new, GNUNET_SCHEDULER_add_now(), GNUNET_SCHEDULER_cancel(), GNUNET_TIME_relative_multiply(), GNUNET_TIME_UNIT_SECONDS, GNUNET_TRANSPORT_address_to_string(), GNUNET_YES, opt_resolve_addresses_numeric, PendingResolutions::properties, stat_pending, stat_receive_done, stat_results, PendingResolutions::tats_ctx, and transport_addr_to_str_cb().

Referenced by run().

583 {
584  struct PendingResolutions *pr;
585 
586  if (NULL == address)
587  {
588  /* All messages received */
590  alh = NULL;
591  if (0 == stat_pending)
592  {
593  /* All messages received and no resolutions pending*/
594  if (shutdown_task != NULL)
597  }
598  return;
599  }
600 
601  pr = GNUNET_new(struct PendingResolutions);
602  pr->properties = *prop;
603  pr->address = GNUNET_HELLO_address_copy(address);
606  pr->active = active;
608  cfg,
609  address,
613  pr);
615  stat_results++;
616  stat_pending++;
617 }
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in
Amount of inbound bandwidth assigned by ATS.
Definition: gnunet-ats.c:189
#define GNUNET_CONTAINER_DLL_insert(head, tail, element)
Insert an element at the head of a DLL.
static int stat_receive_done
State: all pending receive operations done?
Definition: gnunet-ats.c:101
static void end(void *cls)
Task run on shutdown.
Definition: gnunet-ats.c:263
Structure used to remember all pending address resolutions.
Definition: gnunet-ats.c:154
struct GNUNET_HELLO_Address * address
Copy of the address we are resolving.
Definition: gnunet-ats.c:168
#define GNUNET_TIME_UNIT_SECONDS
One second.
struct GNUNET_ATS_Properties properties
Performance data.
Definition: gnunet-ats.c:179
#define GNUNET_new(type)
Allocate a struct or union of the given type.
static struct GNUNET_ATS_AddressListHandle * alh
ATS address list handle used.
Definition: gnunet-ats.c:131
static struct GNUNET_SCHEDULER_Task * shutdown_task
Shutdown task.
Definition: gnunet-ats.c:141
struct GNUNET_TRANSPORT_AddressToStringContext * tats_ctx
Handle to the transport request to convert the address to a string.
Definition: gnunet-ats.c:174
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 int opt_resolve_addresses_numeric
CLI Opt:
Definition: gnunet-ats.c:41
static struct GNUNET_CONFIGURATION_Handle * cfg
Configuration handle.
Definition: gnunet-ats.c:136
static int stat_results
Number of results returned from service.
Definition: gnunet-ats.c:96
struct GNUNET_TIME_Relative GNUNET_TIME_relative_multiply(struct GNUNET_TIME_Relative rel, unsigned long long factor)
Multiply relative time by a given factor.
Definition: time.c:440
static int stat_pending
State: number of pending operations.
Definition: gnunet-ats.c:106
struct GNUNET_TRANSPORT_AddressToStringContext * GNUNET_TRANSPORT_address_to_string(const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_HELLO_Address *address, int numeric, struct GNUNET_TIME_Relative timeout, GNUNET_TRANSPORT_AddressToStringCallback aluc, void *aluc_cls)
Convert a binary address into a human readable address.
struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out
Amount of outbound bandwidth assigned by ATS.
Definition: gnunet-ats.c:184
int active
Is this an active address?
Definition: gnunet-ats.c:194
static struct PendingResolutions * head
Head of list of pending resolution requests.
Definition: gnunet-ats.c:228
struct GNUNET_HELLO_Address * GNUNET_HELLO_address_copy(const struct GNUNET_HELLO_Address *address)
Copy an address struct.
Definition: address.c:109
static void transport_addr_to_str_cb(void *cls, const char *address, int res)
Function to call with a textual representation of an address.
Definition: gnunet-ats.c:334
static struct PendingResolutions * tail
Tail of list of pending resolution requests.
Definition: gnunet-ats.c:233
#define GNUNET_YES
Definition: gnunet_common.h:77
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:

◆ print_quotas()

static unsigned int print_quotas ( const struct GNUNET_CONFIGURATION_Handle cfg)
static

Print information about the quotas configured for the various network scopes.

Parameters
cfgconfiguration to obtain quota information from
Returns
total number of ATS network types known

Definition at line 628 of file gnunet-ats.c.

References _, GNUNET_asprintf(), GNUNET_CONFIGURATION_get_value_string(), GNUNET_free, GNUNET_NT_COUNT, GNUNET_NT_to_string(), GNUNET_OK, GNUNET_STRINGS_fancy_size_to_bytes(), GNUNET_SYSERR, and UNLIMITED_STRING.

Referenced by run().

629 {
630  char *entry_in = NULL;
631  char *entry_out = NULL;
632  char *quota_out_str;
633  char *quota_in_str;
634  unsigned long long int quota_out;
635  unsigned long long int quota_in;
636  int c;
637 
638  for (c = 0; (c < GNUNET_NT_COUNT); c++)
639  {
640  GNUNET_asprintf(&entry_out, "%s_QUOTA_OUT", GNUNET_NT_to_string(c));
641  GNUNET_asprintf(&entry_in, "%s_QUOTA_IN", GNUNET_NT_to_string(c));
642 
643  /* quota out */
645  "ats",
646  entry_out,
647  &quota_out_str))
648  {
649  if (0 == strcmp(quota_out_str, UNLIMITED_STRING) ||
650  (GNUNET_SYSERR ==
651  GNUNET_STRINGS_fancy_size_to_bytes(quota_out_str, &quota_out)))
652  quota_out = UINT32_MAX;
653 
654  GNUNET_free(quota_out_str);
655  GNUNET_asprintf(&quota_out_str, "%llu", quota_out);
656  }
657  else
658  {
659  fprintf(stderr,
660  "Outbound quota for network `%11s' not configured!\n",
662  GNUNET_asprintf(&quota_out_str, "-");
663  }
664  GNUNET_free(entry_out);
665 
666  /* quota in */
668  "ats",
669  entry_in,
670  &quota_in_str))
671  {
672  if (0 == strcmp(quota_in_str, UNLIMITED_STRING) ||
673  (GNUNET_SYSERR ==
674  GNUNET_STRINGS_fancy_size_to_bytes(quota_in_str, &quota_in)))
675  quota_in = UINT32_MAX;
676  GNUNET_free(quota_in_str);
677  GNUNET_asprintf(&quota_in_str, "%llu", quota_in);
678  }
679  else
680  {
681  fprintf(stderr,
682  "Inbound quota for network `%11s' not configured!\n",
684  GNUNET_asprintf(&quota_in_str, "-");
685  }
686  GNUNET_free(entry_in);
687 
688  fprintf(stdout,
689  _("Quota for network `%11s' (in/out): %10s / %10s\n"),
691  quota_in_str,
692  quota_out_str);
693  GNUNET_free(quota_out_str);
694  GNUNET_free(quota_in_str);
695  }
696  return GNUNET_NT_COUNT;
697 }
const char * GNUNET_NT_to_string(enum GNUNET_NetworkType net)
Convert a enum GNUNET_NetworkType to a string.
Definition: nt.c:43
int GNUNET_STRINGS_fancy_size_to_bytes(const char *fancy_size, unsigned long long *size)
Convert a given fancy human-readable size to bytes.
Definition: strings.c:318
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
int GNUNET_asprintf(char **buf, const char *format,...)
Like asprintf, just portable.
int GNUNET_CONFIGURATION_get_value_string(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
Get a configuration value that should be a string.
#define UNLIMITED_STRING
String to respresent unlimited.
Definition: gnunet-ats.c:35
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
#define GNUNET_NT_COUNT
#define GNUNET_free(ptr)
Wrapper around free.
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 my_cfg 
)
static

Main function that will be run by the scheduler.

Parameters
clsclosure
argsremaining command-line arguments
cfgfilename of the configuration file used (for saving, can be NULL!)
my_cfgconfiguration

Definition at line 709 of file gnunet-ats.c.

References _, ats_perf_cb(), ats_perf_mon_cb(), cpid_str, end(), GNUNET_ATS_connectivity_init(), GNUNET_ATS_connectivity_suggest(), GNUNET_ATS_performance_change_preference(), GNUNET_ATS_performance_init(), GNUNET_ATS_performance_list_addresses(), GNUNET_ATS_PREFERENCE_BANDWIDTH, GNUNET_ATS_PREFERENCE_END, GNUNET_ATS_PREFERENCE_LATENCY, GNUNET_CONTAINER_multipeermap_create(), GNUNET_CRYPTO_eddsa_public_key_from_string(), GNUNET_NO, GNUNET_OK, GNUNET_SCHEDULER_add_delayed(), GNUNET_SCHEDULER_add_now(), GNUNET_SCHEDULER_add_shutdown(), GNUNET_SCHEDULER_shutdown(), GNUNET_TIME_UNIT_SECONDS, GNUNET_YES, opt_list_all, opt_list_used, opt_monitor, opt_pid_str, opt_pref_value, opt_print_quotas, opt_set_pref, opt_type_str, print_quotas(), GNUNET_PeerIdentity::public_key, ret, stat_results, and type.

Referenced by main().

713 {
714  struct GNUNET_PeerIdentity pid;
715  struct GNUNET_PeerIdentity cpid;
716  unsigned int c;
717  unsigned int type;
718 
719  cfg = (struct GNUNET_CONFIGURATION_Handle *)my_cfg;
721  stat_results = 0;
722 
723  c = 0;
724  if (NULL != opt_pid_str)
725  {
726  if (GNUNET_OK !=
728  strlen(opt_pid_str),
729  &pid.public_key))
730  {
731  fprintf(stderr, _("Failed to parse peer identity `%s'\n"), opt_pid_str);
732  return;
733  }
734  }
735  if (NULL != cpid_str)
736  {
737  if (GNUNET_OK !=
739  strlen(cpid_str),
740  &cpid.public_key))
741  {
742  fprintf(stderr, _("Failed to parse peer identity `%s'\n"), cpid_str);
743  return;
744  }
745  c++;
746  }
747 
749 
750  if (1 < c)
751  {
752  fprintf(stderr,
753  _("Please select one operation: %s or %s or %s or %s or %s\n"),
754  "--used",
755  "--all",
756  "--monitor",
757  "--preference",
758  "--quotas");
759  return;
760  }
761  if (0 == c)
762  opt_list_used = GNUNET_YES; /* set default */
763  if (opt_print_quotas)
764  {
765  ret = print_quotas(cfg);
766  return;
767  }
768  if (opt_list_all)
769  {
770  ph = GNUNET_ATS_performance_init(cfg, NULL, NULL);
771  if (NULL == ph)
772  {
773  fprintf(stderr, "%s", _("Cannot connect to ATS service, exiting...\n"));
774  return;
775  }
777  (NULL == opt_pid_str) ? NULL
778  : &pid,
779  GNUNET_YES,
780  &ats_perf_cb,
781  NULL);
782  if (NULL == alh)
783  {
784  fprintf(stderr,
785  "%s",
786  _("Cannot issue request to ATS service, exiting...\n"));
788  return;
789  }
791  return;
792  }
793  if (opt_list_used)
794  {
795  ph = GNUNET_ATS_performance_init(cfg, NULL, NULL);
796  if (NULL == ph)
797  fprintf(stderr, "%s", _("Cannot connect to ATS service, exiting...\n"));
798 
800  (NULL == opt_pid_str) ? NULL
801  : &pid,
802  GNUNET_NO,
803  &ats_perf_cb,
804  NULL);
805  if (NULL == alh)
806  {
807  fprintf(stderr,
808  "%s",
809  _("Cannot issue request to ATS service, exiting...\n"));
811  return;
812  }
814  return;
815  }
816  if (opt_monitor)
817  {
820  if (NULL == ph)
821  {
822  fprintf(stderr, "%s", _("Cannot connect to ATS service, exiting...\n"));
824  }
825  return;
826  }
827  if (opt_set_pref)
828  {
829  if (NULL == opt_type_str)
830  {
831  fprintf(stderr, "%s", _("No preference type given!\n"));
832  return;
833  }
834  if (NULL == opt_pid_str)
835  {
836  fprintf(stderr, "%s", _("No peer given!\n"));
837  return;
838  }
839 
840  for (c = 0; c < strlen(opt_type_str); c++)
841  {
842  if (isupper((unsigned char)opt_type_str[c]))
843  opt_type_str[c] = tolower((unsigned char)opt_type_str[c]);
844  }
845 
846  if (0 == strcasecmp("latency", opt_type_str))
848  else if (0 == strcasecmp("bandwidth", opt_type_str))
850  else
851  {
852  fprintf(stderr, "%s", _("Valid type required\n"));
853  return;
854  }
855 
856  /* set */
857  ph = GNUNET_ATS_performance_init(cfg, NULL, NULL);
858  if (NULL == ph)
859  fprintf(stderr, "%s", _("Cannot connect to ATS service, exiting...\n"));
860 
862  &pid,
863  type,
864  (double)opt_pref_value,
866 
867  shutdown_task =
869  return;
870  }
871  if (NULL != cpid_str)
872  {
875  shutdown_task =
877  return;
878  }
879  ret = 1;
880 }
static int opt_list_all
CLI Option: List all addresses.
Definition: gnunet-ats.c:56
static char * cpid
Which peer should we connect to?
static int opt_monitor
CLI Option: Monitor addresses used.
Definition: gnunet-ats.c:71
static char * opt_type_str
CLI Option: preference type to set.
Definition: gnunet-ats.c:81
static unsigned int print_quotas(const struct GNUNET_CONFIGURATION_Handle *cfg)
Print information about the quotas configured for the various network scopes.
Definition: gnunet-ats.c:628
static void end(void *cls)
Task run on shutdown.
Definition: gnunet-ats.c:263
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 struct GNUNET_ATS_PerformanceHandle * ph
ATS performance handle used.
Definition: gnunet-ats.c:116
#define GNUNET_TIME_UNIT_SECONDS
One second.
static int opt_list_used
CLI Option: List only addresses currently used (active)
Definition: gnunet-ats.c:51
#define GNUNET_NO
Definition: gnunet_common.h:78
static struct GNUNET_CONTAINER_MultiPeerMap * addresses
Hashmap to store addresses.
Definition: gnunet-ats.c:146
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
struct GNUNET_CONTAINER_MultiPeerMap * GNUNET_CONTAINER_multipeermap_create(unsigned int len, int do_not_copy_keys)
Create a multi peer map (hash map for public keys of peers).
End of preference list.
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
struct GNUNET_ATS_ConnectivitySuggestHandle * GNUNET_ATS_connectivity_suggest(struct GNUNET_ATS_ConnectivityHandle *ch, const struct GNUNET_PeerIdentity *peer, uint32_t strength)
We would like to receive address suggestions for a peer.
static struct GNUNET_ATS_AddressListHandle * alh
ATS address list handle used.
Definition: gnunet-ats.c:131
static void ats_perf_mon_cb(void *cls, const struct GNUNET_HELLO_Address *address, int active, struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, const struct GNUNET_ATS_Properties *prop)
Signature of a function that is called with QoS information about an address.
Definition: gnunet-ats.c:451
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_SCHEDULER_Task * shutdown_task
Shutdown task.
Definition: gnunet-ats.c:141
static int opt_set_pref
CLI Option: set preference.
Definition: gnunet-ats.c:61
static unsigned int opt_pref_value
CLI Option: preference value to set.
Definition: gnunet-ats.c:86
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 struct GNUNET_CONFIGURATION_Handle * cfg
Configuration handle.
Definition: gnunet-ats.c:136
static int stat_results
Number of results returned from service.
Definition: gnunet-ats.c:96
static void ats_perf_cb(void *cls, const struct GNUNET_HELLO_Address *address, int active, struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, const struct GNUNET_ATS_Properties *prop)
Signature of a function that is called with QoS information about an address.
Definition: gnunet-ats.c:577
static struct GNUNET_ATS_ConnectivitySuggestHandle * ats_sh
Handle for address suggestion request.
Definition: gnunet-ats.c:126
static int ret
Final status code.
Definition: gnunet-ats.c:91
static char * cpid_str
Which peer should we connect to?
Definition: gnunet-ats.c:111
Change the peer&#39;s latency value to the given amount.
static char * opt_pid_str
CLI Option: use specific peer.
Definition: gnunet-ats.c:76
struct GNUNET_ATS_PerformanceHandle * GNUNET_ATS_performance_init(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_ATS_AddressInformationCallback addr_info_cb, void *addr_info_cb_cls)
Get handle to access performance API of the ATS subsystem.
struct GNUNET_ATS_ConnectivityHandle * GNUNET_ATS_connectivity_init(const struct GNUNET_CONFIGURATION_Handle *cfg)
Initialize the ATS connectivity suggestion client handle.
int GNUNET_CRYPTO_eddsa_public_key_from_string(const char *enc, size_t enclen, struct GNUNET_CRYPTO_EddsaPublicKey *pub)
Convert a string representing a public key to a public key.
Definition: crypto_ecc.c:501
The identity of the host (wraps the signing key of the peer).
static int opt_print_quotas
CLI Option: print quotas configured.
Definition: gnunet-ats.c:66
configuration data
Definition: configuration.c:83
void GNUNET_ATS_performance_change_preference(struct GNUNET_ATS_PerformanceHandle *ph, const struct GNUNET_PeerIdentity *peer,...)
Change preferences for the given peer.
Change the peer&#39;s bandwidth value (value per byte of bandwidth in the goal function) to the given amo...
struct GNUNET_ATS_AddressListHandle * GNUNET_ATS_performance_list_addresses(struct GNUNET_ATS_PerformanceHandle *ph, const struct GNUNET_PeerIdentity *peer, int all, GNUNET_ATS_AddressInformationCallback infocb, void *infocb_cls)
Get information about addresses known to the ATS subsystem.
enum GNUNET_TESTBED_UnderlayLinkModelType type
the type of this model
#define GNUNET_YES
Definition: gnunet_common.h:77
static struct GNUNET_PeerIdentity pid
Identity of the peer we transmit to / connect to.
static struct GNUNET_ATS_ConnectivityHandle * ats_ch
Our connectivity handle.
Definition: gnunet-ats.c:121
struct GNUNET_CRYPTO_EddsaPublicKey public_key
Here is the call graph for this function:
Here is the caller graph for this function:

◆ main()

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

The main function.

Parameters
argcnumber of arguments from the command line
argvcommand line arguments
Returns
0 ok, 1 on error

Definition at line 891 of file gnunet-ats.c.

References cpid_str, gettext_noop, GNUNET_free, GNUNET_free_non_null, GNUNET_GETOPT_OPTION_END, GNUNET_GETOPT_option_flag(), GNUNET_GETOPT_option_string(), GNUNET_GETOPT_option_uint(), GNUNET_NO, GNUNET_OK, GNUNET_PROGRAM_run(), GNUNET_STRINGS_get_utf8_args(), opt_list_all, opt_list_used, opt_monitor, opt_pid_str, opt_pref_value, opt_print_quotas, opt_resolve_addresses_numeric, opt_set_pref, opt_type_str, opt_verbose, res, ret, run(), stat_pending, and stat_receive_done.

892 {
893  int res;
894 
900  stat_pending = 0;
902  opt_type_str = NULL;
903 
906  "used",
907  gettext_noop(
908  "get list of active addresses currently used"),
909  &opt_list_used),
911  "all",
912  gettext_noop(
913  "get list of all active addresses"),
914  &opt_list_all),
915 
917  "connect",
918  NULL,
919  gettext_noop("connect to PEER"),
920  &cpid_str),
922  "numeric",
923  gettext_noop(
924  "do not resolve IP addresses to hostnames"),
926 
928  "monitor",
929  gettext_noop("monitor mode"),
930  &opt_monitor),
931 
933  "preference",
934  gettext_noop(
935  "set preference for the given peer"),
936  &opt_set_pref),
937 
939  "quotas",
940  gettext_noop("print all configured quotas"),
943  "id",
944  "TYPE",
945  gettext_noop("peer id"),
946  &opt_pid_str),
947 
949  "type",
950  "TYPE",
951  gettext_noop(
952  "preference type to set: latency | bandwidth"),
953  &opt_type_str),
954 
956  "value",
957  "VALUE",
958  gettext_noop("preference value"),
959  &opt_pref_value),
960 
962  'V',
963  "verbose",
964  gettext_noop("verbose output (include ATS address properties)"),
965  &opt_verbose),
967 
968  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args(argc, argv, &argc, &argv))
969  return 2;
970 
971  res = GNUNET_PROGRAM_run(argc,
972  argv,
973  "gnunet-ats",
974  gettext_noop("Print information about ATS state"),
975  options,
976  &run,
977  NULL);
980  GNUNET_free((void *)argv);
981 
982  if (GNUNET_OK == res)
983  return ret;
984  else
985  return 1;
986 }
static int opt_list_all
CLI Option: List all addresses.
Definition: gnunet-ats.c:56
static int opt_monitor
CLI Option: Monitor addresses used.
Definition: gnunet-ats.c:71
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
static int stat_receive_done
State: all pending receive operations done?
Definition: gnunet-ats.c:101
static char * opt_type_str
CLI Option: preference type to set.
Definition: gnunet-ats.c:81
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
static int opt_list_used
CLI Option: List only addresses currently used (active)
Definition: gnunet-ats.c:51
#define GNUNET_NO
Definition: gnunet_common.h:78
static void run(void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *my_cfg)
Main function that will be run by the scheduler.
Definition: gnunet-ats.c:709
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
Definition of a command line 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 int opt_set_pref
CLI Option: set preference.
Definition: gnunet-ats.c:61
static unsigned int opt_pref_value
CLI Option: preference value to set.
Definition: gnunet-ats.c:86
static int opt_resolve_addresses_numeric
CLI Opt:
Definition: gnunet-ats.c:41
static int res
static int ret
Final status code.
Definition: gnunet-ats.c:91
static int stat_pending
State: number of pending operations.
Definition: gnunet-ats.c:106
static char * cpid_str
Which peer should we connect to?
Definition: gnunet-ats.c:111
static char * opt_pid_str
CLI Option: use specific peer.
Definition: gnunet-ats.c:76
static int opt_print_quotas
CLI Option: print quotas configured.
Definition: gnunet-ats.c:66
static int opt_verbose
CLI Opt: Print verbose ATS information.
Definition: gnunet-ats.c:46
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_flag(char shortName, const char *name, const char *description, int *val)
Allow user to specify a flag (which internally means setting an integer to 1/GNUNET_YES/GNUNET_OK.
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.
#define GNUNET_free(ptr)
Wrapper around free.
#define gettext_noop(String)
Definition: gettext.h:69
Here is the call graph for this function:

Variable Documentation

◆ opt_resolve_addresses_numeric

int opt_resolve_addresses_numeric
static

CLI Opt:

Definition at line 41 of file gnunet-ats.c.

Referenced by ats_perf_cb(), ats_perf_mon_cb(), and main().

◆ opt_verbose

int opt_verbose
static

CLI Opt: Print verbose ATS information.

Definition at line 46 of file gnunet-ats.c.

Referenced by ats_perf_mon_cb(), and main().

◆ opt_list_used

int opt_list_used
static

CLI Option: List only addresses currently used (active)

Definition at line 51 of file gnunet-ats.c.

Referenced by end(), main(), and run().

◆ opt_list_all

int opt_list_all
static

CLI Option: List all addresses.

Definition at line 56 of file gnunet-ats.c.

Referenced by end(), main(), and run().

◆ opt_set_pref

int opt_set_pref
static

CLI Option: set preference.

Definition at line 61 of file gnunet-ats.c.

Referenced by main(), and run().

◆ opt_print_quotas

int opt_print_quotas
static

CLI Option: print quotas configured.

Definition at line 66 of file gnunet-ats.c.

Referenced by main(), and run().

◆ opt_monitor

int opt_monitor
static

CLI Option: Monitor addresses used.

Definition at line 71 of file gnunet-ats.c.

Referenced by main(), and run().

◆ opt_pid_str

char* opt_pid_str
static

CLI Option: use specific peer.

Definition at line 76 of file gnunet-ats.c.

Referenced by main(), and run().

◆ opt_type_str

char* opt_type_str
static

CLI Option: preference type to set.

Definition at line 81 of file gnunet-ats.c.

Referenced by main(), and run().

◆ opt_pref_value

unsigned int opt_pref_value
static

CLI Option: preference value to set.

Definition at line 86 of file gnunet-ats.c.

Referenced by main(), and run().

◆ ret

int ret
static

Final status code.

Definition at line 91 of file gnunet-ats.c.

Referenced by end(), main(), and run().

◆ stat_results

int stat_results
static

Number of results returned from service.

Definition at line 96 of file gnunet-ats.c.

Referenced by ats_perf_cb(), ats_perf_mon_cb(), end(), and run().

◆ stat_receive_done

int stat_receive_done
static

State: all pending receive operations done?

Definition at line 101 of file gnunet-ats.c.

Referenced by ats_perf_cb(), main(), and transport_addr_to_str_cb().

◆ stat_pending

int stat_pending
static

State: number of pending operations.

Definition at line 106 of file gnunet-ats.c.

Referenced by ats_perf_cb(), ats_perf_mon_cb(), main(), and transport_addr_to_str_cb().

◆ cpid_str

char* cpid_str
static

Which peer should we connect to?

Definition at line 111 of file gnunet-ats.c.

Referenced by main(), and run().

◆ ph

struct GNUNET_ATS_PerformanceHandle* ph
static

◆ ats_ch

struct GNUNET_ATS_ConnectivityHandle* ats_ch
static

Our connectivity handle.

Definition at line 121 of file gnunet-ats.c.

Referenced by consider_peer_activate().

◆ ats_sh

struct GNUNET_ATS_ConnectivitySuggestHandle* ats_sh
static

Handle for address suggestion request.

Definition at line 126 of file gnunet-ats.c.

◆ alh

struct GNUNET_ATS_AddressListHandle* alh
static

ATS address list handle used.

Definition at line 131 of file gnunet-ats.c.

Referenced by do_reconnect(), GNUNET_ATS_performance_done(), GNUNET_ATS_performance_list_addresses(), and handle_address_list().

◆ cfg

struct GNUNET_CONFIGURATION_Handle* cfg
static

Configuration handle.

Definition at line 136 of file gnunet-ats.c.

◆ shutdown_task

struct GNUNET_SCHEDULER_Task* shutdown_task
static

Shutdown task.

Definition at line 141 of file gnunet-ats.c.

◆ addresses

struct GNUNET_CONTAINER_MultiPeerMap* addresses
static

Hashmap to store addresses.

Definition at line 146 of file gnunet-ats.c.

Referenced by mlp_create_problem_count_peers(), and plugin_env_address_change_notification().

◆ head

struct PendingResolutions* head
static

Head of list of pending resolution requests.

Definition at line 228 of file gnunet-ats.c.

Referenced by ats_perf_mon_cb(), end(), GPI_plugins_find(), meminfo(), multirecord_process(), and select_peer().

◆ tail

struct PendingResolutions* tail
static

Tail of list of pending resolution requests.

Definition at line 233 of file gnunet-ats.c.

Referenced by discard_all_from_rung_tail(), and meminfo().