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 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.
16 * @file ats-tests/ats-testing-experiment.c
17 * @brief ats benchmark: controlled experiment execution
18 * @author Christian Grothoff
19 * @author Matthias Wachs
21 #ifndef GNUNET_ATS_SOLVER_EVAL_H
22 #define GNUNET_ATS_SOLVER_EVAL_H
25 #include "gnunet_util_lib.h"
26 #include "gnunet_ats_plugin.h"
27 #include "gnunet_ats_service.h"
28 #include "gnunet-service-ats_addresses.h"
29 #include "gnunet-service-ats_normalization.h"
30 #include "test_ats_api_common.h"
34 GNUNET_ATS_TEST_TG_LINEAR,
35 GNUNET_ATS_TEST_TG_CONSTANT,
36 GNUNET_ATS_TEST_TG_RANDOM,
37 GNUNET_ATS_TEST_TG_SINUS
43 SOLVER_OP_ADD_ADDRESS,
44 SOLVER_OP_DEL_ADDRESS,
45 SOLVER_OP_START_SET_PROPERTY,
46 SOLVER_OP_STOP_SET_PROPERTY,
47 SOLVER_OP_START_SET_PREFERENCE,
48 SOLVER_OP_STOP_SET_PREFERENCE,
49 SOLVER_OP_START_REQUEST,
50 SOLVER_OP_STOP_REQUEST,
63 struct GNUNET_ATS_PluginEnvironment env;
68 struct GNUNET_ATS_SolverFunctions *sf;
73 struct GNUNET_CONTAINER_MultiPeerMap *addresses;
76 enum GNUNET_ATS_Solvers
78 GNUNET_ATS_SOLVER_PROPORTIONAL,
79 GNUNET_ATS_SOLVER_MLP,
80 GNUNET_ATS_SOLVER_RIL,
83 struct LoggingFileHandle
85 /* DLL list for logging time steps */
86 struct LoggingFileHandle *next;
87 struct LoggingFileHandle *prev;
90 long long unsigned int pid;
93 long long unsigned int aid;
95 struct GNUNET_DISK_FileHandle *f_hd;
99 struct LoggingTimeStep
101 struct LoggingTimeStep *prev;
102 struct LoggingTimeStep *next;
104 struct LoggingPeer *head;
105 struct LoggingPeer *tail;
107 struct GNUNET_TIME_Absolute timestamp;
108 struct GNUNET_TIME_Relative delta;
113 struct LoggingPeer *prev;
114 struct LoggingPeer *next;
116 long long unsigned int id;
117 struct GNUNET_PeerIdentity peer_id;
118 double pref_abs[GNUNET_ATS_PREFERENCE_END];
119 double pref_norm[GNUNET_ATS_PREFERENCE_END];
122 struct LoggingAddress *addr_head;
123 struct LoggingAddress *addr_tail;
126 struct LoggingAddress
128 struct LoggingAddress *next;
129 struct LoggingAddress *prev;
131 long long unsigned int aid;
134 uint32_t assigned_bw_in;
135 uint32_t assigned_bw_out;
137 double prop_abs[GNUNET_ATS_PropertyCount];
138 double prop_norm[GNUNET_ATS_PropertyCount];
144 struct TestPeer *prev;
145 struct TestPeer *next;
148 long long unsigned int id;
150 struct GNUNET_PeerIdentity peer_id;
152 double pref_abs[GNUNET_ATS_PreferenceCount];
153 double pref_norm[GNUNET_ATS_PreferenceCount];
155 uint32_t assigned_bw_in;
156 uint32_t assigned_bw_out;
158 struct TestAddress *addr_head;
159 struct TestAddress *addr_tail;
165 struct TestAddress *next;
166 struct TestAddress *prev;
168 long long unsigned int aid;
169 struct ATS_Address *ats_addr;
172 double prop_abs[GNUNET_ATS_PropertyCount];
173 double prop_norm[GNUNET_ATS_PropertyCount];
180 typedef void (*GNUNET_ATS_TESTING_EpisodeDoneCallback) (
183 typedef void (*GNUNET_ATS_TESTING_ExperimentDoneCallback) (struct Experiment *e,
184 struct GNUNET_TIME_Relative duration,int success);
187 * An operation in an experiment
189 struct GNUNET_ATS_TEST_Operation
191 struct GNUNET_ATS_TEST_Operation *next;
192 struct GNUNET_ATS_TEST_Operation *prev;
194 long long unsigned int address_id;
195 long long unsigned int peer_id;
196 long long unsigned int client_id;
198 long long unsigned int address_session;
199 unsigned int address_network;
204 long long unsigned int base_rate;
205 long long unsigned int max_rate;
206 struct GNUNET_TIME_Relative period;
207 struct GNUNET_TIME_Relative frequency;
208 struct GNUNET_TIME_Relative feedback_delay;
210 enum OperationType type;
211 enum GeneratorType gen_type;
212 enum GNUNET_ATS_PreferenceKind pref_type;
213 // enum GNUNET_ATS_Property prop_type;
219 struct Episode *next;
220 struct GNUNET_TIME_Relative duration;
222 struct GNUNET_ATS_TEST_Operation *head;
223 struct GNUNET_ATS_TEST_Operation *tail;
228 struct GNUNET_SCHEDULER_Task * logging_task;
229 struct GNUNET_TIME_Relative log_freq;
231 /* DLL list for logging time steps */
232 struct LoggingTimeStep *head;
233 struct LoggingTimeStep *tail;
241 char *log_output_dir;
242 int log_append_time_stamp;
244 struct GNUNET_TIME_Relative log_freq;
245 struct GNUNET_TIME_Relative max_duration;
246 struct GNUNET_TIME_Relative total_duration;
247 struct GNUNET_TIME_Absolute start_time;
248 unsigned int num_episodes;
249 struct Episode *start;
251 struct GNUNET_CONFIGURATION_Handle *cfg;
253 struct GNUNET_SCHEDULER_Task * experiment_timeout_task;
254 struct GNUNET_SCHEDULER_Task * episode_timeout_task;
257 GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb;
258 GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb;
261 struct PreferenceGenerator
263 struct PreferenceGenerator *prev;
264 struct PreferenceGenerator *next;
266 enum GeneratorType type;
268 long long unsigned int peer;
269 unsigned int client_id;
271 enum GNUNET_ATS_PreferenceKind kind;
275 struct GNUNET_TIME_Relative duration_period;
276 struct GNUNET_TIME_Relative frequency;
277 struct GNUNET_TIME_Relative feedback_frequency;
279 struct GNUNET_SCHEDULER_Task * set_task;
280 struct GNUNET_SCHEDULER_Task * feedback_task;
281 struct GNUNET_TIME_Absolute next_ping_transmission;
282 struct GNUNET_TIME_Absolute time_start;
286 uint32_t feedback_bw_out_acc;
287 uint32_t feedback_bw_in_acc;
288 uint32_t feedback_delay_acc;
291 double pref_latency_old;
293 struct GNUNET_TIME_Absolute feedback_last;
295 struct GNUNET_TIME_Absolute feedback_last_bw_update;
296 struct GNUNET_TIME_Absolute feedback_last_delay_update;
297 uint32_t last_assigned_bw_in;
298 uint32_t last_assigned_bw_out;
299 double last_delay_value;
304 struct PropertyGenerator
306 struct PropertyGenerator *prev;
307 struct PropertyGenerator *next;
309 enum GeneratorType type;
311 long long unsigned int peer;
312 long long unsigned int address_id;
314 struct TestPeer *test_peer;
315 struct TestAddress *test_address;
316 uint32_t ats_property;
320 struct GNUNET_TIME_Relative duration_period;
321 struct GNUNET_TIME_Relative frequency;
323 struct GNUNET_SCHEDULER_Task * set_task;
324 struct GNUNET_TIME_Absolute next_ping_transmission;
325 struct GNUNET_TIME_Absolute time_start;
328 #endif /* #ifndef GNUNET_ATS_SOLVER_EVAL_H */
329 /* end of file ats-testing.h */