diff options
Diffstat (limited to 'src/testbed/testbed_api_peers.h')
-rw-r--r-- | src/testbed/testbed_api_peers.h | 245 |
1 files changed, 213 insertions, 32 deletions
diff --git a/src/testbed/testbed_api_peers.h b/src/testbed/testbed_api_peers.h index ea42c98..8598cc1 100644 --- a/src/testbed/testbed_api_peers.h +++ b/src/testbed/testbed_api_peers.h @@ -22,7 +22,9 @@ * @file testbed/testbed_api_peers.h * @brief internal API to access the 'peers' subsystem * @author Christian Grothoff + * @author Sree Harsha Totakura */ + #ifndef NEW_TESTING_API_PEERS_H #define NEW_TESTING_API_PEERS_H @@ -31,41 +33,220 @@ /** - * Create the given peer at the specified host using the given - * controller. If the given controller is not running on the target - * host, it should find or create a controller at the target host and - * delegate creating the peer. Explicit delegation paths can be setup - * using 'GNUNET_TESTBED_controller_link'. If no explicit delegation - * path exists, a direct link with a subordinate controller is setup - * for the first delegated peer to a particular host; the subordinate - * controller is then destroyed once the last peer that was delegated - * to the remote host is stopped. This function is used in particular - * if some other controller has already assigned a unique ID to the - * peer. - * - * Creating the peer only creates the handle to manipulate and further - * configure the peer; use "GNUNET_TESTBED_peer_start" and - * "GNUNET_TESTBED_peer_stop" to actually start/stop the peer's - * processes. - * - * Note that the given configuration will be adjusted by the - * controller to avoid port/path conflicts with other peers. - * The "final" configuration can be obtained using - * 'GNUNET_TESTBED_peer_get_information'. - * - * @param unique_id unique ID for this peer - * @param controller controller process to use - * @param host host to run the peer on - * @param cfg configuration to use for the peer - * @return handle to the peer (actual startup will happen asynchronously) + * Enumeration of possible states a peer could be in + */ +enum PeerState +{ + /** + * State to signify that this peer is invalid + */ + PS_INVALID, + + /** + * The peer has been created + */ + PS_CREATED, + + /** + * The peer is running + */ + PS_STARTED, + + /** + * The peer is stopped + */ + PS_STOPPED, +}; + + +/** + * A peer controlled by the testing framework. A peer runs + * at a particular host. + */ +struct GNUNET_TESTBED_Peer +{ + /** + * Our controller context (not necessarily the controller + * that is responsible for starting/running the peer!). + */ + struct GNUNET_TESTBED_Controller *controller; + + /** + * Which host does this peer run on? + */ + struct GNUNET_TESTBED_Host *host; + + /** + * Globally unique ID of the peer. + */ + uint32_t unique_id; + + /** + * Peer's state + */ + enum PeerState state; +}; + + +/** + * Data for the OperationType OP_PEER_CREATE + */ +struct PeerCreateData +{ + /** + * The host where the peer has to be created + */ + struct GNUNET_TESTBED_Host *host; + + /** + * The template configuration of the peer + */ + const struct GNUNET_CONFIGURATION_Handle *cfg; + + /** + * The call back to call when we receive peer create success message + */ + GNUNET_TESTBED_PeerCreateCallback cb; + + /** + * The closure for the above callback + */ + void *cls; + + /** + * The peer structure to return when we get success message + */ + struct GNUNET_TESTBED_Peer *peer; + +}; + + +/** + * Data for OperationType OP_PEER_START and OP_PEER_STOP + */ +struct PeerEventData +{ + /** + * The handle of the peer to start + */ + struct GNUNET_TESTBED_Peer *peer; + + /** + * The Peer churn callback to call when this operation is completed + */ + GNUNET_TESTBED_PeerChurnCallback pcc; + + /** + * Closure for the above callback + */ + void *pcc_cls; + +}; + + +/** + * Data for the OperationType OP_PEER_DESTROY; */ -struct GNUNET_TESTBED_Peer * -GNUNET_TESTBED_peer_create_with_id_ (uint32_t unique_id, - struct GNUNET_TESTBED_Controller *controller, - struct GNUNET_TESTBED_Host *host, - const struct GNUNET_CONFIGURATION_Handle *cfg); +struct PeerDestroyData +{ + /** + * The peer structure + */ + struct GNUNET_TESTBED_Peer *peer; + + //PEERDESTROYDATA +}; +/** + * Data for the OperationType OP_PEER_INFO + */ +struct PeerInfoData +{ + /** + * The peer whose information has been requested + */ + struct GNUNET_TESTBED_Peer *peer; + + /** + * The Peer info callback to call when this operation has completed + */ + GNUNET_TESTBED_PeerInfoCallback cb; + + /** + * The closure for peer info callback + */ + void *cb_cls; + + /** + * The type of peer information requested + */ + enum GNUNET_TESTBED_PeerInformationType pit; +}; + + +/** + * Data structure for OperationType OP_OVERLAY_CONNECT + */ +struct OverlayConnectData +{ + + /** + * Peer A to connect to peer B + */ + struct GNUNET_TESTBED_Peer *p1; + + /** + * Peer B + */ + struct GNUNET_TESTBED_Peer *p2; + + /** + * The operation completion callback to call once this operation is done + */ + GNUNET_TESTBED_OperationCompletionCallback cb; + + /** + * The closure for the above callback + */ + void *cb_cls; + + /** + * OperationContext for forwarded operations generated when peer1's controller doesn't have the + * configuration of peer2's controller for linking laterally to attemp an + * overlay connection between peer 1 and peer 2. + */ + struct OperationContext *sub_opc; + + /** + * The starting time of this operation + */ + struct GNUNET_TIME_Absolute tstart; + + /** + * Has this operation failed + */ + int failed; + + /** + * The timing slot index for this operation + */ + unsigned int tslot_index; + +}; + + +/** + * Generate PeerGetConfigurationMessage + * + * @param peer_id the id of the peer whose information we have to get + * @param operation_id the ip of the operation that should be represented in + * the message + * @return the PeerGetConfigurationMessage + */ +struct GNUNET_TESTBED_PeerGetConfigurationMessage * +GNUNET_TESTBED_generate_peergetconfig_msg_ (uint32_t peer_id, + uint64_t operation_id); #endif /* end of testbed_api_peers.h */ |