Merge branch 'master' of ssh://gnunet.org/gnunet
[oweals/gnunet.git] / src / ats / gnunet-ats-solver-eval.h
index 05c3c89ff84b2311b50924889ee52147db5230ed..92693bd38ed583601af6b9ff409c3a7cd5aed006 100644 (file)
@@ -1,21 +1,19 @@
 /*
  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
- by the Free Software Foundation; either version 3, or (at your
- option) any later version.
+ GNUnet is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
+ by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
 
  GNUnet is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- General Public License for more details.
Affero General Public License for more details.
 
- 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.
+ You should have received a copy of the GNU Affero General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 /**
  * @file ats-tests/ats-testing-experiment.c
@@ -70,7 +68,7 @@ struct SolverHandle
   /**
    * Solver handle
    */
-  void *solver;
+  struct GNUNET_ATS_SolverFunctions *sf;
 
   /**
    * Address hashmap
@@ -120,8 +118,9 @@ struct LoggingPeer
 
   long long unsigned int id;
   struct GNUNET_PeerIdentity peer_id;
-  double pref_abs[GNUNET_ATS_PreferenceCount];
-  double pref_norm[GNUNET_ATS_PreferenceCount];
+  double pref_abs[GNUNET_ATS_PREFERENCE_END];
+  double pref_norm[GNUNET_ATS_PREFERENCE_END];
+  int is_requested;
 
   struct LoggingAddress *addr_head;
   struct LoggingAddress *addr_tail;
@@ -134,10 +133,9 @@ struct LoggingAddress
 
   long long unsigned int aid;
   int active;
-  int used;
   uint32_t network;
-  struct GNUNET_BANDWIDTH_Value32NBO assigned_bw_in;
-  struct GNUNET_BANDWIDTH_Value32NBO assigned_bw_out;
+  uint32_t assigned_bw_in;
+  uint32_t assigned_bw_out;
 
   double prop_abs[GNUNET_ATS_PropertyCount];
   double prop_norm[GNUNET_ATS_PropertyCount];
@@ -149,12 +147,17 @@ struct TestPeer
   struct TestPeer *prev;
   struct TestPeer *next;
 
+
   long long unsigned int id;
+  int is_requested;
   struct GNUNET_PeerIdentity peer_id;
 
   double pref_abs[GNUNET_ATS_PreferenceCount];
   double pref_norm[GNUNET_ATS_PreferenceCount];
 
+  uint32_t assigned_bw_in;
+  uint32_t assigned_bw_out;
+
   struct TestAddress *addr_head;
   struct TestAddress *addr_tail;
 };
@@ -205,11 +208,12 @@ struct GNUNET_ATS_TEST_Operation
   long long unsigned int max_rate;
   struct GNUNET_TIME_Relative period;
   struct GNUNET_TIME_Relative frequency;
+  struct GNUNET_TIME_Relative feedback_delay;
 
   enum OperationType type;
   enum GeneratorType gen_type;
   enum GNUNET_ATS_PreferenceKind pref_type;
-  enum GNUNET_ATS_Property prop_type;
+  // enum GNUNET_ATS_Property prop_type;
 };
 
 struct Episode
@@ -224,7 +228,7 @@ struct Episode
 
 struct LoggingHandle
 {
-  GNUNET_SCHEDULER_TaskIdentifier logging_task;
+  struct GNUNET_SCHEDULER_Task * logging_task;
   struct GNUNET_TIME_Relative log_freq;
 
   /* DLL list for logging time steps */
@@ -249,8 +253,8 @@ struct Experiment
 
   struct GNUNET_CONFIGURATION_Handle *cfg;
 
-  GNUNET_SCHEDULER_TaskIdentifier experiment_timeout_task;
-  GNUNET_SCHEDULER_TaskIdentifier episode_timeout_task;
+  struct GNUNET_SCHEDULER_Task * experiment_timeout_task;
+  struct GNUNET_SCHEDULER_Task * episode_timeout_task;
   struct Episode *cur;
 
   GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb;
@@ -273,10 +277,30 @@ 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;
+
+
+  /* Feedback */
+  uint32_t feedback_bw_out_acc;
+  uint32_t feedback_bw_in_acc;
+  uint32_t feedback_delay_acc;
+
+  double pref_bw_old;
+  double pref_latency_old;
+
+  struct GNUNET_TIME_Absolute feedback_last;
+
+  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;
+
 };
 
 
@@ -299,7 +323,7 @@ struct PropertyGenerator
   struct GNUNET_TIME_Relative duration_period;
   struct GNUNET_TIME_Relative frequency;
 
-  GNUNET_SCHEDULER_TaskIdentifier set_task;
+  struct GNUNET_SCHEDULER_Task * set_task;
   struct GNUNET_TIME_Absolute next_ping_transmission;
   struct GNUNET_TIME_Absolute time_start;
 };