guix-env: some update.
[oweals/gnunet.git] / src / ats / gnunet-ats-solver-eval.h
index 9ea91cb3b72a3daafa09896bbe319e393b73a1fc..4136605a7cf35875e790f8c8a01fcac98dfa608b 100644 (file)
@@ -1,6 +1,6 @@
 /*
  This file is part of GNUnet.
- (C) 2010-2013 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2010-2013 GNUnet e.V.
 
  GNUnet is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published
@@ -14,8 +14,8 @@
 
  You should have received a copy of the GNU General Public License
  along with GNUnet; see the file COPYING.  If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
  */
 /**
  * @file ats-tests/ats-testing-experiment.c
@@ -23,6 +23,9 @@
  * @author Christian Grothoff
  * @author Matthias Wachs
  */
+#ifndef GNUNET_ATS_SOLVER_EVAL_H
+#define GNUNET_ATS_SOLVER_EVAL_H
+
 #include "platform.h"
 #include "gnunet_util_lib.h"
 #include "gnunet_ats_plugin.h"
@@ -47,525 +50,219 @@ enum OperationType
   SOLVER_OP_START_SET_PROPERTY,
   SOLVER_OP_STOP_SET_PROPERTY,
   SOLVER_OP_START_SET_PREFERENCE,
-  SOLVER_OP_STOP_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);
-
-/**
- * An operation in an experiment
- */
-struct GNUNET_ATS_TEST_Operation
-{
-  struct GNUNET_ATS_TEST_Operation *next;
-  struct GNUNET_ATS_TEST_Operation *prev;
-
-  long long unsigned int address_id;
-  long long unsigned int peer_id;
-  long long unsigned int address_session;
-  long long unsigned int address_network;
-  char*address;
-  char*plugin;
-
-
-  long long unsigned int base_rate;
-  long long unsigned int max_rate;
-  struct GNUNET_TIME_Relative period;
-  struct GNUNET_TIME_Relative frequency;
-
-  enum OperationType type;
-  enum GeneratorType tg_type;
-  enum GNUNET_ATS_PreferenceKind pref_type;
-  enum GNUNET_ATS_Property prop_type;
-};
-
-struct Episode
-{
-  int id;
-  struct Episode *next;
-  struct GNUNET_TIME_Relative duration;
-
-  struct GNUNET_ATS_TEST_Operation *head;
-  struct GNUNET_ATS_TEST_Operation *tail;
+  SOLVER_OP_STOP_SET_PREFERENCE,
+  SOLVER_OP_START_REQUEST,
+  SOLVER_OP_STOP_REQUEST,
 };
 
-
-struct Experiment
+struct SolverHandle
 {
-  char *name;
-  char *cfg_file;
-  unsigned long long int num_masters;
-  unsigned long long int num_slaves;
-  struct GNUNET_TIME_Relative log_freq;
-  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;
-
-  struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  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;
-};
-
-
-/**
- * A single logging time step for a partner
- */
-struct PartnerLoggingTimestep
-{
-  /**
-   * Peer
-   */
-  struct BenchmarkPeer *slave;
-
-  /**
-   * Total number of messages this peer has sent
-   */
-  unsigned int total_messages_sent;
-
-  /**
-   * Total number of bytes this peer has sent
-   */
-  unsigned int total_bytes_sent;
-
   /**
-   * Total number of messages this peer has received
+   * Solver plugin name
    */
-  unsigned int total_messages_received;
+  char *plugin;
 
   /**
-   * Total number of bytes this peer has received
+   * Solver environment
    */
-  unsigned int total_bytes_received;
+  struct GNUNET_ATS_PluginEnvironment env;
 
   /**
-   * Total outbound throughput for master in Bytes / s
+   * Solver handle
    */
-  unsigned int throughput_sent;
+  struct GNUNET_ATS_SolverFunctions *sf;
 
   /**
-   * Total inbound throughput for master in Bytes / s
+   * Address hashmap
    */
-  unsigned int throughput_recv;
-
-  /**
-   * Accumulated RTT for all messages
-   */
-  unsigned int total_app_rtt;
-
-  /**
-   * Current application level delay
-   */
-  unsigned int app_rtt;
-
-  /* Current ATS properties */
-
-  uint32_t ats_distance;
-
-  uint32_t ats_delay;
-
-  uint32_t bandwidth_in;
-
-  uint32_t bandwidth_out;
-
-  uint32_t ats_utilization_up;
+  struct GNUNET_CONTAINER_MultiPeerMap *addresses;
+};
 
