2 This file is part of GNUnet.
3 Copyright (C) 2010-2013 GNUnet e.V.
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
19 * @file ats-tests/ats-testing-experiment.c
20 * @brief ats benchmark: controlled experiment execution
21 * @author Christian Grothoff
22 * @author Matthias Wachs
24 #ifndef GNUNET_ATS_SOLVER_EVAL_H
25 #define GNUNET_ATS_SOLVER_EVAL_H
28 #include "gnunet_util_lib.h"
29 #include "gnunet_ats_plugin.h"
30 #include "gnunet_ats_service.h"
31 #include "gnunet-service-ats_addresses.h"
32 #include "gnunet-service-ats_normalization.h"
33 #include "test_ats_api_common.h"
37 GNUNET_ATS_TEST_TG_LINEAR,
38 GNUNET_ATS_TEST_TG_CONSTANT,
39 GNUNET_ATS_TEST_TG_RANDOM,
40 GNUNET_ATS_TEST_TG_SINUS
46 SOLVER_OP_ADD_ADDRESS,
47 SOLVER_OP_DEL_ADDRESS,
48 SOLVER_OP_START_SET_PROPERTY,
49 SOLVER_OP_STOP_SET_PROPERTY,
50 SOLVER_OP_START_SET_PREFERENCE,
51 SOLVER_OP_STOP_SET_PREFERENCE,
52 SOLVER_OP_START_REQUEST,
53 SOLVER_OP_STOP_REQUEST,
66 struct GNUNET_ATS_PluginEnvironment env;
71 struct GNUNET_ATS_SolverFunctions *sf;
76 struct GNUNET_CONTAINER_MultiPeerMap *addresses;
79 enum GNUNET_ATS_Solvers
81 GNUNET_ATS_SOLVER_PROPORTIONAL,
82 GNUNET_ATS_SOLVER_MLP,
83 GNUNET_ATS_SOLVER_RIL,
86 struct LoggingFileHandle
88 /* DLL list for logging time steps */
89 struct LoggingFileHandle *next;
90 struct LoggingFileHandle *prev;
93 long long unsigned int pid;
96 long long unsigned int aid;
98 struct GNUNET_DISK_FileHandle *f_hd;
102 struct LoggingTimeStep
104 struct LoggingTimeStep *prev;
105 struct LoggingTimeStep *next;
107 struct LoggingPeer *head;
108 struct LoggingPeer *tail;
110 struct GNUNET_TIME_Absolute timestamp;
111 struct GNUNET_TIME_Relative delta;
116 struct LoggingPeer *prev;
117 struct LoggingPeer *next;
119 long long unsigned int id;
120 struct GNUNET_PeerIdentity peer_id;
121 double pref_abs[GNUNET_ATS_PREFERENCE_END];
122 double pref_norm[GNUNET_ATS_PREFERENCE_END];
125 struct LoggingAddress *addr_head;
126 struct LoggingAddress *addr_tail;
129 struct LoggingAddress
131 struct LoggingAddress *next;
132 struct LoggingAddress *prev;
134 long long unsigned int aid;
137 uint32_t assigned_bw_in;
138 uint32_t assigned_bw_out;
140 double prop_abs[GNUNET_ATS_PropertyCount];
141 double prop_norm[GNUNET_ATS_PropertyCount];
147 struct TestPeer *prev;
148 struct TestPeer *next;
151 long long unsigned int id;
153 struct GNUNET_PeerIdentity peer_id;
155 double pref_abs[GNUNET_ATS_PreferenceCount];
156 double pref_norm[GNUNET_ATS_PreferenceCount];
158 uint32_t assigned_bw_in;
159 uint32_t assigned_bw_out;
161 struct TestAddress *addr_head;
162 struct TestAddress *addr_tail;
168 struct TestAddress *next;
169 struct TestAddress *prev;
171 long long unsigned int aid;
172 struct ATS_Address *ats_addr;
175 double prop_abs[GNUNET_ATS_PropertyCount];
176 double prop_norm[GNUNET_ATS_PropertyCount];
183 typedef void (*GNUNET_ATS_TESTING_EpisodeDoneCallback) (
186 typedef void (*GNUNET_ATS_TESTING_ExperimentDoneCallback) (struct Experiment *e,
187 struct GNUNET_TIME_Relative duration,int success);
190 * An operation in an experiment
192 struct GNUNET_ATS_TEST_Operation
194 struct GNUNET_ATS_TEST_Operation *next;
195 struct GNUNET_ATS_TEST_Operation *prev;
197 long long unsigned int address_id;
198 long long unsigned int peer_id;
199 long long unsigned int client_id;
201 long long unsigned int address_session;
202 unsigned int address_network;
207 long long unsigned int base_rate;
208 long long unsigned int max_rate;
209 struct GNUNET_TIME_Relative period;
210 struct GNUNET_TIME_Relative frequency;
211 struct GNUNET_TIME_Relative feedback_delay;
213 enum OperationType type;
214 enum GeneratorType gen_type;
215 enum GNUNET_ATS_PreferenceKind pref_type;
216 // enum GNUNET_ATS_Property prop_type;
222 struct Episode *next;
223 struct GNUNET_TIME_Relative duration;
225 struct GNUNET_ATS_TEST_Operation *head;
226 struct GNUNET_ATS_TEST_Operation *tail;
231 struct GNUNET_SCHEDULER_Task * logging_task;
232 struct GNUNET_TIME_Relative log_freq;
234 /* DLL list for logging time steps */
235 struct LoggingTimeStep *head;
236 struct LoggingTimeStep *tail;
244 char *log_output_dir;
245 int log_append_time_stamp;
247 struct GNUNET_TIME_Relative log_freq;
248 struct GNUNET_TIME_Relative max_duration;
249 struct GNUNET_TIME_Relative total_duration;
250 struct GNUNET_TIME_Absolute start_time;
251 unsigned int num_episodes;
252 struct Episode *start;
254 struct GNUNET_CONFIGURATION_Handle *cfg;
256 struct GNUNET_SCHEDULER_Task * experiment_timeout_task;
257 struct GNUNET_SCHEDULER_Task * episode_timeout_task;
260 GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb;
261 GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb;
264 struct PreferenceGenerator
266 struct PreferenceGenerator *prev;
267 struct PreferenceGenerator *next;
269 enum GeneratorType type;
271 long long unsigned int peer;
272 unsigned int client_id;
274 enum GNUNET_ATS_PreferenceKind kind;
278 struct GNUNET_TIME_Relative duration_period;
279 struct GNUNET_TIME_Relative frequency;
280 struct GNUNET_TIME_Relative feedback_frequency;
282 struct GNUNET_SCHEDULER_Task * set_task;
283 struct GNUNET_SCHEDULER_Task * feedback_task;
284 struct GNUNET_TIME_Absolute next_ping_transmission;
285 struct GNUNET_TIME_Absolute time_start;
289 uint32_t feedback_bw_out_acc;
290 uint32_t feedback_bw_in_acc;
291 uint32_t feedback_delay_acc;
294 double pref_latency_old;
296 struct GNUNET_TIME_Absolute feedback_last;
298 struct GNUNET_TIME_Absolute feedback_last_bw_update;
299 struct GNUNET_TIME_Absolute feedback_last_delay_update;
300 uint32_t last_assigned_bw_in;
301 uint32_t last_assigned_bw_out;
302 double last_delay_value;
307 struct PropertyGenerator
309 struct PropertyGenerator *prev;
310 struct PropertyGenerator *next;
312 enum GeneratorType type;
314 long long unsigned int peer;
315 long long unsigned int address_id;
317 struct TestPeer *test_peer;
318 struct TestAddress *test_address;
319 uint32_t ats_property;
323 struct GNUNET_TIME_Relative duration_period;
324 struct GNUNET_TIME_Relative frequency;
326 struct GNUNET_SCHEDULER_Task * set_task;
327 struct GNUNET_TIME_Absolute next_ping_transmission;
328 struct GNUNET_TIME_Absolute time_start;
331 #endif /* #ifndef GNUNET_ATS_SOLVER_EVAL_H */
332 /* end of file ats-testing.h */