diff options
-rw-r--r-- | src/ats/experiments/example.exp | 2 | ||||
-rw-r--r-- | src/ats/gnunet-ats-solver-eval.c | 272 | ||||
-rw-r--r-- | src/ats/gnunet-ats-solver-eval.h | 35 |
3 files changed, 253 insertions, 56 deletions
diff --git a/src/ats/experiments/example.exp b/src/ats/experiments/example.exp index fcf5fc453..9e69ab8e2 100644 --- a/src/ats/experiments/example.exp +++ b/src/ats/experiments/example.exp | |||
@@ -10,7 +10,7 @@ | |||
10 | 10 | ||
11 | # operations = address_add, address_del, start_set_property, stop_set_property, | 11 | # operations = address_add, address_del, start_set_property, stop_set_property, |
12 | # start_set_preference, stop_preference, start_request, stop_request | 12 | # start_set_preference, stop_preference, start_request, stop_request |
13 | duration = 5 s | 13 | duration = 0 |
14 | op-0-operation = address_add | 14 | op-0-operation = address_add |
15 | op-0-address-id = 0 | 15 | op-0-address-id = 0 |
16 | op-0-peer-id = 0 | 16 | op-0-peer-id = 0 |
diff --git a/src/ats/gnunet-ats-solver-eval.c b/src/ats/gnunet-ats-solver-eval.c index bb490336b..8776960fc 100644 --- a/src/ats/gnunet-ats-solver-eval.c +++ b/src/ats/gnunet-ats-solver-eval.c | |||
@@ -122,6 +122,16 @@ find_peer_by_id (int id) | |||
122 | return NULL; | 122 | return NULL; |
123 | } | 123 | } |
124 | 124 | ||
125 | static struct TestPeer * | ||
126 | find_peer_by_pid (const struct GNUNET_PeerIdentity *pid) | ||
127 | { | ||
128 | struct TestPeer *cur; | ||
129 | for (cur = peer_head; NULL != cur; cur = cur->next) | ||
130 | if (0 == memcmp (&cur->peer_id, pid, sizeof (struct GNUNET_PeerIdentity))) | ||
131 | return cur; | ||
132 | return NULL; | ||
133 | } | ||
134 | |||
125 | static struct TestAddress * | 135 | static struct TestAddress * |
126 | find_address_by_id (struct TestPeer *peer, int aid) | 136 | find_address_by_id (struct TestPeer *peer, int aid) |
127 | { | 137 | { |
@@ -133,6 +143,18 @@ find_address_by_id (struct TestPeer *peer, int aid) | |||
133 | } | 143 | } |
134 | 144 | ||
135 | 145 | ||
146 | static struct TestAddress * | ||
147 | find_address_by_ats_address (struct TestPeer *p, struct ATS_Address *addr) | ||
148 | { | ||
149 | struct TestAddress *cur; | ||
150 | for (cur = p->addr_head; NULL != cur; cur = cur->next) | ||
151 | if ((0 == strcmp(cur->ats_addr->plugin, addr->plugin)) && | ||
152 | (cur->ats_addr->addr_len == addr->addr_len) && | ||
153 | (0 == memcmp (cur->ats_addr->addr, addr->addr, addr->addr_len))) | ||
154 | return cur; | ||
155 | return NULL; | ||
156 | } | ||
157 | |||
136 | 158 | ||
137 | /** | 159 | /** |
138 | * Logging | 160 | * Logging |
@@ -142,15 +164,60 @@ void | |||
142 | GNUNET_ATS_solver_logging_now (struct LoggingHandle *l) | 164 | GNUNET_ATS_solver_logging_now (struct LoggingHandle *l) |
143 | { | 165 | { |
144 | struct LoggingTimeStep *lts; | 166 | struct LoggingTimeStep *lts; |
145 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Logging\n"); | 167 | struct TestPeer *cur; |
168 | struct TestAddress *cur_addr; | ||
169 | struct LoggingPeer *log_p; | ||
170 | struct LoggingAddress *log_a; | ||
171 | int c; | ||
146 | 172 | ||
147 | lts = GNUNET_new (struct LoggingTimeStep); | 173 | lts = GNUNET_new (struct LoggingTimeStep); |
174 | GNUNET_CONTAINER_DLL_insert_tail(l->head, l->tail, lts); | ||
148 | lts->timestamp = GNUNET_TIME_absolute_get(); | 175 | lts->timestamp = GNUNET_TIME_absolute_get(); |
176 | if (NULL == lts->prev) | ||
177 | lts->delta = GNUNET_TIME_UNIT_ZERO; | ||
178 | else | ||
179 | lts->delta = GNUNET_TIME_absolute_get_duration(lts->prev->timestamp); | ||
180 | |||
181 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Logging %llu, delta %llu\n", | ||
182 | lts->timestamp.abs_value_us, lts->delta.rel_value_us); | ||
183 | |||
149 | 184 | ||
150 | /* Store logging data here */ | 185 | /* Store logging data here */ |
186 | for (cur = peer_head; NULL != cur; cur = cur->next) | ||
187 | { | ||
188 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Logging peer id %u\n", cur->peer_id); | ||
151 | 189 | ||
152 | GNUNET_CONTAINER_DLL_insert_tail(l->head, l->tail, lts); | 190 | log_p = GNUNET_new (struct LoggingPeer); |
191 | log_p->id = cur->id; | ||
192 | log_p->peer_id = cur->peer_id; | ||
193 | for (c = 0; c < GNUNET_ATS_PreferenceCount; c++) | ||
194 | { | ||
195 | log_p->pref_norm[c] = cur->pref_norm[c]; | ||
196 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "\t %s = %.2f\n", GNUNET_ATS_print_preference_type(c), log_p->pref_norm[c]); | ||
197 | } | ||
198 | GNUNET_CONTAINER_DLL_insert_tail(lts->head, lts->tail, log_p); | ||
153 | 199 | ||
200 | for (cur_addr = cur->addr_head; NULL != cur_addr; cur_addr = cur_addr->next) | ||
201 | { | ||
202 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Logging peer id %u address %u\n", cur->peer_id, cur_addr->aid); | ||
203 | log_a = GNUNET_new (struct LoggingAddress); | ||
204 | log_a->aid = cur_addr->aid; | ||
205 | log_a->active = cur_addr->ats_addr->active; | ||
206 | log_a->used = cur_addr->ats_addr->used; | ||
207 | log_a->assigned_bw_in = cur_addr->ats_addr->assigned_bw_in; | ||
208 | log_a->assigned_bw_out = cur_addr->ats_addr->assigned_bw_out; | ||
209 | for (c = 0; c < GNUNET_ATS_PropertyCount; c++) | ||
210 | { | ||
211 | log_a->prop_norm[c] = cur_addr->prop_norm[c]; | ||
212 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "\t %s = %.2f\n", GNUNET_ATS_print_property_type(c), log_a->prop_norm[c]); | ||
213 | } | ||
214 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "\t Active = %i\n", log_a->active); | ||
215 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "\t BW in = %llu\n", ntohl(log_a->assigned_bw_in.value__)); | ||
216 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "\t BW out = %llu\n", ntohl(log_a->assigned_bw_out.value__)); | ||
217 | |||
218 | GNUNET_CONTAINER_DLL_insert_tail(log_p->addr_head, log_p->addr_tail, log_a); | ||
219 | } | ||
220 | } | ||
154 | } | 221 | } |
155 | 222 | ||
156 | static void | 223 | static void |
@@ -173,12 +240,8 @@ GNUNET_ATS_solver_logging_start (struct GNUNET_TIME_Relative freq) | |||
173 | 240 | ||
174 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Start logging every %s\n", | 241 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Start logging every %s\n", |
175 | GNUNET_STRINGS_relative_time_to_string(freq, GNUNET_NO)); | 242 | GNUNET_STRINGS_relative_time_to_string(freq, GNUNET_NO)); |
176 | |||
177 | /* Iterate over peers */ | ||
178 | |||
179 | l->log_freq = freq; | 243 | l->log_freq = freq; |
180 | l->logging_task = GNUNET_SCHEDULER_add_now (&logging_task, l); | 244 | l->logging_task = GNUNET_SCHEDULER_add_now (&logging_task, l); |
181 | |||
182 | return l; | 245 | return l; |
183 | } | 246 | } |
184 | 247 | ||
@@ -197,29 +260,78 @@ void | |||
197 | GNUNET_ATS_solver_logging_eval (struct LoggingHandle *l) | 260 | GNUNET_ATS_solver_logging_eval (struct LoggingHandle *l) |
198 | { | 261 | { |
199 | struct LoggingTimeStep *lts; | 262 | struct LoggingTimeStep *lts; |
263 | struct LoggingPeer *log_p; | ||
264 | struct LoggingAddress *log_a; | ||
265 | int c; | ||
200 | 266 | ||
201 | for (lts = l->head; NULL != lts; lts = lts->next) | 267 | for (lts = l->head; NULL != lts; lts = lts->next) |
202 | { | 268 | { |
203 | fprintf (stderr, "Log %llu: \n", (long long unsigned int) lts->timestamp.abs_value_us); | 269 | fprintf (stderr, "Log %llu %llu: \n", |
270 | (long long unsigned int) lts->timestamp.abs_value_us, | ||
271 | (long long unsigned int) lts->delta.rel_value_us); | ||
272 | |||
273 | for (log_p = lts->head; NULL != log_p; log_p = log_p->next) | ||
274 | { | ||
275 | fprintf (stderr,"\tLogging peer id %u\n", log_p->id); | ||
276 | for (c = 0; c < GNUNET_ATS_PreferenceCount; c++) | ||
277 | { | ||
278 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "\t %s = %.2f\n", GNUNET_ATS_print_preference_type(c), log_p->pref_norm[c]); | ||
279 | } | ||
280 | |||
281 | for (log_a = log_p->addr_head; NULL != log_a; log_a = log_a->next) | ||
282 | { | ||
283 | fprintf (stderr, "\tPeer id %u address %u: %u %u %u\n", | ||
284 | log_p->id, log_a->aid, log_a->active, | ||
285 | ntohl(log_a->assigned_bw_in.value__), | ||
286 | ntohl(log_a->assigned_bw_out.value__)); | ||
287 | |||
288 | for (c = 0; c < GNUNET_ATS_PropertyCount; c++) | ||
289 | { | ||
290 | fprintf(stderr, "\t %s = %.2f\n", GNUNET_ATS_print_property_type(c), log_a->prop_norm[c]); | ||
291 | } | ||
292 | } | ||
293 | } | ||
204 | } | 294 | } |
205 | } | 295 | } |
206 | 296 | ||
207 | void | 297 | void |
208 | GNUNET_ATS_solver_logging_free (struct LoggingHandle *l) | 298 | GNUNET_ATS_solver_logging_free (struct LoggingHandle *l) |
209 | { | 299 | { |
210 | struct LoggingTimeStep *cur; | 300 | struct LoggingTimeStep *lts_cur; |
211 | struct LoggingTimeStep *next; | 301 | struct LoggingTimeStep *lts_next; |
302 | struct LoggingPeer *log_p_cur; | ||
303 | struct LoggingPeer *log_p_next; | ||
304 | struct LoggingAddress *log_a_cur; | ||
305 | struct LoggingAddress *log_a_next; | ||
212 | 306 | ||
213 | if (GNUNET_SCHEDULER_NO_TASK != l->logging_task) | 307 | if (GNUNET_SCHEDULER_NO_TASK != l->logging_task) |
214 | GNUNET_SCHEDULER_cancel (l->logging_task); | 308 | GNUNET_SCHEDULER_cancel (l->logging_task); |
215 | l->logging_task = GNUNET_SCHEDULER_NO_TASK; | 309 | l->logging_task = GNUNET_SCHEDULER_NO_TASK; |
216 | 310 | ||
217 | next = l->head; | 311 | lts_next = l->head; |
218 | while (NULL != (cur = next)) | 312 | while (NULL != (lts_cur = lts_next)) |
219 | { | 313 | { |
220 | next = cur->next; | 314 | lts_next = lts_cur->next; |
221 | GNUNET_CONTAINER_DLL_remove (l->head, l->tail, cur); | 315 | GNUNET_CONTAINER_DLL_remove (l->head, l->tail, lts_cur); |
222 | GNUNET_free (cur); | 316 | |
317 | log_p_next = lts_cur->head; | ||
318 | while (NULL != (log_p_cur = log_p_next)) | ||
319 | { | ||
320 | log_p_next = log_p_cur->next; | ||
321 | |||
322 | log_a_next = log_p_cur->addr_head; | ||
323 | while (NULL != (log_a_cur = log_a_next)) | ||
324 | { | ||
325 | log_a_next = log_a_cur->next; | ||
326 | GNUNET_CONTAINER_DLL_remove (log_p_cur->addr_head, log_p_cur->addr_tail, log_a_cur); | ||
327 | GNUNET_free (log_a_cur); | ||
328 | } | ||
329 | |||
330 | GNUNET_CONTAINER_DLL_remove (lts_cur->head, lts_cur->tail, log_p_cur); | ||
331 | GNUNET_free (log_p_cur); | ||
332 | } | ||
333 | |||
334 | GNUNET_free (lts_cur); | ||
223 | } | 335 | } |
224 | 336 | ||
225 | GNUNET_free (l); | 337 | GNUNET_free (l); |
@@ -294,6 +406,8 @@ static void | |||
294 | set_prop_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | 406 | set_prop_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) |
295 | { | 407 | { |
296 | struct PropertyGenerator *pg = cls; | 408 | struct PropertyGenerator *pg = cls; |
409 | struct TestPeer *p; | ||
410 | struct TestAddress *a; | ||
297 | double pref_value; | 411 | double pref_value; |
298 | struct GNUNET_ATS_Information atsi; | 412 | struct GNUNET_ATS_Information atsi; |
299 | 413 | ||
@@ -308,6 +422,18 @@ set_prop_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
308 | pg->peer, pg->address_id); | 422 | pg->peer, pg->address_id); |
309 | return; | 423 | return; |
310 | } | 424 | } |
425 | if (NULL == (p = find_peer_by_id (pg->peer))) | ||
426 | { | ||
427 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
428 | "Setting property generation for unknown peer %u\n", | ||
429 | pg->peer); | ||
430 | } | ||
431 | if (NULL == (a = find_address_by_id (p, pg->address_id))) | ||
432 | { | ||
433 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
434 | "Setting property generation for unknown peer %u\n", | ||
435 | pg->peer); | ||
436 | } | ||
311 | 437 | ||
312 | pref_value = get_property (pg); | 438 | pref_value = get_property (pg); |
313 | 439 | ||
@@ -316,7 +442,6 @@ set_prop_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
316 | pg->peer, pg->address_id, | 442 | pg->peer, pg->address_id, |
317 | GNUNET_ATS_print_property_type (pg->ats_property), pref_value); | 443 | GNUNET_ATS_print_property_type (pg->ats_property), pref_value); |
318 | 444 | ||
319 | |||
320 | atsi.type = htonl (pg->ats_property); | 445 | atsi.type = htonl (pg->ats_property); |
321 | atsi.value = htonl ((uint32_t) pref_value); | 446 | atsi.value = htonl ((uint32_t) pref_value); |
322 | 447 | ||
@@ -326,17 +451,6 @@ set_prop_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
326 | pg->test_address->ats_addr, &atsi, 1); | 451 | pg->test_address->ats_addr, &atsi, 1); |
327 | sh->env.sf.s_bulk_stop (sh->solver); | 452 | sh->env.sf.s_bulk_stop (sh->solver); |
328 | 453 | ||
329 | switch (pg->ats_property) { | ||
330 | case GNUNET_ATS_PREFERENCE_BANDWIDTH: | ||
331 | //p->pref_bandwidth = pref_value; | ||
332 | break; | ||
333 | case GNUNET_ATS_PREFERENCE_LATENCY: | ||
334 | //p->pref_delay = pref_value; | ||
335 | break; | ||
336 | default: | ||
337 | break; | ||
338 | } | ||
339 | |||
340 | pg->set_task = GNUNET_SCHEDULER_add_delayed (pg->frequency, | 454 | pg->set_task = GNUNET_SCHEDULER_add_delayed (pg->frequency, |
341 | &set_prop_task, pg); | 455 | &set_prop_task, pg); |
342 | 456 | ||
@@ -863,7 +977,7 @@ load_op_add_address (struct GNUNET_ATS_TEST_Operation *o, | |||
863 | } | 977 | } |
864 | GNUNET_free (op_name); | 978 | GNUNET_free (op_name); |
865 | 979 | ||
866 | fprintf (stderr, | 980 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
867 | "Found operation %s: [%llu:%llu] address `%s' plugin `%s' \n", | 981 | "Found operation %s: [%llu:%llu] address `%s' plugin `%s' \n", |
868 | "ADD_ADDRESS", o->peer_id, o->address_id, o->address, o->plugin); | 982 | "ADD_ADDRESS", o->peer_id, o->address_id, o->address, o->plugin); |
869 | 983 | ||
@@ -951,7 +1065,7 @@ load_op_del_address (struct GNUNET_ATS_TEST_Operation *o, | |||
951 | } | 1065 | } |
952 | GNUNET_free (op_name); | 1066 | GNUNET_free (op_name); |
953 | 1067 | ||
954 | fprintf (stderr, | 1068 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
955 | "Found operation %s: [%llu:%llu] address `%s' plugin `%s' \n", | 1069 | "Found operation %s: [%llu:%llu] address `%s' plugin `%s' \n", |
956 | "DEL_ADDRESS", o->peer_id, o->address_id, o->address, o->plugin); | 1070 | "DEL_ADDRESS", o->peer_id, o->address_id, o->address, o->plugin); |
957 | 1071 | ||
@@ -1130,7 +1244,7 @@ load_op_start_set_preference (struct GNUNET_ATS_TEST_Operation *o, | |||
1130 | GNUNET_free (pref); | 1244 | GNUNET_free (pref); |
1131 | GNUNET_free (op_name); | 1245 | GNUNET_free (op_name); |
1132 | 1246 | ||
1133 | fprintf (stderr, | 1247 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
1134 | "Found operation %s: [%llu:%llu]: %s = %llu\n", | 1248 | "Found operation %s: [%llu:%llu]: %s = %llu\n", |
1135 | "START_SET_PREFERENCE", o->peer_id, o->address_id, | 1249 | "START_SET_PREFERENCE", o->peer_id, o->address_id, |
1136 | GNUNET_ATS_print_preference_type(o->pref_type), o->base_rate); | 1250 | GNUNET_ATS_print_preference_type(o->pref_type), o->base_rate); |
@@ -1194,7 +1308,7 @@ load_op_stop_set_preference (struct GNUNET_ATS_TEST_Operation *o, | |||
1194 | GNUNET_free (pref); | 1308 | GNUNET_free (pref); |
1195 | GNUNET_free (op_name); | 1309 | GNUNET_free (op_name); |
1196 | 1310 | ||
1197 | fprintf (stderr, | 1311 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
1198 | "Found operation %s: [%llu:%llu]: %s\n", | 1312 | "Found operation %s: [%llu:%llu]: %s\n", |
1199 | "STOP_SET_PREFERENCE", o->peer_id, o->address_id, | 1313 | "STOP_SET_PREFERENCE", o->peer_id, o->address_id, |
1200 | GNUNET_ATS_print_preference_type(o->pref_type)); | 1314 | GNUNET_ATS_print_preference_type(o->pref_type)); |
@@ -1363,7 +1477,7 @@ load_op_start_set_property(struct GNUNET_ATS_TEST_Operation *o, | |||
1363 | GNUNET_free (prop); | 1477 | GNUNET_free (prop); |
1364 | GNUNET_free (op_name); | 1478 | GNUNET_free (op_name); |
1365 | 1479 | ||
1366 | fprintf (stderr, | 1480 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
1367 | "Found operation %s: [%llu:%llu] %s = %llu\n", | 1481 | "Found operation %s: [%llu:%llu] %s = %llu\n", |
1368 | "START_SET_PROPERTY", o->peer_id, o->address_id, | 1482 | "START_SET_PROPERTY", o->peer_id, o->address_id, |
1369 | GNUNET_ATS_print_property_type (o->prop_type), o->base_rate); | 1483 | GNUNET_ATS_print_property_type (o->prop_type), o->base_rate); |
@@ -1429,7 +1543,7 @@ load_op_stop_set_property (struct GNUNET_ATS_TEST_Operation *o, | |||
1429 | GNUNET_free (pref); | 1543 | GNUNET_free (pref); |
1430 | GNUNET_free (op_name); | 1544 | GNUNET_free (op_name); |
1431 | 1545 | ||
1432 | fprintf (stderr, | 1546 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
1433 | "Found operation %s: [%llu:%llu] %s\n", | 1547 | "Found operation %s: [%llu:%llu] %s\n", |
1434 | "STOP_SET_PROPERTY", o->peer_id, o->address_id, | 1548 | "STOP_SET_PROPERTY", o->peer_id, o->address_id, |
1435 | GNUNET_ATS_print_property_type (o->prop_type)); | 1549 | GNUNET_ATS_print_property_type (o->prop_type)); |
@@ -1495,7 +1609,7 @@ load_episode (struct Experiment *e, struct Episode *cur, | |||
1495 | char *op; | 1609 | char *op; |
1496 | int op_counter = 0; | 1610 | int op_counter = 0; |
1497 | int res; | 1611 | int res; |
1498 | fprintf (stderr, "Parsing episode %u\n",cur->id); | 1612 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "=== Parsing episode %u\n",cur->id); |
1499 | GNUNET_asprintf(&sec_name, "episode-%u", cur->id); | 1613 | GNUNET_asprintf(&sec_name, "episode-%u", cur->id); |
1500 | 1614 | ||
1501 | while (1) | 1615 | while (1) |
@@ -1599,7 +1713,6 @@ load_episodes (struct Experiment *e, struct GNUNET_CONFIGURATION_Handle *cfg) | |||
1599 | if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time(cfg, | 1713 | if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time(cfg, |
1600 | sec_name, "duration", &e_duration)) | 1714 | sec_name, "duration", &e_duration)) |
1601 | { | 1715 | { |
1602 | fprintf (stderr, "Missing duration in episode %u \n",e_counter); | ||
1603 | GNUNET_free (sec_name); | 1716 | GNUNET_free (sec_name); |
1604 | break; | 1717 | break; |
1605 | } | 1718 | } |
@@ -1615,7 +1728,7 @@ load_episodes (struct Experiment *e, struct GNUNET_CONFIGURATION_Handle *cfg) | |||
1615 | return GNUNET_SYSERR; | 1728 | return GNUNET_SYSERR; |
1616 | } | 1729 | } |
1617 | 1730 | ||
1618 | fprintf (stderr, "Found episode %u with duration %s \n", | 1731 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Found episode %u with duration %s \n", |
1619 | e_counter, | 1732 | e_counter, |
1620 | GNUNET_STRINGS_relative_time_to_string(cur->duration, GNUNET_YES)); | 1733 | GNUNET_STRINGS_relative_time_to_string(cur->duration, GNUNET_YES)); |
1621 | 1734 | ||
@@ -1712,6 +1825,8 @@ enforce_add_address (struct GNUNET_ATS_TEST_Operation *op) | |||
1712 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Adding address %u for peer %u\n", | 1825 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Adding address %u for peer %u\n", |
1713 | op->address_id, op->peer_id); | 1826 | op->address_id, op->peer_id); |
1714 | 1827 | ||
1828 | |||
1829 | |||
1715 | sh->env.sf.s_add (sh->solver, a->ats_addr, op->address_network); | 1830 | sh->env.sf.s_add (sh->solver, a->ats_addr, op->address_network); |
1716 | 1831 | ||
1717 | } | 1832 | } |
@@ -1721,6 +1836,7 @@ static void | |||
1721 | enforce_del_address (struct GNUNET_ATS_TEST_Operation *op) | 1836 | enforce_del_address (struct GNUNET_ATS_TEST_Operation *op) |
1722 | { | 1837 | { |
1723 | struct TestPeer *p; | 1838 | struct TestPeer *p; |
1839 | struct TestAddress *a; | ||
1724 | struct AddressLookupCtx ctx; | 1840 | struct AddressLookupCtx ctx; |
1725 | 1841 | ||
1726 | if (NULL == (p = find_peer_by_id (op->peer_id))) | 1842 | if (NULL == (p = find_peer_by_id (op->peer_id))) |
@@ -1744,7 +1860,7 @@ enforce_del_address (struct GNUNET_ATS_TEST_Operation *op) | |||
1744 | return; | 1860 | return; |
1745 | } | 1861 | } |
1746 | 1862 | ||
1747 | if (NULL == (find_address_by_id (p, op->address_id))) | 1863 | if (NULL == (a =find_address_by_id (p, op->address_id))) |
1748 | { | 1864 | { |
1749 | GNUNET_break (0); | 1865 | GNUNET_break (0); |
1750 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1866 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
@@ -1752,6 +1868,9 @@ enforce_del_address (struct GNUNET_ATS_TEST_Operation *op) | |||
1752 | return; | 1868 | return; |
1753 | } | 1869 | } |
1754 | 1870 | ||
1871 | GNUNET_CONTAINER_DLL_remove(p->addr_head, p->addr_tail, a); | ||
1872 | GNUNET_free (a); | ||
1873 | |||
1755 | GNUNET_CONTAINER_multipeermap_remove (sh->addresses, &p->peer_id, ctx.res); | 1874 | GNUNET_CONTAINER_multipeermap_remove (sh->addresses, &p->peer_id, ctx.res); |
1756 | 1875 | ||
1757 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Removing address %u for peer %u\n", | 1876 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Removing address %u for peer %u\n", |
@@ -1872,7 +1991,6 @@ enforce_start_request (struct GNUNET_ATS_TEST_Operation *op) | |||
1872 | { | 1991 | { |
1873 | 1992 | ||
1874 | } | 1993 | } |
1875 | |||
1876 | } | 1994 | } |
1877 | 1995 | ||
1878 | static void | 1996 | static void |
@@ -1995,13 +2113,13 @@ GNUNET_ATS_solvers_experimentation_run (struct Experiment *e, | |||
1995 | e->experiment_timeout_task = GNUNET_SCHEDULER_add_delayed (e->max_duration, | 2113 | e->experiment_timeout_task = GNUNET_SCHEDULER_add_delayed (e->max_duration, |
1996 | &timeout_experiment, e); | 2114 | &timeout_experiment, e); |
1997 | 2115 | ||
1998 | |||
1999 | /* Start */ | 2116 | /* Start */ |
2000 | if (NULL == e->start) | 2117 | if (NULL == e->start) |
2001 | { | 2118 | { |
2002 | GNUNET_break (0); | 2119 | GNUNET_break (0); |
2003 | return; | 2120 | return; |
2004 | } | 2121 | } |
2122 | |||
2005 | e->cur = e->start; | 2123 | e->cur = e->start; |
2006 | fprintf (stderr, "Running episode %u with timeout %s\n", | 2124 | fprintf (stderr, "Running episode %u with timeout %s\n", |
2007 | e->cur->id, | 2125 | e->cur->id, |
@@ -2059,7 +2177,7 @@ GNUNET_ATS_solvers_experimentation_load (char *filename) | |||
2059 | return NULL; | 2177 | return NULL; |
2060 | } | 2178 | } |
2061 | else | 2179 | else |
2062 | fprintf (stderr, "Experiment name: `%s'\n", e->name); | 2180 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Experiment name: `%s'\n", e->name); |
2063 | 2181 | ||
2064 | if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_filename (cfg, "experiment", | 2182 | if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_filename (cfg, "experiment", |
2065 | "cfg_file", &e->cfg_file)) | 2183 | "cfg_file", &e->cfg_file)) |
@@ -2070,7 +2188,7 @@ GNUNET_ATS_solvers_experimentation_load (char *filename) | |||
2070 | } | 2188 | } |
2071 | else | 2189 | else |
2072 | { | 2190 | { |
2073 | fprintf (stderr, "Experiment configuration: `%s'\n", e->cfg_file); | 2191 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Experiment configuration: `%s'\n", e->cfg_file); |
2074 | e->cfg = GNUNET_CONFIGURATION_create(); | 2192 | e->cfg = GNUNET_CONFIGURATION_create(); |
2075 | if (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (e->cfg, e->cfg_file)) | 2193 | if (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (e->cfg, e->cfg_file)) |
2076 | { | 2194 | { |
@@ -2089,7 +2207,7 @@ GNUNET_ATS_solvers_experimentation_load (char *filename) | |||
2089 | return NULL; | 2207 | return NULL; |
2090 | } | 2208 | } |
2091 | else | 2209 | else |
2092 | fprintf (stderr, "Experiment logging frequency: `%s'\n", | 2210 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Experiment logging frequency: `%s'\n", |
2093 | GNUNET_STRINGS_relative_time_to_string (e->log_freq, GNUNET_YES)); | 2211 | GNUNET_STRINGS_relative_time_to_string (e->log_freq, GNUNET_YES)); |
2094 | 2212 | ||
2095 | if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time(cfg, "experiment", | 2213 | if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time(cfg, "experiment", |
@@ -2100,7 +2218,7 @@ GNUNET_ATS_solvers_experimentation_load (char *filename) | |||
2100 | return NULL; | 2218 | return NULL; |
2101 | } | 2219 | } |
2102 | else | 2220 | else |
2103 | fprintf (stderr, "Experiment duration: `%s'\n", | 2221 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Experiment duration: `%s'\n", |
2104 | GNUNET_STRINGS_relative_time_to_string (e->max_duration, GNUNET_YES)); | 2222 | GNUNET_STRINGS_relative_time_to_string (e->max_duration, GNUNET_YES)); |
2105 | 2223 | ||
2106 | if (GNUNET_SYSERR == load_episodes (e, cfg)) | 2224 | if (GNUNET_SYSERR == load_episodes (e, cfg)) |
@@ -2111,7 +2229,7 @@ GNUNET_ATS_solvers_experimentation_load (char *filename) | |||
2111 | fprintf (stderr, "Failed to load experiment\n"); | 2229 | fprintf (stderr, "Failed to load experiment\n"); |
2112 | return NULL; | 2230 | return NULL; |
2113 | } | 2231 | } |
2114 | fprintf (stderr, "Loaded %u episodes with total duration %s\n", | 2232 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Loaded %u episodes with total duration %s\n", |
2115 | e->num_episodes, | 2233 | e->num_episodes, |
2116 | GNUNET_STRINGS_relative_time_to_string (e->total_duration, GNUNET_YES)); | 2234 | GNUNET_STRINGS_relative_time_to_string (e->total_duration, GNUNET_YES)); |
2117 | 2235 | ||
@@ -2293,56 +2411,56 @@ solver_info_cb (void *cls, | |||
2293 | switch (op) | 2411 | switch (op) |
2294 | { | 2412 | { |
2295 | case GAS_OP_SOLVE_START: | 2413 | case GAS_OP_SOLVE_START: |
2296 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 2414 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
2297 | "Solver notifies `%s' with result `%s' `%s'\n", "GAS_OP_SOLVE_START", | 2415 | "Solver notifies `%s' with result `%s' `%s'\n", "GAS_OP_SOLVE_START", |
2298 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL", add_info); | 2416 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL", add_info); |
2299 | return; | 2417 | return; |
2300 | case GAS_OP_SOLVE_STOP: | 2418 | case GAS_OP_SOLVE_STOP: |
2301 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 2419 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
2302 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_STOP", | 2420 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_STOP", |
2303 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL", add_info); | 2421 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL", add_info); |
2304 | return; | 2422 | return; |
2305 | 2423 | ||
2306 | case GAS_OP_SOLVE_SETUP_START: | 2424 | case GAS_OP_SOLVE_SETUP_START: |
2307 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 2425 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
2308 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_SETUP_START", | 2426 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_SETUP_START", |
2309 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); | 2427 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); |
2310 | return; | 2428 | return; |
2311 | 2429 | ||
2312 | case GAS_OP_SOLVE_SETUP_STOP: | 2430 | case GAS_OP_SOLVE_SETUP_STOP: |
2313 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 2431 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
2314 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_SETUP_STOP", | 2432 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_SETUP_STOP", |
2315 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); | 2433 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); |
2316 | return; | 2434 | return; |
2317 | 2435 | ||
2318 | case GAS_OP_SOLVE_MLP_LP_START: | 2436 | case GAS_OP_SOLVE_MLP_LP_START: |
2319 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 2437 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
2320 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_LP_START", | 2438 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_LP_START", |
2321 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); | 2439 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); |
2322 | return; | 2440 | return; |
2323 | case GAS_OP_SOLVE_MLP_LP_STOP: | 2441 | case GAS_OP_SOLVE_MLP_LP_STOP: |
2324 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 2442 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
2325 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_LP_STOP", | 2443 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_LP_STOP", |
2326 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); | 2444 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); |
2327 | return; | 2445 | return; |
2328 | 2446 | ||
2329 | case GAS_OP_SOLVE_MLP_MLP_START: | 2447 | case GAS_OP_SOLVE_MLP_MLP_START: |
2330 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 2448 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
2331 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_MLP_START", | 2449 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_MLP_START", |
2332 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); | 2450 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); |
2333 | return; | 2451 | return; |
2334 | case GAS_OP_SOLVE_MLP_MLP_STOP: | 2452 | case GAS_OP_SOLVE_MLP_MLP_STOP: |
2335 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 2453 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
2336 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_MLP_STOP", | 2454 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_MLP_STOP", |
2337 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); | 2455 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); |
2338 | return; | 2456 | return; |
2339 | case GAS_OP_SOLVE_UPDATE_NOTIFICATION_START: | 2457 | case GAS_OP_SOLVE_UPDATE_NOTIFICATION_START: |
2340 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 2458 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
2341 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_UPDATE_NOTIFICATION_START", | 2459 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_UPDATE_NOTIFICATION_START", |
2342 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); | 2460 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); |
2343 | return; | 2461 | return; |
2344 | case GAS_OP_SOLVE_UPDATE_NOTIFICATION_STOP: | 2462 | case GAS_OP_SOLVE_UPDATE_NOTIFICATION_STOP: |
2345 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 2463 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
2346 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_UPDATE_NOTIFICATION_STOP", | 2464 | "Solver notifies `%s' with result `%s'\n", "GAS_OP_SOLVE_UPDATE_NOTIFICATION_STOP", |
2347 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); | 2465 | (GAS_STAT_SUCCESS == stat) ? "SUCCESS" : "FAIL"); |
2348 | return; | 2466 | return; |
@@ -2354,6 +2472,7 @@ solver_info_cb (void *cls, | |||
2354 | static void | 2472 | static void |
2355 | solver_bandwidth_changed_cb (void *cls, struct ATS_Address *address) | 2473 | solver_bandwidth_changed_cb (void *cls, struct ATS_Address *address) |
2356 | { | 2474 | { |
2475 | GNUNET_break (0); | ||
2357 | if ( (0 == ntohl (address->assigned_bw_out.value__)) && | 2476 | if ( (0 == ntohl (address->assigned_bw_out.value__)) && |
2358 | (0 == ntohl (address->assigned_bw_in.value__)) ) | 2477 | (0 == ntohl (address->assigned_bw_in.value__)) ) |
2359 | { | 2478 | { |
@@ -2388,6 +2507,28 @@ get_property_cb (void *cls, const struct ATS_Address *address) | |||
2388 | } | 2507 | } |
2389 | 2508 | ||
2390 | static void | 2509 | static void |
2510 | set_updated_property ( struct ATS_Address *address, uint32_t type, double prop_rel) | ||
2511 | { | ||
2512 | struct TestPeer *p; | ||
2513 | struct TestAddress *a; | ||
2514 | |||
2515 | if (NULL == (p = find_peer_by_pid (&address->peer))) | ||
2516 | { | ||
2517 | GNUNET_break (0); | ||
2518 | return; | ||
2519 | } | ||
2520 | |||
2521 | if (NULL == (a = find_address_by_ats_address (p, address))) | ||
2522 | { | ||
2523 | GNUNET_break (0); | ||
2524 | return; | ||
2525 | } | ||
2526 | a->prop_norm[type] = prop_rel; | ||
2527 | sh->env.sf.s_address_update_property (sh->solver, address, type, 0, prop_rel); | ||
2528 | } | ||
2529 | |||
2530 | |||
2531 | static void | ||
2391 | normalized_property_changed_cb (void *cls, struct ATS_Address *address, | 2532 | normalized_property_changed_cb (void *cls, struct ATS_Address *address, |
2392 | uint32_t type, double prop_rel) | 2533 | uint32_t type, double prop_rel) |
2393 | { | 2534 | { |
@@ -2396,7 +2537,24 @@ normalized_property_changed_cb (void *cls, struct ATS_Address *address, | |||
2396 | GNUNET_ATS_print_property_type (type), GNUNET_i2s (&address->peer), | 2537 | GNUNET_ATS_print_property_type (type), GNUNET_i2s (&address->peer), |
2397 | prop_rel); | 2538 | prop_rel); |
2398 | 2539 | ||
2399 | sh->env.sf.s_address_update_property (sh->solver, address, type, 0, prop_rel); | 2540 | set_updated_property (address, type, prop_rel); |
2541 | } | ||
2542 | |||
2543 | static void | ||
2544 | set_updated_preference (const struct GNUNET_PeerIdentity *peer, | ||
2545 | enum GNUNET_ATS_PreferenceKind kind, | ||
2546 | double pref_rel) | ||
2547 | { | ||
2548 | struct TestPeer *p; | ||
2549 | |||
2550 | if (NULL == (p = find_peer_by_pid (peer))) | ||
2551 | { | ||
2552 | GNUNET_break (0); | ||
2553 | return; | ||
2554 | } | ||
2555 | |||
2556 | p->pref_norm[kind] = pref_rel; | ||
2557 | sh->env.sf.s_pref (sh->solver, peer, kind, pref_rel); | ||
2400 | } | 2558 | } |
2401 | 2559 | ||
2402 | 2560 | ||
@@ -2411,7 +2569,7 @@ normalized_preference_changed_cb (void *cls, | |||
2411 | GNUNET_ATS_print_preference_type (kind), GNUNET_i2s (peer), | 2569 | GNUNET_ATS_print_preference_type (kind), GNUNET_i2s (peer), |
2412 | pref_rel); | 2570 | pref_rel); |
2413 | 2571 | ||
2414 | sh->env.sf.s_pref (sh->solver, peer, kind, pref_rel); | 2572 | set_updated_preference(peer, kind, pref_rel); |
2415 | } | 2573 | } |
2416 | 2574 | ||
2417 | 2575 | ||
@@ -2619,6 +2777,7 @@ run (void *cls, char * const *args, const char *cfgfile, | |||
2619 | } | 2777 | } |
2620 | 2778 | ||
2621 | /* load experiment */ | 2779 | /* load experiment */ |
2780 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "=== Loading experiment\n"); | ||
2622 | e = GNUNET_ATS_solvers_experimentation_load (opt_exp_file); | 2781 | e = GNUNET_ATS_solvers_experimentation_load (opt_exp_file); |
2623 | if (NULL == e) | 2782 | if (NULL == e) |
2624 | { | 2783 | { |
@@ -2629,6 +2788,7 @@ run (void *cls, char * const *args, const char *cfgfile, | |||
2629 | } | 2788 | } |
2630 | 2789 | ||
2631 | /* load solver */ | 2790 | /* load solver */ |
2791 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "=== Loading solver\n"); | ||
2632 | sh = GNUNET_ATS_solvers_solver_start (solver); | 2792 | sh = GNUNET_ATS_solvers_solver_start (solver); |
2633 | if (NULL == sh) | 2793 | if (NULL == sh) |
2634 | { | 2794 | { |
@@ -2639,9 +2799,11 @@ run (void *cls, char * const *args, const char *cfgfile, | |||
2639 | } | 2799 | } |
2640 | 2800 | ||
2641 | /* start logging */ | 2801 | /* start logging */ |
2802 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "=== Start logging \n"); | ||
2642 | l = GNUNET_ATS_solver_logging_start (e->log_freq); | 2803 | l = GNUNET_ATS_solver_logging_start (e->log_freq); |
2643 | 2804 | ||
2644 | /* run experiment */ | 2805 | /* run experiment */ |
2806 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "=== Running experiment \n"); | ||
2645 | GNUNET_ATS_solvers_experimentation_run (e, episode_done_cb, | 2807 | GNUNET_ATS_solvers_experimentation_run (e, episode_done_cb, |
2646 | experiment_done_cb); | 2808 | experiment_done_cb); |
2647 | 2809 | ||
diff --git a/src/ats/gnunet-ats-solver-eval.h b/src/ats/gnunet-ats-solver-eval.h index ab62f5000..9463fcbe9 100644 --- a/src/ats/gnunet-ats-solver-eval.h +++ b/src/ats/gnunet-ats-solver-eval.h | |||
@@ -90,7 +90,39 @@ struct LoggingTimeStep | |||
90 | struct LoggingTimeStep *prev; | 90 | struct LoggingTimeStep *prev; |
91 | struct LoggingTimeStep *next; | 91 | struct LoggingTimeStep *next; |
92 | 92 | ||
93 | struct LoggingPeer *head; | ||
94 | struct LoggingPeer *tail; | ||
95 | |||
93 | struct GNUNET_TIME_Absolute timestamp; | 96 | struct GNUNET_TIME_Absolute timestamp; |
97 | struct GNUNET_TIME_Relative delta; | ||
98 | }; | ||
99 | |||
100 | struct LoggingPeer | ||
101 | { | ||
102 | struct LoggingPeer *prev; | ||
103 | struct LoggingPeer *next; | ||
104 | |||
105 | int id; | ||
106 | struct GNUNET_PeerIdentity peer_id; | ||
107 | double pref_norm[GNUNET_ATS_PreferenceCount]; | ||
108 | |||
109 | struct LoggingAddress *addr_head; | ||
110 | struct LoggingAddress *addr_tail; | ||
111 | }; | ||
112 | |||
113 | |||
114 | struct LoggingAddress | ||
115 | { | ||
116 | struct LoggingAddress *next; | ||
117 | struct LoggingAddress *prev; | ||
118 | |||
119 | int aid; | ||
120 | int active; | ||
121 | int used; | ||
122 | struct GNUNET_BANDWIDTH_Value32NBO assigned_bw_in; | ||
123 | struct GNUNET_BANDWIDTH_Value32NBO assigned_bw_out; | ||
124 | |||
125 | double prop_norm[GNUNET_ATS_PropertyCount]; | ||
94 | }; | 126 | }; |
95 | 127 | ||
96 | 128 | ||
@@ -101,6 +133,7 @@ struct TestPeer | |||
101 | 133 | ||
102 | int id; | 134 | int id; |
103 | struct GNUNET_PeerIdentity peer_id; | 135 | struct GNUNET_PeerIdentity peer_id; |
136 | double pref_norm[GNUNET_ATS_PreferenceCount]; | ||
104 | 137 | ||
105 | struct TestAddress *addr_head; | 138 | struct TestAddress *addr_head; |
106 | struct TestAddress *addr_tail; | 139 | struct TestAddress *addr_tail; |
@@ -114,6 +147,8 @@ struct TestAddress | |||
114 | 147 | ||
115 | int aid; | 148 | int aid; |
116 | struct ATS_Address *ats_addr; | 149 | struct ATS_Address *ats_addr; |
150 | |||
151 | double prop_norm[GNUNET_ATS_PropertyCount]; | ||
117 | }; | 152 | }; |
118 | 153 | ||
119 | struct Episode; | 154 | struct Episode; |