-  uint32_t ats_utilization_down;
+enum GNUNET_ATS_Solvers
+{
+  GNUNET_ATS_SOLVER_PROPORTIONAL,
+  GNUNET_ATS_SOLVER_MLP,
+  GNUNET_ATS_SOLVER_RIL,
+};
 
-  uint32_t ats_network_type;
+struct LoggingFileHandle
+{
+  /* DLL list for logging time steps */
+  struct LoggingFileHandle *next;
+  struct LoggingFileHandle *prev;
 
-  uint32_t ats_cost_wan;
+  /* peer id */
+  long long unsigned int pid;
 
-  uint32_t ats_cost_lan;
+  /* address id */
+  long long unsigned int aid;
 
-  uint32_t ats_cost_wlan;
+  struct GNUNET_DISK_FileHandle *f_hd;
 
-  double pref_bandwidth;
-  double pref_delay;
 };
 
-
-/**
- * A single logging time step for a peer
- */
-struct PeerLoggingTimestep
+struct LoggingTimeStep
 {
-  /**
-   * Next in DLL
-   */
-  struct PeerLoggingTimestep *next;
+  struct LoggingTimeStep *prev;
+  struct LoggingTimeStep *next;
 
-  /**
-   * Prev in DLL
-   */
-  struct PeerLoggingTimestep *prev;
+  struct LoggingPeer *head;
+  struct LoggingPeer *tail;
 
-  /**
-   * Logging timestamp
-   */
   struct GNUNET_TIME_Absolute timestamp;
-
-  /**
-   * Total number of messages this peer has sent
-   */
-  unsigned int total_messages_sent;
-
-  /**
-   * Total number of bytes this peer has sent
-   */
-  unsigned int total_bytes_sent;
-
-  /**
-   * Total number of messages this peer has received
-   */
-  unsigned int total_messages_received;
-
-  /**
-   * Total number of bytes this peer has received
-   */
-  unsigned int total_bytes_received;
-
-  /**
-   * Total outbound throughput for master in Bytes / s
-   */
-  unsigned int total_throughput_send;
-
-  /**
-   * Total inbound throughput for master in Bytes / s
-   */
-  unsigned int total_throughput_recv;
-
-  /**
-   * Logs for slaves
-   */
-  struct PartnerLoggingTimestep *slaves_log;
+  struct GNUNET_TIME_Relative delta;
 };
 
-/**
- * Entry for a benchmark peer
- */
 struct LoggingPeer
 {
-  /**
-   * Peer
-   */
-  struct BenchmarkPeer *peer;
+  struct LoggingPeer *prev;
+  struct LoggingPeer *next;
 
-  /**
-   * Start time
-   */
-  struct GNUNET_TIME_Absolute start;
-
-  /**
-   * DLL for logging entries: head
-   */
-  struct PeerLoggingTimestep *head;
+  long long unsigned int id;
+  struct GNUNET_PeerIdentity peer_id;
+  double pref_abs[GNUNET_ATS_PREFERENCE_END];
+  double pref_norm[GNUNET_ATS_PREFERENCE_END];
+  int is_requested;
 
-  /**
-   * DLL for logging entries: tail
-   */
-  struct PeerLoggingTimestep *tail;
+  struct LoggingAddress *addr_head;
+  struct LoggingAddress *addr_tail;
 };
 
-
-struct LoggingHandle
+struct LoggingAddress
 {
-  /**
-   * Logging task
-   */
-  GNUNET_SCHEDULER_TaskIdentifier log_task;
+  struct LoggingAddress *next;
+  struct LoggingAddress *prev;
 
-  /**
-   * Reference to perf_ats' masters
-   */
-  int num_masters;
-  int num_slaves;
-  int running;
-  int verbose;
-  char *name;
-  struct GNUNET_TIME_Relative frequency;
+  long long unsigned int aid;
+  int active;
+  uint32_t network;
+  uint32_t assigned_bw_in;
+  uint32_t assigned_bw_out;
 
-  /**
-   * Log structure of length num_peers
-   */
-  struct LoggingPeer *lp;
+  double prop_abs[GNUNET_ATS_PropertyCount];
+  double prop_norm[GNUNET_ATS_PropertyCount];
 };
 
 
