GNUnet  0.10.x
Functions | Variables
testbed_api_peers.c File Reference

management of the knowledge about peers in this library (we know the peer ID, its host, pending operations, etc.) More...

#include "platform.h"
#include "testbed_api_peers.h"
#include "testbed_api.h"
#include "testbed.h"
#include "testbed_api_hosts.h"
#include "testbed_api_operations.h"
Include dependency graph for testbed_api_peers.c:

Go to the source code of this file.

Functions

void GNUNET_TESTBED_peer_register_ (struct GNUNET_TESTBED_Peer *peer)
 Adds a peer to the peer list. More...
 
void GNUNET_TESTBED_peer_deregister_ (struct GNUNET_TESTBED_Peer *peer)
 Removes a peer from the peer list. More...
 
void GNUNET_TESTBED_cleanup_peers_ (void)
 Frees all peers. More...
 
static void opstart_peer_create (void *cls)
 Function to call to start a peer_create type operation once all queues the operation is part of declare that the operation can be activated. More...
 
static void oprelease_peer_create (void *cls)
 Callback which will be called when peer_create type operation is released. More...
 
static void opstart_peer_destroy (void *cls)
 Function called when a peer destroy operation is ready. More...
 
static void oprelease_peer_destroy (void *cls)
 Callback which will be called when peer_create type operation is released. More...
 
static void opstart_peer_start (void *cls)
 Function called when a peer start operation is ready. More...
 
static void oprelease_peer_start (void *cls)
 Callback which will be called when peer start type operation is released. More...
 
static void opstart_peer_stop (void *cls)
 Function called when a peer stop operation is ready. More...
 
static void oprelease_peer_stop (void *cls)
 Callback which will be called when peer stop type operation is released. More...
 
struct GNUNET_TESTBED_PeerGetConfigurationMessageGNUNET_TESTBED_generate_peergetconfig_msg_ (uint32_t peer_id, uint64_t operation_id)
 Generate PeerGetConfigurationMessage. More...
 
static void opstart_peer_getinfo (void *cls)
 Function called when a peer get information operation is ready. More...
 
static void oprelease_peer_getinfo (void *cls)
 Callback which will be called when peer stop type operation is released. More...
 
static void opstart_overlay_connect (void *cls)
 Function called when a overlay connect operation is ready. More...
 
static void oprelease_overlay_connect (void *cls)
 Callback which will be called when overlay connect operation is released. More...
 
static void opstart_peer_reconfigure (void *cls)
 Function called when a peer reconfigure operation is ready. More...
 
static void oprelease_peer_reconfigure (void *cls)
 Callback which will be called when a peer reconfigure operation is released. More...
 
struct GNUNET_TESTBED_PeerGNUNET_TESTBED_peer_lookup_by_id_ (uint32_t id)
 Lookup a peer by ID. More...
 
struct GNUNET_TESTBED_OperationGNUNET_TESTBED_peer_create (struct GNUNET_TESTBED_Controller *controller, struct GNUNET_TESTBED_Host *host, const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_TESTBED_PeerCreateCallback cb, void *cls)
 Create the given peer at the specified host using the given controller. More...
 
struct GNUNET_TESTBED_OperationGNUNET_TESTBED_peer_start (void *op_cls, struct GNUNET_TESTBED_Peer *peer, GNUNET_TESTBED_PeerChurnCallback pcc, void *pcc_cls)
 Start the given peer. More...
 
struct GNUNET_TESTBED_OperationGNUNET_TESTBED_peer_stop (void *op_cls, struct GNUNET_TESTBED_Peer *peer, GNUNET_TESTBED_PeerChurnCallback pcc, void *pcc_cls)
 Stop the given peer. More...
 
struct GNUNET_TESTBED_OperationGNUNET_TESTBED_peer_get_information (struct GNUNET_TESTBED_Peer *peer, enum GNUNET_TESTBED_PeerInformationType pit, GNUNET_TESTBED_PeerInfoCallback cb, void *cb_cls)
 Request information about a peer. More...
 
struct GNUNET_TESTBED_OperationGNUNET_TESTBED_peer_update_configuration (struct GNUNET_TESTBED_Peer *peer, const struct GNUNET_CONFIGURATION_Handle *cfg)
 Change peer configuration. More...
 
struct GNUNET_TESTBED_OperationGNUNET_TESTBED_peer_destroy (struct GNUNET_TESTBED_Peer *peer)
 Destroy the given peer; the peer should have been stopped first (if it was started). More...
 
struct GNUNET_TESTBED_OperationGNUNET_TESTBED_underlay_configure_link (void *op_cls, struct GNUNET_TESTBED_Peer *p1, struct GNUNET_TESTBED_Peer *p2, enum GNUNET_TESTBED_ConnectOption co,...)
 Manipulate the P2P underlay topology by configuring a link between two peers. More...
 
struct GNUNET_TESTBED_OperationGNUNET_TESTBED_overlay_connect (void *op_cls, GNUNET_TESTBED_OperationCompletionCallback cb, void *cb_cls, struct GNUNET_TESTBED_Peer *p1, struct GNUNET_TESTBED_Peer *p2)
 Both peers must have been started before calling this function. More...
 
static void opstart_manage_service (void *cls)
 Function called when a peer manage service operation is ready. More...
 
static void oprelease_manage_service (void *cls)
 Callback which will be called when peer manage server operation is released. More...
 
struct GNUNET_TESTBED_OperationGNUNET_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. More...
 

Variables

static struct GNUNET_TESTBED_Peerpeer_list_head
 Peer list DLL head. More...
 
static struct GNUNET_TESTBED_Peerpeer_list_tail
 Peer list DLL tail. More...
 

Detailed Description

management of the knowledge about peers in this library (we know the peer ID, its host, pending operations, etc.)

Author
Christian Grothoff
Sree Harsha Totakura

Definition in file testbed_api_peers.c.

Function Documentation

◆ GNUNET_TESTBED_peer_register_()

void GNUNET_TESTBED_peer_register_ ( struct GNUNET_TESTBED_Peer peer)

Adds a peer to the peer list.

Parameters
peerthe peer to add to the peer list

Definition at line 54 of file testbed_api_peers.c.

References GNUNET_CONTAINER_DLL_insert_tail.

Referenced by handle_peer_create_success().

55 {
57 }
#define GNUNET_CONTAINER_DLL_insert_tail(head, tail, element)
Insert an element at the tail of a DLL.
static struct GNUNET_TESTBED_Peer * peer_list_head
Peer list DLL head.
static struct GNUNET_TESTBED_Peer * peer_list_tail
Peer list DLL tail.
Here is the caller graph for this function:

◆ GNUNET_TESTBED_peer_deregister_()

