X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fats-tests%2Fats-testing.h;h=a2937d51d7374070a626815f1b070cfb2d6f78f2;hb=f1ca38573f22205e28ac482efebe463696c9c2c7;hp=540f2bd8c98243a75950c10be241c2812a5f120f;hpb=7c241d90b842906019706995a48ba93eaa7acb9e;p=oweals%2Fgnunet.git diff --git a/src/ats-tests/ats-testing.h b/src/ats-tests/ats-testing.h index 540f2bd8c..a2937d51d 100644 --- a/src/ats-tests/ats-testing.h +++ b/src/ats-tests/ats-testing.h @@ -31,116 +31,26 @@ #define TEST_ATS_PREFERENCE_DEFAULT 1.0 -/** - * Overall state of the performance benchmark - */ -struct BenchmarkState -{ - /** - * Are we connected to ATS service of all peers: GNUNET_YES/NO - */ - int connected_ATS_service; +#define TEST_MESSAGE_TYPE_PING 12345 +#define TEST_MESSAGE_TYPE_PONG 12346 +#define TEST_MESSAGE_SIZE 100 - /** - * Are we connected to CORE service of all peers: GNUNET_YES/NO - */ - int connected_COMM_service; - - /** - * Are we connected to all peers: GNUNET_YES/NO - */ - int connected_PEERS; - - /** - * Are we connected to all slave peers on CORE level: GNUNET_YES/NO - */ - int connected_CORE; - - /** - * Are we connected to CORE service of all peers: GNUNET_YES/NO - */ - int benchmarking; -}; - - -/** - * Information about a benchmarking partner - */ -struct BenchmarkPartner -{ - /** - * The peer itself this partner belongs to - */ - struct BenchmarkPeer *me; - - /** - * The partner peer - */ - struct BenchmarkPeer *dest; - - /** - * Core transmit handles - */ - struct GNUNET_CORE_TransmitHandle *cth; - - /** - * Transport transmit handles - */ - struct GNUNET_TRANSPORT_TransmitHandle *tth; - - /** - * Timestamp to calculate communication layer delay - */ - struct GNUNET_TIME_Absolute last_message_sent; - - /** - * Accumulated RTT for all messages - */ - unsigned int total_app_rtt; +struct BenchmarkPartner; +struct BenchmarkPeer; +struct GNUNET_ATS_TEST_Topology; +struct TrafficGenerator; +struct LoggingHandle; - /** - * Number of messages sent to this partner - */ - unsigned int messages_sent; - - /** - * Number of bytes sent to this partner - */ - unsigned int bytes_sent; - - /** - * Number of messages received from this partner - */ - unsigned int messages_received; - - /** - * Number of bytes received from this partner - */ - unsigned int bytes_received; - - /* Current ATS properties */ - - uint32_t ats_distance; - - uint32_t ats_delay; - - uint32_t bandwidth_in; - - uint32_t bandwidth_out; - - uint32_t ats_utilization_up; - - uint32_t ats_utilization_down; - - uint32_t ats_network_type; - - uint32_t ats_cost_wan; - - uint32_t ats_cost_lan; - - uint32_t ats_cost_wlan; -}; +typedef void (*GNUNET_ATS_TEST_TopologySetupDoneCallback) (void *cls, + struct BenchmarkPeer *masters, + struct BenchmarkPeer *slaves); +typedef void +(*GNUNET_ATS_TEST_LogRequest) (void *cls, + const struct GNUNET_HELLO_Address *address, int address_active, + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, + const struct GNUNET_ATS_Information *ats, uint32_t ats_count); /** * Information we track for a peer in the testbed. @@ -264,30 +174,131 @@ struct BenchmarkPeer unsigned int total_bytes_received; }; +struct TrafficGenerator +{ + struct TrafficGenerator *prev; + struct TrafficGenerator *next; + + struct BenchmarkPeer *src; + struct BenchmarkPartner *dest; + unsigned int rate; + GNUNET_SCHEDULER_TaskIdentifier send_task; + struct GNUNET_TIME_Absolute next_ping_transmission; + struct GNUNET_TIME_Relative delta; +}; + + +/** + * Information about a benchmarking partner + */ +struct BenchmarkPartner +{ + /** + * The peer itself this partner belongs to + */ + struct BenchmarkPeer *me; + + /** + * The partner peer + */ + struct BenchmarkPeer *dest; + + /** + * Core transmit handles + */ + struct GNUNET_CORE_TransmitHandle *cth; + + /** + * Transport transmit handles + */ + struct GNUNET_TRANSPORT_TransmitHandle *tth; + + struct TrafficGenerator *tg; + + /** + * Timestamp to calculate communication layer delay + */ + struct GNUNET_TIME_Absolute last_message_sent; + + /** + * Accumulated RTT for all messages + */ + unsigned int total_app_rtt; + + /** + * Number of messages sent to this partner + */ + unsigned int messages_sent; + + /** + * Number of bytes sent to this partner + */ + unsigned int bytes_sent; + + /** + * Number of messages received from this partner + */ + unsigned int messages_received; + + /** + * Number of bytes received from this partner + */ + unsigned int bytes_received; + + /* Current ATS properties */ + + uint32_t ats_distance; + + uint32_t ats_delay; + + uint32_t bandwidth_in; + + uint32_t bandwidth_out; + + uint32_t ats_utilization_up; + + uint32_t ats_utilization_down; + + uint32_t ats_network_type; + + uint32_t ats_cost_wan; + + uint32_t ats_cost_lan; + + uint32_t ats_cost_wlan; +}; + /** - * Connect peers with testbed + * Overall state of the performance benchmark */ -struct TestbedConnectOperation +struct BenchmarkState { /** - * The benchmarking master initiating this connection + * Are we connected to ATS service of all peers: GNUNET_YES/NO + */ + int connected_ATS_service; + + /** + * Are we connected to CORE service of all peers: GNUNET_YES/NO + */ + int connected_COMM_service; + + /** + * Are we connected to all peers: GNUNET_YES/NO */ - struct BenchmarkPeer *master; + int connected_PEERS; /** - * The benchmarking slave to connect to + * Are we connected to all slave peers on CORE level: GNUNET_YES/NO */ - struct BenchmarkPeer *slave; + int connected_CORE; /** - * Testbed operation to connect peers + * Are we connected to CORE service of all peers: GNUNET_YES/NO */ - struct GNUNET_TESTBED_Operation *connect_op; + int benchmarking; }; -typedef void (*GNUNET_ATS_TESTING_TopologySetupDoneCallback) (void *cls, - struct BenchmarkPeer *masters, - struct BenchmarkPeer *slaves); struct GNUNET_ATS_TEST_Topology { @@ -306,11 +317,6 @@ struct GNUNET_ATS_TEST_Topology */ int result; - /** - * Test result logging - */ - int logging; - /**Test core (GNUNET_YES) or transport (GNUNET_NO) */ int test_core; @@ -374,31 +380,134 @@ struct GNUNET_ATS_TEST_Topology GNUNET_TRANSPORT_ReceiveCallback transport_recv_cb; - GNUNET_ATS_TESTING_TopologySetupDoneCallback done_cb; + GNUNET_ATS_TEST_TopologySetupDoneCallback done_cb; GNUNET_ATS_AddressInformationCallback ats_perf_cb; void *done_cb_cls; }; +enum OperationType +{ + START_SEND, + STOP_SEND, + SET_RATE, + SET_PREFERENCE +}; + +struct Episode; + +struct Experiment; + +typedef void (*GNUNET_ATS_TESTING_EpisodeDoneCallback) ( + struct Episode *e); + +typedef void (*GNUNET_ATS_TESTING_ExperimentDoneCallback) (struct Experiment *e, + struct GNUNET_TIME_Relative duration,int success); + +struct Operation +{ + struct Operation *next; + struct Operation *prev; + long long unsigned int src_id; + long long unsigned int dest_id; + long long unsigned int value; + enum OperationType type; +}; + +struct Episode +{ + int id; + struct Episode *next; + struct GNUNET_TIME_Relative duration; + + struct Operation *head; + struct Operation *tail; +}; + + +struct Experiment +{ + char *name; + char *cfg_file; + unsigned long long int num_masters; + unsigned long long int num_slaves; + struct GNUNET_TIME_Relative max_duration; + struct GNUNET_TIME_Relative total_duration; + struct GNUNET_TIME_Absolute start_time; + unsigned int num_episodes; + struct Episode *start; + + GNUNET_SCHEDULER_TaskIdentifier experiment_timeout_task; + GNUNET_SCHEDULER_TaskIdentifier episode_timeout_task; + struct Episode *cur; + + GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb; + GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb; +}; + +void +GNUNET_ATS_TEST_experimentation_run (struct Experiment *e, + GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb, + GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb); + +struct Experiment * +GNUNET_ATS_TEST_experimentation_load (char *filename); + +void +GNUNET_ATS_TEST_experimentation_stop (struct Experiment *e); + + +struct TrafficGenerator * +GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src, + struct BenchmarkPartner *dest, unsigned int rate, + struct GNUNET_TIME_Relative duration); + +void +GNUNET_ATS_TEST_generate_traffic_stop (struct TrafficGenerator *tg); + +/** + * Stop all traffic generators + */ void +GNUNET_ATS_TEST_generate_traffic_stop_all (); + +/** + * Start logging + */ +struct LoggingHandle * GNUNET_ATS_TEST_logging_start (struct GNUNET_TIME_Relative log_frequency, char * testname, struct BenchmarkPeer *masters, int num_masters); +/** + * Stop logging + */ +void +GNUNET_ATS_TEST_logging_stop (struct LoggingHandle *); + +/** + * Log all data now + */ +void +GNUNET_ATS_TEST_logging_now (struct LoggingHandle *); + +void +GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *, char *test); + void -GNUNET_ATS_TEST_logging_now (void); +GNUNET_ATS_TEST_traffic_handle_ping (struct BenchmarkPartner *p); void -GNUNET_ATS_TEST_logging_stop (void); +GNUNET_ATS_TEST_traffic_handle_pong (struct BenchmarkPartner *p); + void GNUNET_ATS_TEST_create_topology (char *name, char *cfg_file, unsigned int num_slaves, unsigned int num_masters, int test_core, - GNUNET_ATS_TESTING_TopologySetupDoneCallback done_cb, + GNUNET_ATS_TEST_TopologySetupDoneCallback done_cb, void *done_cb_cls, - struct GNUNET_CORE_MessageHandler *handlers, GNUNET_TRANSPORT_ReceiveCallback transport_recv_cb, - GNUNET_ATS_AddressInformationCallback ats_perf_cb); + GNUNET_ATS_TEST_LogRequest ats_perf_cb); void GNUNET_ATS_TEST_shutdown_topology (void);