-/**
- * Start logging
- *
- * @param log_frequency the logging frequency
- * @param testname the testname
- * @param masters the master peers used for benchmarking
- * @param num_master the number of master peers
- * @return the logging handle or NULL on error
- */
-struct LoggingHandle *
-GNUNET_ATS_TEST_logging_start(struct GNUNET_TIME_Relative log_frequency,
-    char *testname, struct BenchmarkPeer *masters, int num_masters, int num_slaves,
-    int verbose);
-
-/**
- * Stop logging
- *
- * @param l the logging handle
- */
-void
-GNUNET_ATS_TEST_logging_clean_up (struct LoggingHandle *l);
-
-/**
- * Stop logging
- *
- * @param l the logging handle
- */
-void
-GNUNET_ATS_TEST_logging_stop (struct LoggingHandle *l);
-
-/**
- * Log all data now
- *
- * @param l logging handle to use
- */
-void
-GNUNET_ATS_TEST_logging_now (struct LoggingHandle *l);
-
-
-/**
- * Write logging data to file
- *
- * @param l logging handle to use
- * @param test_name name of the current test
- * @param plots create gnuplots: GNUNET_YES or GNUNET_NO
- */
-void
-GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l,
-    char *test_name, int plots);
-
-
-
-
-
-
-/* LEGACY */
-
-#if 0
-#define TEST_ATS_PREFERENCE_DEFAULT 1.0
+struct TestPeer
+{
+  struct TestPeer *prev;
+  struct TestPeer *next;
 
-/**
- * Message type sent for traffic generation
- */
-#define TEST_MESSAGE_TYPE_PING 12345
 
-/**
- * Message type sent as response during traffic generation
- */
-#define TEST_MESSAGE_TYPE_PONG 12346
+  long long unsigned int id;
+  int is_requested;
+  struct GNUNET_PeerIdentity peer_id;
 
-/**
- * Size of test messages
- */
-#define TEST_MESSAGE_SIZE 100
+  double pref_abs[GNUNET_ATS_PreferenceCount];
+  double pref_norm[GNUNET_ATS_PreferenceCount];
 
-struct BenchmarkPartner;
+  uint32_t assigned_bw_in;
+  uint32_t assigned_bw_out;
 
-struct BenchmarkPeer;
+  struct TestAddress *addr_head;
+  struct TestAddress *addr_tail;
+};
 
-struct GNUNET_ATS_TEST_Topology;
 
-struct TrafficGenerator;
+struct TestAddress
+{
+  struct TestAddress *next;
+  struct TestAddress *prev;
 
+  long long unsigned int aid;
+  struct ATS_Address *ats_addr;
+  uint32_t network;
 
+  double prop_abs[GNUNET_ATS_PropertyCount];
+  double prop_norm[GNUNET_ATS_PropertyCount];
+};
 
+struct Episode;
 
+struct Experiment;
 
-/**
- * Callback to call when topology setup is completed
- *
- * @param cls the closure
- * @param masters array of master peers
- * @param slaves array of master peers
- */
-typedef void (*GNUNET_ATS_TEST_TopologySetupDoneCallback) (void *cls,
-    struct BenchmarkPeer *masters,
-    struct BenchmarkPeer *slaves);
+typedef void (*GNUNET_ATS_TESTING_EpisodeDoneCallback) (
+    struct Episode *e);
 
-/**
- * Callback called when logging is required for the data contained
- *
- * @param cls the closure
- * @param address an address
- * @param address_active is address active
- * @param bandwidth_out bandwidth outbound
- * @param bandwidth_in bandwidth inbound
- * @param ats ats information
- * @param ats_count number of ats inforation
- */
-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);
+typedef void (*GNUNET_ATS_TESTING_ExperimentDoneCallback) (struct Experiment *e,
+    struct GNUNET_TIME_Relative duration,int success);
 
 /**
- * Information we track for a peer in the testbed.
+ * An operation in an experiment
  */