void GNUNET_TESTBED_peer_deregister_ ( struct GNUNET_TESTBED_Peer peer)

Removes a peer from the peer list.

Parameters
peerthe peer to remove

Definition at line 66 of file testbed_api_peers.c.

References GNUNET_CONTAINER_DLL_remove.

Referenced by GNUNET_TESTBED_cleanup_peers_(), and handle_opsuccess().

67 {
69 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
static struct GNUNET_TESTBED_Peer * peer_list_head
Peer list DLL head.
static struct GNUNET_TESTBED_Peer * peer_list_tail
Peer list DLL tail.
Here is the caller graph for this function:

◆ GNUNET_TESTBED_cleanup_peers_()

void GNUNET_TESTBED_cleanup_peers_ ( void  )

Frees all peers.

Definition at line 76 of file testbed_api_peers.c.

References GNUNET_free, GNUNET_TESTBED_peer_deregister_(), and peer.

Referenced by handle_opsuccess().

77 {
78  struct GNUNET_TESTBED_Peer *peer;
79 
80  while (NULL != (peer = peer_list_head))
81  {
83  GNUNET_free (peer);
84  }
85 }
void GNUNET_TESTBED_peer_deregister_(struct GNUNET_TESTBED_Peer *peer)
Removes a peer from the peer list.
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
static struct GNUNET_TESTBED_Peer * peer_list_head
Peer list DLL head.
A peer controlled by the testing framework.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ opstart_peer_create()

static void opstart_peer_create ( void *  cls)
static

Function to call to start a peer_create type operation once all queues the operation is part of declare that the operation can be activated.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 97 of file testbed_api_peers.c.

References OperationContext::c, PeerCreateData::cfg, config, GNUNET_TESTBED_PeerCreateMessage::config_size, data, OperationContext::data, env, GNUNET_assert, GNUNET_CONFIGURATION_serialize(), GNUNET_free, GNUNET_htonll(), GNUNET_memcpy, GNUNET_MESSAGE_TYPE_TESTBED_CREATE_PEER, GNUNET_MQ_msg_extra, GNUNET_MQ_send(), GNUNET_TESTBED_compress_config_(), GNUNET_TESTBED_host_get_id_(), GNUNET_TESTBED_insert_opc_(), GNUNET_TESTBED_Peer::host, GNUNET_TESTBED_PeerCreateMessage::host_id, OperationContext::id, GNUNET_TESTBED_Controller::mq, msg, OP_PEER_CREATE, OPC_STATE_STARTED, GNUNET_TESTBED_PeerCreateMessage::operation_id, PeerCreateData::peer, GNUNET_TESTBED_PeerCreateMessage::peer_id, OperationContext::state, OperationContext::type, and GNUNET_TESTBED_Peer::unique_id.

Referenced by GNUNET_TESTBED_peer_create().

98 {
99  struct OperationContext *opc = cls;
100  struct PeerCreateData *data = opc->data;
102  struct GNUNET_MQ_Envelope *env;
103  char *config;
104  char *xconfig;
105  size_t c_size;
106  size_t xc_size;
107 
109  GNUNET_assert (NULL != data);
110  GNUNET_assert (NULL != data->peer);
111  opc->state = OPC_STATE_STARTED;
112  config = GNUNET_CONFIGURATION_serialize (data->cfg,
113  &c_size);
114  xc_size = GNUNET_TESTBED_compress_config_ (config,
115  c_size,
116  &xconfig);
117  GNUNET_free (config);
118  env = GNUNET_MQ_msg_extra (msg,
119  xc_size,
121  msg->operation_id = GNUNET_htonll (opc->id);
122  msg->host_id = htonl (GNUNET_TESTBED_host_get_id_ (data->peer->host));
123  msg->peer_id = htonl (data->peer->unique_id);
124  msg->config_size = htons ((uint16_t) c_size);
125  GNUNET_memcpy (&msg[1],
126  xconfig,
127  xc_size);
128  GNUNET_MQ_send (opc->c->mq,
129  env);
130  GNUNET_free (xconfig);
131  GNUNET_TESTBED_insert_opc_ (opc->c, opc);
132 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
The operation has been started.
Definition: testbed_api.h:124
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
const struct GNUNET_CONFIGURATION_Handle * cfg
The template configuration of the peer.
#define GNUNET_MQ_msg_extra(mvar, esize, type)
Allocate an envelope, with extra space allocated after the space needed by the message struct...
Definition: gnunet_mq_lib.h:52
#define GNUNET_memcpy(dst, src, n)
uint64_t id
The id of the opearation.
Definition: testbed_api.h:162
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
static const struct GNUNET_CONFIGURATION_Handle * config
uint32_t GNUNET_TESTBED_host_get_id_(const struct GNUNET_TESTBED_Host *host)
Obtain the host's unique global ID.
enum OperationType type
The type of operation.
Definition: testbed_api.h:167
struct GNUNET_TESTBED_Host * host
Which host does this peer run on?
uint64_t operation_id
Unique operation id.
Definition: testbed.h:229
Message sent from client to testing service to create (configure, but not start) a peer...
Definition: testbed.h:213
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
Definition: common_endian.c:35
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
#define GNUNET_MESSAGE_TYPE_TESTBED_CREATE_PEER
Message to create a peer at a host.
size_t GNUNET_TESTBED_compress_config_(const char *config, size_t size, char **xconfig)
Compresses given configuration using zlib compress.
Definition: testbed_api.c:1761
char * GNUNET_CONFIGURATION_serialize(const struct GNUNET_CONFIGURATION_Handle *cfg, size_t *size)
Serializes the given configuration.
uint32_t unique_id
Globally unique ID of the peer.
struct GNUNET_MQ_Handle * mq
The message queue to the controller service.
Definition: testbed_api.h:219
uint32_t host_id
On which host should the peer be started?
Definition: testbed.h:224
Peer create operation.
Definition: testbed_api.h:49
struct GNUNET_TESTBED_Peer * peer
The peer structure to return when we get success message.
void GNUNET_TESTBED_insert_opc_(struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Inserts the given operation context into the operation context map of the given controller.
Definition: testbed_api.c:306
void GNUNET_MQ_send(struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev)
Send a message with the given message queue.
Definition: mq.c:353
uint32_t peer_id
Unique ID for the peer.
Definition: testbed.h:234
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
uint32_t data
The data value.
Data for the OperationType OP_PEER_CREATE.
uint16_t config_size
Size of the uncompressed configuration.
Definition: testbed.h:239
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ oprelease_peer_create()

static void oprelease_peer_create ( void *  cls)
static

Callback which will be called when peer_create type operation is released.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 141 of file testbed_api_peers.c.

References OperationContext::c, OperationContext::data, GNUNET_free, GNUNET_TESTBED_remove_opc_(), OPC_STATE_FINISHED, OPC_STATE_INIT, OPC_STATE_STARTED, and OperationContext::state.

Referenced by GNUNET_TESTBED_peer_create().

142 {
143  struct OperationContext *opc = cls;
144 
145  switch (opc->state)
146  {
147  case OPC_STATE_STARTED:
148  GNUNET_TESTBED_remove_opc_ (opc->c, opc);
149  /* No break we continue flow */
150  case OPC_STATE_INIT:
151  GNUNET_free (((struct PeerCreateData *) opc->data)->peer);
152  GNUNET_free (opc->data);
153  break;
154  case OPC_STATE_FINISHED:
155  break;
156  }
157  GNUNET_free (opc);
158 }
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
The operation has been started.
Definition: testbed_api.h:124
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
The initial state where the associated operation has just been created and is waiting in the operatio...
Definition: testbed_api.h:118
The operation has finished.
Definition: testbed_api.h:130
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
Data for the OperationType OP_PEER_CREATE.
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
#define GNUNET_free(ptr)
Wrapper around free.
void GNUNET_TESTBED_remove_opc_(const struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Removes the given operation context from the operation context map of the given controller.
Definition: testbed_api.c:326
Here is the call graph for this function:
Here is the caller graph for this function:

◆ opstart_peer_destroy()

static void opstart_peer_destroy ( void *  cls)
static

Function called when a peer destroy operation is ready.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 167 of file testbed_api_peers.c.

References OperationContext::c, GNUNET_TESTBED_Peer::controller, OperationContext::data, env, GNUNET_assert, GNUNET_htonll(), GNUNET_MESSAGE_TYPE_TESTBED_DESTROY_PEER, GNUNET_MQ_msg, GNUNET_MQ_send(), GNUNET_TESTBED_insert_opc_(), OperationContext::id, GNUNET_TESTBED_Controller::mq, msg, OP_PEER_DESTROY, OPC_STATE_STARTED, GNUNET_TESTBED_PeerDestroyMessage::operation_id, peer, GNUNET_TESTBED_PeerDestroyMessage::peer_id, OperationContext::state, OperationContext::type, and GNUNET_TESTBED_Peer::unique_id.

Referenced by GNUNET_TESTBED_peer_destroy().

168 {
169  struct OperationContext *opc = cls;
170  struct GNUNET_TESTBED_Peer *peer = opc->data;
172  struct GNUNET_MQ_Envelope *env;
173 
175  GNUNET_assert (NULL != peer);
176  opc->state = OPC_STATE_STARTED;
177  env = GNUNET_MQ_msg (msg,
179  msg->peer_id = htonl (peer->unique_id);
180  msg->operation_id = GNUNET_htonll (opc->id);
181  GNUNET_TESTBED_insert_opc_ (opc->c, opc);
182  GNUNET_MQ_send (peer->controller->mq,
183  env);
184 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
The operation has been started.
Definition: testbed_api.h:124
Message sent from client to testing service to destroy a (stopped) peer.
Definition: testbed.h:334
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_MQ_msg(mvar, type)
Allocate a GNUNET_MQ_Envelope.
Definition: gnunet_mq_lib.h:67
uint32_t peer_id
Unique ID for the peer.
Definition: testbed.h:345
uint64_t id
The id of the opearation.
Definition: testbed_api.h:162
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
Peer destroy operation.
Definition: testbed_api.h:64
#define GNUNET_MESSAGE_TYPE_TESTBED_DESTROY_PEER
Message to destroy a peer.
struct GNUNET_TESTBED_Controller * controller
Our controller context (not necessarily the controller that is responsible for starting/running the p...
enum OperationType type
The type of operation.
Definition: testbed_api.h:167
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
Definition: common_endian.c:35
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
uint32_t unique_id
Globally unique ID of the peer.
struct GNUNET_MQ_Handle * mq
The message queue to the controller service.
Definition: testbed_api.h:219
void GNUNET_TESTBED_insert_opc_(struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Inserts the given operation context into the operation context map of the given controller.
Definition: testbed_api.c:306
void GNUNET_MQ_send(struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev)
Send a message with the given message queue.
Definition: mq.c:353
A peer controlled by the testing framework.
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
uint64_t operation_id
Operation ID that is used to identify this operation.
Definition: testbed.h:350
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
Here is the call graph for this function:
Here is the caller graph for this function:

◆ oprelease_peer_destroy()

static void oprelease_peer_destroy ( void *  cls)
static

Callback which will be called when peer_create type operation is released.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 193 of file testbed_api_peers.c.

References OperationContext::c, GNUNET_free, GNUNET_TESTBED_remove_opc_(), OPC_STATE_FINISHED, OPC_STATE_INIT, OPC_STATE_STARTED, and OperationContext::state.

Referenced by GNUNET_TESTBED_peer_destroy().

194 {
195  struct OperationContext *opc = cls;
196 
197  switch (opc->state)
198  {
199  case OPC_STATE_STARTED:
200  GNUNET_TESTBED_remove_opc_ (opc->c, opc);
201  /* no break; continue */
202  case OPC_STATE_INIT:
203  break;
204  case OPC_STATE_FINISHED:
205  break;
206  }
207  GNUNET_free (opc);
208 }
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
The operation has been started.
Definition: testbed_api.h:124
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
The initial state where the associated operation has just been created and is waiting in the operatio...
Definition: testbed_api.h:118
The operation has finished.
Definition: testbed_api.h:130
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
#define GNUNET_free(ptr)
Wrapper around free.
void GNUNET_TESTBED_remove_opc_(const struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Removes the given operation context from the operation context map of the given controller.
Definition: testbed_api.c:326
Here is the call graph for this function:
Here is the caller graph for this function:

◆ opstart_peer_start()

static void opstart_peer_start ( void *  cls)
static

Function called when a peer start operation is ready.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 217 of file testbed_api_peers.c.

References OperationContext::c, GNUNET_TESTBED_Peer::controller, data, OperationContext::data, env, GNUNET_assert, GNUNET_htonll(), GNUNET_MESSAGE_TYPE_TESTBED_START_PEER, GNUNET_MQ_msg, GNUNET_MQ_send(), GNUNET_TESTBED_insert_opc_(), OperationContext::id, GNUNET_TESTBED_Controller::mq, msg, OP_PEER_START, OPC_STATE_STARTED, GNUNET_TESTBED_PeerStartMessage::operation_id, peer, PeerEventData::peer, GNUNET_TESTBED_PeerStartMessage::peer_id, GNUNET_TESTBED_Peer::state, OperationContext::state, TESTBED_PS_CREATED, TESTBED_PS_STOPPED, OperationContext::type, and GNUNET_TESTBED_Peer::unique_id.

Referenced by GNUNET_TESTBED_peer_start().

218 {
219  struct OperationContext *opc = cls;
221  struct GNUNET_MQ_Envelope *env;
222  struct PeerEventData *data;
223  struct GNUNET_TESTBED_Peer *peer;
224 
225  GNUNET_assert (OP_PEER_START == opc->type);
226  GNUNET_assert (NULL != (data = opc->data));
227  GNUNET_assert (NULL != (peer = data->peer));
229  opc->state = OPC_STATE_STARTED;
230  env = GNUNET_MQ_msg (msg,
232  msg->peer_id = htonl (peer->unique_id);
233  msg->operation_id = GNUNET_htonll (opc->id);
234  GNUNET_TESTBED_insert_opc_ (opc->c, opc);
235  GNUNET_MQ_send (peer->controller->mq,
236  env);
237 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
The operation has been started.
Definition: testbed_api.h:124
uint64_t operation_id
Operation ID that is used to identify this operation.
Definition: testbed.h:300
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_MQ_msg(mvar, type)
Allocate a GNUNET_MQ_Envelope.
Definition: gnunet_mq_lib.h:67
struct GNUNET_TESTBED_Peer * peer
The handle of the peer to start.
Data for OperationType OP_PEER_START and OP_PEER_STOP.
Message sent from client to testing service to start a peer.
Definition: testbed.h:284
enum PeerState state
Peer's state.
uint64_t id
The id of the opearation.
Definition: testbed_api.h:162
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
struct GNUNET_TESTBED_Controller * controller
Our controller context (not necessarily the controller that is responsible for starting/running the p...
Peer start operation.
Definition: testbed_api.h:54
enum OperationType type
The type of operation.
Definition: testbed_api.h:167
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
Definition: common_endian.c:35
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
The peer is stopped.
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
uint32_t unique_id
Globally unique ID of the peer.
struct GNUNET_MQ_Handle * mq
The message queue to the controller service.
Definition: testbed_api.h:219
The peer has been created.
void GNUNET_TESTBED_insert_opc_(struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Inserts the given operation context into the operation context map of the given controller.
Definition: testbed_api.c:306
void GNUNET_MQ_send(struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev)
Send a message with the given message queue.
Definition: mq.c:353
A peer controlled by the testing framework.
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
uint32_t data
The data value.
#define GNUNET_MESSAGE_TYPE_TESTBED_START_PEER
Message to start a peer at a host.
uint32_t peer_id
Unique ID for the peer.
Definition: testbed.h:295
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
Here is the call graph for this function:
Here is the caller graph for this function:

◆ oprelease_peer_start()

static void oprelease_peer_start ( void *  cls)
static

Callback which will be called when peer start type operation is released.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 246 of file testbed_api_peers.c.

References OperationContext::c, OperationContext::data, GNUNET_free, GNUNET_TESTBED_remove_opc_(), OPC_STATE_FINISHED, OPC_STATE_INIT, OPC_STATE_STARTED, and OperationContext::state.

Referenced by GNUNET_TESTBED_peer_start().

247 {
248  struct OperationContext *opc = cls;
249 
250  switch (opc->state)
251  {
252  case OPC_STATE_STARTED:
253  GNUNET_TESTBED_remove_opc_ (opc->c, opc);
254  /* no break; continue */
255  case OPC_STATE_INIT:
256  GNUNET_free (opc->data);
257  break;
258  case OPC_STATE_FINISHED:
259  break;
260  }
261  GNUNET_free (opc);
262 }
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
The operation has been started.
Definition: testbed_api.h:124
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
The initial state where the associated operation has just been created and is waiting in the operatio...
Definition: testbed_api.h:118
The operation has finished.
Definition: testbed_api.h:130
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
#define GNUNET_free(ptr)
Wrapper around free.
void GNUNET_TESTBED_remove_opc_(const struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Removes the given operation context from the operation context map of the given controller.
Definition: testbed_api.c:326
Here is the call graph for this function:
Here is the caller graph for this function:

◆ opstart_peer_stop()

static void opstart_peer_stop ( void *  cls)
static

Function called when a peer stop operation is ready.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 271 of file testbed_api_peers.c.

References OperationContext::c, GNUNET_TESTBED_Peer::controller, data, OperationContext::data, env, GNUNET_assert, GNUNET_htonll(), GNUNET_MESSAGE_TYPE_TESTBED_STOP_PEER, GNUNET_MQ_msg, GNUNET_MQ_send(), GNUNET_TESTBED_insert_opc_(), OperationContext::id, GNUNET_TESTBED_Controller::mq, msg, OPC_STATE_STARTED, GNUNET_TESTBED_PeerStopMessage::operation_id, peer, PeerEventData::peer, GNUNET_TESTBED_PeerStopMessage::peer_id, GNUNET_TESTBED_Peer::state, OperationContext::state, TESTBED_PS_STARTED, and GNUNET_TESTBED_Peer::unique_id.

Referenced by GNUNET_TESTBED_peer_stop().

272 {
273  struct OperationContext *opc = cls;
275  struct PeerEventData *data;
276  struct GNUNET_TESTBED_Peer *peer;
277  struct GNUNET_MQ_Envelope *env;
278 
279  GNUNET_assert (NULL != (data = opc->data));
280  GNUNET_assert (NULL != (peer = data->peer));
282  opc->state = OPC_STATE_STARTED;
283  env = GNUNET_MQ_msg (msg,
285  msg->peer_id = htonl (peer->unique_id);
286  msg->operation_id = GNUNET_htonll (opc->id);
287  GNUNET_TESTBED_insert_opc_ (opc->c, opc);
288  GNUNET_MQ_send (peer->controller->mq,
289  env);
290 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
Message sent from client to testing service to stop a peer.
Definition: testbed.h:309
The operation has been started.
Definition: testbed_api.h:124
#define GNUNET_MESSAGE_TYPE_TESTBED_STOP_PEER
Message to stop a peer at a host.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_MQ_msg(mvar, type)
Allocate a GNUNET_MQ_Envelope.
Definition: gnunet_mq_lib.h:67
struct GNUNET_TESTBED_Peer * peer
The handle of the peer to start.
Data for OperationType OP_PEER_START and OP_PEER_STOP.
enum PeerState state
Peer's state.
uint64_t id
The id of the opearation.
Definition: testbed_api.h:162
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
struct GNUNET_TESTBED_Controller * controller
Our controller context (not necessarily the controller that is responsible for starting/running the p...
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
Definition: common_endian.c:35
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
uint32_t unique_id
Globally unique ID of the peer.
struct GNUNET_MQ_Handle * mq
The message queue to the controller service.
Definition: testbed_api.h:219
uint32_t peer_id
Unique ID for the peer.
Definition: testbed.h:320
void GNUNET_TESTBED_insert_opc_(struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Inserts the given operation context into the operation context map of the given controller.
Definition: testbed_api.c:306
void GNUNET_MQ_send(struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev)
Send a message with the given message queue.
Definition: mq.c:353
The peer is running.
A peer controlled by the testing framework.
uint64_t operation_id
Operation ID that is used to identify this operation.
Definition: testbed.h:325
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
uint32_t data
The data value.
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
Here is the call graph for this function:
Here is the caller graph for this function:

◆ oprelease_peer_stop()

static void oprelease_peer_stop ( void *  cls)
static

Callback which will be called when peer stop type operation is released.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 299 of file testbed_api_peers.c.

References OperationContext::c, OperationContext::data, GNUNET_free, GNUNET_TESTBED_remove_opc_(), OPC_STATE_FINISHED, OPC_STATE_INIT, OPC_STATE_STARTED, and OperationContext::state.

Referenced by GNUNET_TESTBED_peer_stop().

300 {
301  struct OperationContext *opc = cls;
302 
303  switch (opc->state)
304  {
305  case OPC_STATE_STARTED:
306  GNUNET_TESTBED_remove_opc_ (opc->c, opc);
307  /* no break; continue */
308  case OPC_STATE_INIT:
309  GNUNET_free (opc->data);
310  break;
311  case OPC_STATE_FINISHED:
312  break;
313  }
314  GNUNET_free (opc);
315 }
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
The operation has been started.
Definition: testbed_api.h:124
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
The initial state where the associated operation has just been created and is waiting in the operatio...
Definition: testbed_api.h:118
The operation has finished.
Definition: testbed_api.h:130
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
#define GNUNET_free(ptr)
Wrapper around free.
void GNUNET_TESTBED_remove_opc_(const struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Removes the given operation context from the operation context map of the given controller.
Definition: testbed_api.c:326
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_TESTBED_generate_peergetconfig_msg_()

struct GNUNET_TESTBED_PeerGetConfigurationMessage* GNUNET_TESTBED_generate_peergetconfig_msg_ ( uint32_t  peer_id,
uint64_t  operation_id 
)

Generate PeerGetConfigurationMessage.

Parameters
peer_idthe id of the peer whose information we have to get
operation_idthe ip of the operation that should be represented in the message
Returns
the PeerGetConfigurationMessage

Definition at line 327 of file testbed_api_peers.c.

References GNUNET_htonll(), GNUNET_malloc, GNUNET_MESSAGE_TYPE_TESTBED_GET_PEER_INFORMATION, GNUNET_TESTBED_PeerGetConfigurationMessage::header, msg, GNUNET_TESTBED_PeerGetConfigurationMessage::operation_id, GNUNET_TESTBED_PeerGetConfigurationMessage::peer_id, GNUNET_MessageHeader::size, and GNUNET_MessageHeader::type.

Referenced by opstart_peer_getinfo(), and opstart_service_connect().

329 {
331 
332  msg =
333  GNUNET_malloc (sizeof
335  msg->header.size =
336  htons (sizeof (struct GNUNET_TESTBED_PeerGetConfigurationMessage));
338  msg->peer_id = htonl (peer_id);
340  return msg;
341 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
Message sent from client to testing service to obtain the configuration of a peer.
Definition: testbed.h:615
static char * peer_id
Option –peer.
Definition: gnunet-cadet.c:42
uint32_t peer_id
Unique ID for the peer.
Definition: testbed.h:626
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format...
uint16_t type
The type of the message (GNUNET_MESSAGE_TYPE_XXXX), in big-endian format.
uint64_t operation_id
Operation ID that is used to identify this operation.
Definition: testbed.h:631
struct GNUNET_MessageHeader header
Type is GNUNET_MESSAGE_TYPE_TESTBED_GET_PEER_INFORMATION.
Definition: testbed.h:621
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
Definition: common_endian.c:35
#define GNUNET_MESSAGE_TYPE_TESTBED_GET_PEER_INFORMATION
Message to get a peer's information.
#define GNUNET_malloc(size)
Wrapper around malloc.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ opstart_peer_getinfo()

static void opstart_peer_getinfo ( void *  cls)
static

Function called when a peer get information operation is ready.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 350 of file testbed_api_peers.c.

References OperationContext::c, data, OperationContext::data, GNUNET_assert, GNUNET_TESTBED_generate_peergetconfig_msg_(), GNUNET_TESTBED_insert_opc_(), GNUNET_TESTBED_queue_message_(), GNUNET_TESTBED_PeerGetConfigurationMessage::header, OperationContext::id, msg, OPC_STATE_STARTED, PeerInfoData::peer, OperationContext::state, and GNUNET_TESTBED_Peer::unique_id.

Referenced by GNUNET_TESTBED_peer_get_information().

351 {
352  struct OperationContext *opc = cls;
353  struct PeerInfoData *data = opc->data;
355 
356  GNUNET_assert (NULL != data);
357  opc->state = OPC_STATE_STARTED;
358  msg =
360  opc->id);
361  GNUNET_TESTBED_insert_opc_ (opc->c, opc);
362  GNUNET_TESTBED_queue_message_ (opc->c, &msg->header);
363 }
Data for the OperationType OP_PEER_INFO.
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
Message sent from client to testing service to obtain the configuration of a peer.
Definition: testbed.h:615
The operation has been started.
Definition: testbed_api.h:124
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_TESTBED_PeerGetConfigurationMessage * GNUNET_TESTBED_generate_peergetconfig_msg_(uint32_t peer_id, uint64_t operation_id)
Generate PeerGetConfigurationMessage.
uint64_t id
The id of the opearation.
Definition: testbed_api.h:162
struct GNUNET_MessageHeader header
Type is GNUNET_MESSAGE_TYPE_TESTBED_GET_PEER_INFORMATION.
Definition: testbed.h:621
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
void GNUNET_TESTBED_queue_message_(struct GNUNET_TESTBED_Controller *controller, struct GNUNET_MessageHeader *msg)
Queues a message in send queue for sending to the service.
Definition: testbed_api.c:1331
uint32_t unique_id
Globally unique ID of the peer.
void GNUNET_TESTBED_insert_opc_(struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Inserts the given operation context into the operation context map of the given controller.
Definition: testbed_api.c:306
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
uint32_t data
The data value.
struct GNUNET_TESTBED_Peer * peer
The peer whose information has been requested.
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
Here is the call graph for this function:
Here is the caller graph for this function:

◆ oprelease_peer_getinfo()

static void oprelease_peer_getinfo ( void *  cls)
static

Callback which will be called when peer stop type operation is released.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 372 of file testbed_api_peers.c.

References OperationContext::c, GNUNET_TESTBED_PeerInformation::cfg, data, OperationContext::data, GNUNET_assert, GNUNET_CONFIGURATION_destroy(), GNUNET_free, GNUNET_TESTBED_PIT_CONFIGURATION, GNUNET_TESTBED_PIT_IDENTITY, GNUNET_TESTBED_remove_opc_(), GNUNET_TESTBED_PeerInformation::id, OPC_STATE_FINISHED, OPC_STATE_INIT, OPC_STATE_STARTED, GNUNET_TESTBED_PeerInformation::pit, GNUNET_TESTBED_PeerInformation::result, and OperationContext::state.

Referenced by GNUNET_TESTBED_peer_get_information().

373 {
374  struct OperationContext *opc = cls;
376 
377  switch (opc->state)
378  {
379  case OPC_STATE_STARTED:
380  GNUNET_TESTBED_remove_opc_ (opc->c, opc);
381  /* no break; continue */
382  case OPC_STATE_INIT:
383  GNUNET_free (opc->data);
384  break;
385  case OPC_STATE_FINISHED:
386  data = opc->data;
387  GNUNET_assert (NULL != data);
388  switch (data->pit)
389  {
391  if (NULL != data->result.cfg)
393  break;
395  GNUNET_free (data->result.id);
396  break;
397  default:
398  GNUNET_assert (0); /* We should never reach here */
399  }
400  GNUNET_free (data);
401  break;
402  }
403  GNUNET_free (opc);
404 }
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
union GNUNET_TESTBED_PeerInformation::@64 result
The result of the get information operation; Choose according to the pit.
The operation has been started.
Definition: testbed_api.h:124
enum GNUNET_TESTBED_PeerInformationType pit
Peer information type; captures which of the types in the 'op_result' is actually in use...
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_PeerIdentity * id
The identity of the peer.
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
void GNUNET_CONFIGURATION_destroy(struct GNUNET_CONFIGURATION_Handle *cfg)
Destroy configuration object.
What configuration is the peer using? Returns a 'const struct GNUNET_CONFIGURATION_Handle *'...
struct GNUNET_CONFIGURATION_Handle * cfg
The configuration of the peer.
The initial state where the associated operation has just been created and is waiting in the operatio...
Definition: testbed_api.h:118
The operation has finished.
Definition: testbed_api.h:130
What is the identity of the peer? Returns a 'const struct GNUNET_PeerIdentity *'. ...
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
uint32_t data
The data value.
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
#define GNUNET_free(ptr)
Wrapper around free.
void GNUNET_TESTBED_remove_opc_(const struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Removes the given operation context from the operation context map of the given controller.
Definition: testbed_api.c:326
Data returned from GNUNET_TESTBED_peer_get_information.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ opstart_overlay_connect()

static void opstart_overlay_connect ( void *  cls)
static

Function called when a overlay connect operation is ready.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 413 of file testbed_api_peers.c.

References OperationContext::c, data, OperationContext::data, env, GNUNET_assert, GNUNET_htonll(), GNUNET_MESSAGE_TYPE_TESTBED_OVERLAY_CONNECT, GNUNET_MQ_msg, GNUNET_MQ_send(), GNUNET_TESTBED_host_get_id_(), GNUNET_TESTBED_insert_opc_(), GNUNET_TESTBED_Peer::host, OperationContext::id, GNUNET_TESTBED_Controller::mq, msg, OPC_STATE_STARTED, GNUNET_TESTBED_OverlayConnectMessage::operation_id, OverlayConnectData::p1, OverlayConnectData::p2, GNUNET_TESTBED_OverlayConnectMessage::peer1, GNUNET_TESTBED_OverlayConnectMessage::peer2, GNUNET_TESTBED_OverlayConnectMessage::peer2_host_id, OperationContext::state, and GNUNET_TESTBED_Peer::unique_id.

Referenced by GNUNET_TESTBED_overlay_connect().

414 {
415  struct OperationContext *opc = cls;
416  struct GNUNET_MQ_Envelope *env;
418  struct OverlayConnectData *data;
419 
420  opc->state = OPC_STATE_STARTED;
421  data = opc->data;
422  GNUNET_assert (NULL != data);
423  env = GNUNET_MQ_msg (msg,
425  msg->peer1 = htonl (data->p1->unique_id);
426  msg->peer2 = htonl (data->p2->unique_id);
427  msg->operation_id = GNUNET_htonll (opc->id);
428  msg->peer2_host_id = htonl (GNUNET_TESTBED_host_get_id_ (data->p2->host));
430  opc);
431  GNUNET_MQ_send (opc->c->mq,
432  env);
433 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
The operation has been started.
Definition: testbed_api.h:124
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_MQ_msg(mvar, type)
Allocate a GNUNET_MQ_Envelope.
Definition: gnunet_mq_lib.h:67
uint64_t operation_id
Operation ID that is used to identify this operation.
Definition: testbed.h:412
uint32_t peer2
Unique ID for the second peer.
Definition: testbed.h:417
uint64_t id
The id of the opearation.
Definition: testbed_api.h:162
uint32_t peer1
Unique ID for the first peer.
Definition: testbed.h:407
uint32_t peer2_host_id
The ID of the host which runs peer2.
Definition: testbed.h:422
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
uint32_t GNUNET_TESTBED_host_get_id_(const struct GNUNET_TESTBED_Host *host)
Obtain the host's unique global ID.
struct GNUNET_TESTBED_Host * host
Which host does this peer run on?
#define GNUNET_MESSAGE_TYPE_TESTBED_OVERLAY_CONNECT
Message to connect peers in a overlay.
Data structure for OperationType OP_OVERLAY_CONNECT.
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
Definition: common_endian.c:35
struct GNUNET_TESTBED_Peer * p1
Peer A to connect to peer B.
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
Message sent from client to testing service to connect two peers.
Definition: testbed.h:396
uint32_t unique_id
Globally unique ID of the peer.
struct GNUNET_TESTBED_Peer * p2
Peer B.
struct GNUNET_MQ_Handle * mq
The message queue to the controller service.
Definition: testbed_api.h:219
void GNUNET_TESTBED_insert_opc_(struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Inserts the given operation context into the operation context map of the given controller.
Definition: testbed_api.c:306
void GNUNET_MQ_send(struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev)
Send a message with the given message queue.
Definition: mq.c:353
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
uint32_t data
The data value.
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
Here is the call graph for this function:
Here is the caller graph for this function:

◆ oprelease_overlay_connect()

static void oprelease_overlay_connect ( void *  cls)
static

Callback which will be called when overlay connect operation is released.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 442 of file testbed_api_peers.c.

References OperationContext::c, data, OperationContext::data, GNUNET_free, GNUNET_TESTBED_remove_opc_(), OPC_STATE_FINISHED, OPC_STATE_INIT, OPC_STATE_STARTED, and OperationContext::state.

Referenced by GNUNET_TESTBED_overlay_connect().

443 {
444  struct OperationContext *opc = cls;
445  struct OverlayConnectData *data;
446 
447  data = opc->data;
448  switch (opc->state)
449  {
450  case OPC_STATE_INIT:
451  break;
452  case OPC_STATE_STARTED:
453  GNUNET_TESTBED_remove_opc_ (opc->c, opc);
454  break;
455  case OPC_STATE_FINISHED:
456  break;
457  }
458  GNUNET_free (data);
459  GNUNET_free (opc);
460 }
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
The operation has been started.
Definition: testbed_api.h:124
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
Data structure for OperationType OP_OVERLAY_CONNECT.
The initial state where the associated operation has just been created and is waiting in the operatio...
Definition: testbed_api.h:118
The operation has finished.
Definition: testbed_api.h:130
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
uint32_t data
The data value.
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
#define GNUNET_free(ptr)
Wrapper around free.
void GNUNET_TESTBED_remove_opc_(const struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Removes the given operation context from the operation context map of the given controller.
Definition: testbed_api.c:326
Here is the call graph for this function:
Here is the caller graph for this function:

◆ opstart_peer_reconfigure()

static void opstart_peer_reconfigure ( void *  cls)
static

Function called when a peer reconfigure operation is ready.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 469 of file testbed_api_peers.c.

References OperationContext::c, PeerReconfigureData::cfg_size, PeerReconfigureData::config, GNUNET_TESTBED_PeerReconfigureMessage::config_size, data, OperationContext::data, env, GNUNET_assert, GNUNET_free, GNUNET_htonll(), GNUNET_memcpy, GNUNET_MESSAGE_TYPE_TESTBED_RECONFIGURE_PEER, GNUNET_MQ_msg_extra, GNUNET_MQ_send(), GNUNET_TESTBED_compress_config_(), GNUNET_TESTBED_insert_opc_(), OperationContext::id, GNUNET_TESTBED_Controller::mq, msg, OPC_STATE_STARTED, GNUNET_TESTBED_PeerReconfigureMessage::operation_id, PeerReconfigureData::peer, GNUNET_TESTBED_PeerReconfigureMessage::peer_id, OperationContext::state, and GNUNET_TESTBED_Peer::unique_id.

Referenced by GNUNET_TESTBED_peer_update_configuration().

470 {
471  struct OperationContext *opc = cls;
472  struct PeerReconfigureData *data = opc->data;
473  struct GNUNET_MQ_Envelope *env;
475  char *xconfig;
476  size_t xc_size;
477 
478  opc->state = OPC_STATE_STARTED;
479  GNUNET_assert (NULL != data);
480  xc_size = GNUNET_TESTBED_compress_config_ (data->config,
481  data->cfg_size,
482  &xconfig);
483  GNUNET_free (data->config);
484  data->config = NULL;
485  GNUNET_assert (xc_size < UINT16_MAX - sizeof (*msg));
486  env = GNUNET_MQ_msg_extra (msg,
487  xc_size,
489  msg->peer_id = htonl (data->peer->unique_id);
490  msg->operation_id = GNUNET_htonll (opc->id);
491  msg->config_size = htons (data->cfg_size);
492  GNUNET_memcpy (&msg[1],
493  xconfig,
494  xc_size);
495  GNUNET_free (xconfig);
496  GNUNET_free (data);
497  opc->data = NULL;
498  GNUNET_TESTBED_insert_opc_ (opc->c, opc);
499  GNUNET_MQ_send (opc->c->mq,
500  env);
501 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
Message sent from client to testing service to reconfigure a (stopped) a peer.
Definition: testbed.h:251
uint16_t cfg_size
the size of the serialized configuration
The operation has been started.
Definition: testbed_api.h:124
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_TESTBED_Peer * peer
The peer whose information has been requested.
uint32_t peer_id
Unique ID for the peer.
Definition: testbed.h:262
uint16_t config_size
The length of the serialized configuration when uncompressed.
Definition: testbed.h:272
#define GNUNET_MQ_msg_extra(mvar, esize, type)
Allocate an envelope, with extra space allocated after the space needed by the message struct...
Definition: gnunet_mq_lib.h:52
#define GNUNET_memcpy(dst, src, n)
uint64_t operation_id
Operation ID that is used to identify this operation.
Definition: testbed.h:267
uint64_t id
The id of the opearation.
Definition: testbed_api.h:162
#define GNUNET_MESSAGE_TYPE_TESTBED_RECONFIGURE_PEER
Message to reconfigure a peer.
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
Definition: common_endian.c:35
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
Data for the operations of type OP_PEER_RECONFIGURE.
size_t GNUNET_TESTBED_compress_config_(const char *config, size_t size, char **xconfig)
Compresses given configuration using zlib compress.
Definition: testbed_api.c:1761
uint32_t unique_id
Globally unique ID of the peer.
struct GNUNET_MQ_Handle * mq
The message queue to the controller service.
Definition: testbed_api.h:219
void GNUNET_TESTBED_insert_opc_(struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Inserts the given operation context into the operation context map of the given controller.
Definition: testbed_api.c:306
void GNUNET_MQ_send(struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev)
Send a message with the given message queue.
Definition: mq.c:353
char * config
The serialized new configuration template.
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
uint32_t data
The data value.
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ oprelease_peer_reconfigure()

static void oprelease_peer_reconfigure ( void *  cls)
static

Callback which will be called when a peer reconfigure operation is released.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 510 of file testbed_api_peers.c.

References OperationContext::c, PeerReconfigureData::config, data, OperationContext::data, GNUNET_free, GNUNET_TESTBED_remove_opc_(), OPC_STATE_FINISHED, OPC_STATE_INIT, OPC_STATE_STARTED, and OperationContext::state.

Referenced by GNUNET_TESTBED_peer_update_configuration().

511 {
512  struct OperationContext *opc = cls;
513  struct PeerReconfigureData *data = opc->data;
514 
515  switch (opc->state)
516  {
517  case OPC_STATE_INIT:
518  GNUNET_free (data->config);
519  GNUNET_free (data);
520  break;
521  case OPC_STATE_STARTED:
522  GNUNET_TESTBED_remove_opc_ (opc->c, opc);
523  break;
524  case OPC_STATE_FINISHED:
525  break;
526  }
527  GNUNET_free (opc);
528 }
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
The operation has been started.
Definition: testbed_api.h:124
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
The initial state where the associated operation has just been created and is waiting in the operatio...
Definition: testbed_api.h:118
The operation has finished.
Definition: testbed_api.h:130
Data for the operations of type OP_PEER_RECONFIGURE.
char * config
The serialized new configuration template.
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
uint32_t data
The data value.
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
#define GNUNET_free(ptr)
Wrapper around free.
void GNUNET_TESTBED_remove_opc_(const struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Removes the given operation context from the operation context map of the given controller.
Definition: testbed_api.c:326
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_TESTBED_peer_lookup_by_id_()

struct GNUNET_TESTBED_Peer* GNUNET_TESTBED_peer_lookup_by_id_ ( uint32_t  id)

Lookup a peer by ID.

Parameters
idglobal peer ID assigned to the peer
Returns
handle to the host, NULL on error

Definition at line 538 of file testbed_api_peers.c.

References GNUNET_break.

539 {
540  GNUNET_break (0);
541  return NULL;
542 }
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...

◆ opstart_manage_service()

static void opstart_manage_service ( void *  cls)
static

Function called when a peer manage service operation is ready.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 885 of file testbed_api_peers.c.

References OperationContext::c, data, OperationContext::data, env, GNUNET_assert, GNUNET_free, GNUNET_htonll(), GNUNET_memcpy, GNUNET_MESSAGE_TYPE_TESTBED_MANAGE_PEER_SERVICE, GNUNET_MQ_msg_extra, GNUNET_MQ_send(), GNUNET_TESTBED_insert_opc_(), OperationContext::id, GNUNET_TESTBED_Controller::mq, msg, ManageServiceData::msize, OPC_STATE_STARTED, GNUNET_TESTBED_ManagePeerServiceMessage::operation_id, ManageServiceData::peer, GNUNET_TESTBED_ManagePeerServiceMessage::peer_id, ManageServiceData::service_name, ManageServiceData::start, GNUNET_TESTBED_ManagePeerServiceMessage::start, OperationContext::state, and GNUNET_TESTBED_Peer::unique_id.

Referenced by GNUNET_TESTBED_peer_manage_service().

886 {
887  struct OperationContext *opc = cls;
888  struct ManageServiceData *data = opc->data;
889  struct GNUNET_MQ_Envelope *env;
891  size_t xlen;
892 
893  GNUNET_assert (NULL != data);
894  xlen = data->msize - sizeof (struct GNUNET_TESTBED_ManagePeerServiceMessage);
895  env = GNUNET_MQ_msg_extra (msg,
896  xlen,
898  msg->peer_id = htonl (data->peer->unique_id);
899  msg->operation_id = GNUNET_htonll (opc->id);
900  msg->start = (uint8_t) data->start;
901  GNUNET_memcpy (&msg[1],
902  data->service_name,
903  xlen);
904  GNUNET_free (data->service_name);
905  data->service_name = NULL;
906  opc->state = OPC_STATE_STARTED;
907  GNUNET_TESTBED_insert_opc_ (opc->c, opc);
908  GNUNET_MQ_send (opc->c->mq,
909  env);
910 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
The operation has been started.
Definition: testbed_api.h:124
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_MESSAGE_TYPE_TESTBED_MANAGE_PEER_SERVICE
Message to start/stop a service of a peer.
#define GNUNET_MQ_msg_extra(mvar, esize, type)
Allocate an envelope, with extra space allocated after the space needed by the message struct...
Definition: gnunet_mq_lib.h:52
uint64_t operation_id
Operation ID.
Definition: testbed.h:760
#define GNUNET_memcpy(dst, src, n)
uint64_t id
The id of the opearation.
Definition: testbed_api.h:162
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
Definition: common_endian.c:35
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
uint8_t start
set this to 1 to start the service; 0 to stop the service
Definition: testbed.h:765
uint32_t unique_id
Globally unique ID of the peer.
uint32_t peer_id
Unique ID of the peer whose service has to be managed.
Definition: testbed.h:755
struct GNUNET_TESTBED_Peer * peer
Message to start/stop services of a peer.
Definition: testbed.h:745
struct GNUNET_MQ_Handle * mq
The message queue to the controller service.
Definition: testbed_api.h:219
void GNUNET_TESTBED_insert_opc_(struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Inserts the given operation context into the operation context map of the given controller.
Definition: testbed_api.c:306
void GNUNET_MQ_send(struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev)
Send a message with the given message queue.
Definition: mq.c:353
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
uint32_t data
The data value.
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ oprelease_manage_service()

static void oprelease_manage_service ( void *  cls)
static

Callback which will be called when peer manage server operation is released.

Parameters
clsthe closure from GNUNET_TESTBED_operation_create_()

Definition at line 919 of file testbed_api_peers.c.

References OperationContext::c, data, OperationContext::data, GNUNET_assert, GNUNET_free, GNUNET_free_non_null, GNUNET_TESTBED_remove_opc_(), OPC_STATE_FINISHED, OPC_STATE_INIT, OPC_STATE_STARTED, ManageServiceData::service_name, and OperationContext::state.

Referenced by GNUNET_TESTBED_peer_manage_service().

920 {
921  struct OperationContext *opc = cls;
922  struct ManageServiceData *data;
923 
924  data = opc->data;
925  switch (opc->state)
926  {
927  case OPC_STATE_STARTED:
928  GNUNET_TESTBED_remove_opc_ (opc->c, opc);
929  break;
930  case OPC_STATE_INIT:
931  GNUNET_assert (NULL != data);
932  GNUNET_free (data->service_name);
933  break;
934  case OPC_STATE_FINISHED:
935  break;
936  }
937  GNUNET_free_non_null (data);
938  GNUNET_free (opc);
939 }
struct GNUNET_TESTBED_Controller * c
The controller to which this operation context belongs to.
Definition: testbed_api.h:142
The operation has been started.
Definition: testbed_api.h:124
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
enum OperationContextState state
The state of the operation.
Definition: testbed_api.h:172
The initial state where the associated operation has just been created and is waiting in the operatio...
Definition: testbed_api.h:118
The operation has finished.
Definition: testbed_api.h:130
void * data
Data relevant to the operation.
Definition: testbed_api.h:157
uint32_t data
The data value.
Context information for GNUNET_TESTBED_Operation.
Definition: testbed_api.h:137
#define GNUNET_free(ptr)
Wrapper around free.
void GNUNET_TESTBED_remove_opc_(const struct GNUNET_TESTBED_Controller *c, struct OperationContext *opc)
Removes the given operation context from the operation context map of the given controller.
Definition: testbed_api.c:326
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ peer_list_head

struct GNUNET_TESTBED_Peer* peer_list_head
static

Peer list DLL head.

Definition at line 40 of file testbed_api_peers.c.

◆ peer_list_tail

struct GNUNET_TESTBED_Peer* peer_list_tail
static

Peer list DLL tail.

Definition at line 45 of file testbed_api_peers.c.