-struct BenchmarkPeer
+struct GNUNET_ATS_TEST_Operation
 {
-  /**
-   * Handle with testbed.
-   */
-  struct GNUNET_TESTBED_Peer *peer;
-
-  /**
-   * Unique identifier
-   */
-  int no;
-
-  /**
-   * Is this peer a measter: GNUNET_YES/GNUNET_NO
-   */
-  int master;
-
-  /**
-   *  Peer ID
-   */
-  struct GNUNET_PeerIdentity id;
-
-  /**
-   * Testbed operation to get peer information
-   */
-  struct GNUNET_TESTBED_Operation *peer_id_op;
-
-  /**
-   * Testbed operation to connect to ATS performance service
-   */
-  struct GNUNET_TESTBED_Operation *ats_perf_op;
-
-  /**
-   * Testbed operation to connect to core
-   */
-  struct GNUNET_TESTBED_Operation *comm_op;
-
-  /**
-   * ATS performance handle
-   */
-  struct GNUNET_ATS_PerformanceHandle *ats_perf_handle;
-
-  /**
-   * Masters only:
-   * Testbed connect operations to connect masters to slaves
-   */
-  struct TestbedConnectOperation *core_connect_ops;
-
-  /**
-   *  Core handle
-   */
-  struct GNUNET_CORE_Handle *ch;
-
-  /**
-   *  Core handle
-   */
-  struct GNUNET_TRANSPORT_Handle *th;
-
-  /**
-   * Masters only:
-   * Peer to set ATS preferences for
-   */
-  struct BenchmarkPeer *pref_partner;
-
-  /**
-   * Masters only
-   * Progress task
-   */
-  GNUNET_SCHEDULER_TaskIdentifier ats_task;
+  struct GNUNET_ATS_TEST_Operation *next;
+  struct GNUNET_ATS_TEST_Operation *prev;
 
-  /**
-   * Masters only
-   * Progress task
-   */
-  double pref_value;
+  long long unsigned int address_id;
+  long long unsigned int peer_id;
+  long long unsigned int client_id;
 
-  /**
-   * Array of partners with num_slaves entries (if master) or
-   * num_master entries (if slave)
-   */
-  struct BenchmarkPartner *partners;
+  long long unsigned int address_session;
+  unsigned int address_network;
+  char*address;
+  char*plugin;
 
-  /**
-   * Number of partners
-   */
-  int num_partners;
 
-  /**
-   * Number of core connections
-   */
-  int core_connections;
+  long long unsigned int base_rate;
+  long long unsigned int max_rate;
+  struct GNUNET_TIME_Relative period;
+  struct GNUNET_TIME_Relative frequency;
+  struct GNUNET_TIME_Relative feedback_delay;
 
-  /**
-   * Masters only:
-   * Number of connections to slave peers
-   */
-  int core_slave_connections;
+  enum OperationType type;
+  enum GeneratorType gen_type;
+  enum GNUNET_ATS_PreferenceKind pref_type;
+  // enum GNUNET_ATS_Property prop_type;
+};
 
-  /**
-   * Total number of messages this peer has sent
-   */
-  unsigned int total_messages_sent;
+struct Episode
+{
+  int id;
+  struct Episode *next;
+  struct GNUNET_TIME_Relative duration;
 
-  /**
-   * Total number of bytes this peer has sent
-   */
-  unsigned int total_bytes_sent;
+  struct GNUNET_ATS_TEST_Operation *head;
+  struct GNUNET_ATS_TEST_Operation *tail;
+};
 
-  /**
-   * Total number of messages this peer has received
-   */
-  unsigned int total_messages_received;
+struct LoggingHandle
+{
+  struct GNUNET_SCHEDULER_Task * logging_task;
+  struct GNUNET_TIME_Relative log_freq;
 
-  /**
-   * Total number of bytes this peer has received
-   */
-  unsigned int total_bytes_received;
+  /* DLL list for logging time steps */
+  struct LoggingTimeStep *head;
+  struct LoggingTimeStep *tail;
 };
 
-struct TrafficGenerator
+struct Experiment
 {
-  struct TrafficGenerator *prev;
-  struct TrafficGenerator *next;
+  char *name;
+  char *log_prefix;
+  char *cfg_file;
+  char *log_output_dir;
+  int log_append_time_stamp;
 
-  enum GeneratorType type;
+  struct GNUNET_TIME_Relative log_freq;
+  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;
 
-  struct BenchmarkPeer *src;
-  struct BenchmarkPartner *dest;
+  struct GNUNET_CONFIGURATION_Handle *cfg;
 
-  long int base_rate;
-  long int max_rate;
-  struct GNUNET_TIME_Relative duration_period;
+  struct GNUNET_SCHEDULER_Task * experiment_timeout_task;
+  struct GNUNET_SCHEDULER_Task * episode_timeout_task;
+  struct Episode *cur;
 
-  GNUNET_SCHEDULER_TaskIdentifier send_task;
-  struct GNUNET_TIME_Absolute next_ping_transmission;
-  struct GNUNET_TIME_Absolute time_start;
+  GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb;
+  GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb;
 };
 
-
 struct PreferenceGenerator
 {
   struct PreferenceGenerator *prev;
@@ -573,8 +270,8 @@ struct PreferenceGenerator
 
   enum GeneratorType type;
 
-  struct BenchmarkPeer *src;
-  struct BenchmarkPartner *dest;
+  long long unsigned int peer;
+  unsigned int client_id;
 
   enum GNUNET_ATS_PreferenceKind kind;
 
@@ -582,351 +279,56 @@ struct PreferenceGenerator
   long int max_value;
   struct GNUNET_TIME_Relative duration_period;
   struct GNUNET_TIME_Relative frequency;
+  struct GNUNET_TIME_Relative feedback_frequency;
 
-  GNUNET_SCHEDULER_TaskIdentifier set_task;
+  struct GNUNET_SCHEDULER_Task * set_task;
+  struct GNUNET_SCHEDULER_Task * feedback_task;
   struct GNUNET_TIME_Absolute next_ping_transmission;
   struct GNUNET_TIME_Absolute time_start;
-};
-
-/**
- * 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;
+  /* Feedback */
+  uint32_t feedback_bw_out_acc;
+  uint32_t feedback_bw_in_acc;
+  uint32_t feedback_delay_acc;
 
-  struct TrafficGenerator *tg;
-  struct PreferenceGenerator *pg;
+  double pref_bw_old;
+  double pref_latency_old;
 
-  /**
-   * Timestamp to calculate communication layer delay
-   */
-  struct GNUNET_TIME_Absolute last_message_sent;
+  struct GNUNET_TIME_Absolute feedback_last;
 
-  /**
-   * Accumulated RTT for all messages
-   */
-  unsigned int total_app_rtt;
+  struct GNUNET_TIME_Absolute feedback_last_bw_update;
+  struct GNUNET_TIME_Absolute feedback_last_delay_update;
+  uint32_t last_assigned_bw_in;
+  uint32_t last_assigned_bw_out;
+  double last_delay_value;
 
-  /**
-   * 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;
-
-  double pref_bandwidth;
-  double pref_delay;
 };
 
-/**
- * Overall state of the performance benchmark
- */
-struct BenchmarkState
-{
-  /**
-   * 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
-   */
-  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;
-};
 
-
-struct GNUNET_ATS_TEST_Topology
+struct PropertyGenerator
 {
-  /**
-   * Shutdown task
-   */
-  GNUNET_SCHEDULER_TaskIdentifier shutdown_task;
-
-  /**
-   * Progress task
-   */
-  GNUNET_SCHEDULER_TaskIdentifier progress_task;
-
-  /**
-   * Test result
-   */
-  int result;
-
-  /**Test core (GNUNET_YES) or transport (GNUNET_NO)
-   */
-  int test_core;
-
-  /**
-   * Solver string
-   */
-  char *solver;
+  struct PropertyGenerator *prev;
+  struct PropertyGenerator *next;
 
-  /**
-   * Preference string
-   */
-  char *testname;
-
-  /**
-   * Preference string
-   */
-  char *pref_str;
-
-  /**
-   * ATS preference value
-   */
-  int pref_val;
-
-  /**
-   * Number master peers
-   */
-  unsigned int num_masters;
-
-  /**
-   * Array of master peers
-   */
-  struct BenchmarkPeer *mps;
-
-  /**
-   * Number slave peers
-   */
-  unsigned int num_slaves;
-
-  /**
-   * Array of slave peers
-   */
-  struct BenchmarkPeer *sps;
-
-  /**
-   * Benchmark duration
-   */
-  struct GNUNET_TIME_Relative perf_duration;
-
-  /**
-   * Logging frequency
-   */
-  struct GNUNET_TIME_Relative log_frequency;
+  enum GeneratorType type;
 
-  /**
-   * Benchmark state
-   */
-  struct BenchmarkState state;
+  long long unsigned int peer;
+  long long unsigned int address_id;
 
-  struct GNUNET_CORE_MessageHandler *handlers;
+  struct TestPeer *test_peer;
+  struct TestAddress *test_address;
+  uint32_t ats_property;
 
-  GNUNET_TRANSPORT_ReceiveCallback transport_recv_cb;
+  long int base_value;
+  long int max_value;
+  struct GNUNET_TIME_Relative duration_period;
+  struct GNUNET_TIME_Relative frequency;
 
-  GNUNET_ATS_TEST_TopologySetupDoneCallback done_cb;
-  GNUNET_ATS_AddressInformationCallback ats_perf_cb;
-  void *done_cb_cls;
+  struct GNUNET_SCHEDULER_Task * set_task;
+  struct GNUNET_TIME_Absolute next_ping_transmission;
+  struct GNUNET_TIME_Absolute time_start;
 };
 
-
-
-/*
- * Experiment related functions
- */
-
-
-/**
- * Execute the specified experiment
- *
- * @param e the Experiment
- * @param ep_done_cb a episode is completed
- * @param e_done_cb the experiment is completed
- */
-void
-GNUNET_ATS_TEST_experimentation_run (struct Experiment *e,
-    GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb,
-    GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb);
-
-/**
- * Load an experiment from a file
- *
- * @param filename the file
- * @return the Experiment or NULL on failure
- */
-struct Experiment *
-GNUNET_ATS_TEST_experimentation_load (char *filename);
-
-
-/**
- * Stop an experiment
- *
- * @param e the experiment
- */
-void
-GNUNET_ATS_TEST_experimentation_stop (struct Experiment *e);
-
-/*
- * Traffic related functions
- */
-
-void
-GNUNET_ATS_TEST_traffic_handle_ping (struct BenchmarkPartner *p);
-
-void
-GNUNET_ATS_TEST_traffic_handle_pong (struct BenchmarkPartner *p);
-
-
-/**
- * Generate between the source master and the partner and send traffic with a
- * maximum rate.
- *
- * @param src traffic source
- * @param dest traffic partner
- * @param type type of traffic to generate
- * @param base_rate traffic base rate to send data with
- * @param max_rate  traffic maximum rate to send data with
- * @param period duration of a period of traffic generation (~ 1/frequency)
- * @param duration how long to generate traffic
- * @return the traffic generator
- */
-struct TrafficGenerator *
-GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src,
-    struct BenchmarkPartner *dest,
-    enum GeneratorType type,
-    long int base_rate,
-    long int max_rate,
-    struct GNUNET_TIME_Relative period,
-    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 ();
-
-struct PreferenceGenerator *
-GNUNET_ATS_TEST_generate_preferences_start (struct BenchmarkPeer *src,
-    struct BenchmarkPartner *dest,
-    enum GeneratorType type,
-    long int base_value,
-    long int value_rate,
-    struct GNUNET_TIME_Relative period,
-    struct GNUNET_TIME_Relative frequency,
-    enum GNUNET_ATS_PreferenceKind kind);
-
-void
-GNUNET_ATS_TEST_generate_preferences_stop (struct PreferenceGenerator *pg);
-
-void
-GNUNET_ATS_TEST_generate_preferences_stop_all ();
-
-/*
- * Logging related functions
- */
-
-
-
-/*
- * Topology related functions
- */
-
-struct BenchmarkPeer *
-GNUNET_ATS_TEST_get_peer (int src);
-
-struct BenchmarkPartner *
-GNUNET_ATS_TEST_get_partner (int src, int dest);
-
-/**
- * Create a topology for ats testing
- *
- * @param name test name
- * @param cfg_file configuration file to use for the peers
- * @param num_slaves number of slaves
- * @param num_masters number of masters
- * @param test_core connect to CORE service (GNUNET_YES) or transport (GNUNET_NO)
- * @param done_cb function to call when topology is setup
- * @param done_cb_cls cls for callback
- * @param recv_cb callback to call when data are received
- * @param perf_cb callback to call when performance info are received
- */
-void
-GNUNET_ATS_TEST_create_topology (char *name, char *cfg_file,
-    unsigned int num_slaves,
-    unsigned int num_masters,
-    int test_core,
-    GNUNET_ATS_TEST_TopologySetupDoneCallback done_cb,
-    void *done_cb_cls,
-    GNUNET_TRANSPORT_ReceiveCallback recv_cb,
-    GNUNET_ATS_TEST_LogRequest ats_perf_cb);
-
-/**
- * Shutdown topology
- */
-void
-GNUNET_ATS_TEST_shutdown_topology (void);
-#endif
+#endif /* #ifndef GNUNET_ATS_SOLVER_EVAL_H */
 /* end of file ats-testing.h */