diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-12-12 15:32:42 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-12-12 15:32:42 +0000 |
commit | 51cea9066b6b3ce46913edce9978c8b90e4c9fd9 (patch) | |
tree | 58ecbf493bdd0b10f1c48ffe726fbd42438630e7 /src/ats | |
parent | a4571164ebf622ee6fb67a24355b50d5a6e51739 (diff) | |
download | gnunet-51cea9066b6b3ce46913edce9978c8b90e4c9fd9.tar.gz gnunet-51cea9066b6b3ce46913edce9978c8b90e4c9fd9.zip |
updating addresses support changing networks
Diffstat (limited to 'src/ats')
-rw-r--r-- | src/ats/Makefile.am | 1 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 35 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.h | 6 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses_mlp.c | 8 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses_mlp.h | 8 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses_simplistic.c | 90 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses_simplistic.h | 8 |
7 files changed, 118 insertions, 38 deletions
diff --git a/src/ats/Makefile.am b/src/ats/Makefile.am index 306c6e327..db2a150e2 100644 --- a/src/ats/Makefile.am +++ b/src/ats/Makefile.am | |||
@@ -52,6 +52,7 @@ gnunet_service_ats_SOURCES = \ | |||
52 | gnunet_service_ats_LDADD = \ | 52 | gnunet_service_ats_LDADD = \ |
53 | $(top_builddir)/src/statistics/libgnunetstatistics.la \ | 53 | $(top_builddir)/src/statistics/libgnunetstatistics.la \ |
54 | $(top_builddir)/src/util/libgnunetutil.la \ | 54 | $(top_builddir)/src/util/libgnunetutil.la \ |
55 | libgnunetats.la \ | ||
55 | $(GN_LIBGLPK) \ | 56 | $(GN_LIBGLPK) \ |
56 | $(GN_LIBINTL) | 57 | $(GN_LIBINTL) |
57 | gnunet_service_ats_DEPENDENCIES = \ | 58 | gnunet_service_ats_DEPENDENCIES = \ |
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index e36e9372f..65f9ce89a 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c | |||
@@ -310,6 +310,7 @@ create_address (const struct GNUNET_PeerIdentity *peer, | |||
310 | aa->plugin = GNUNET_strdup (plugin_name); | 310 | aa->plugin = GNUNET_strdup (plugin_name); |
311 | aa->session_id = session_id; | 311 | aa->session_id = session_id; |
312 | aa->active = GNUNET_NO; | 312 | aa->active = GNUNET_NO; |
313 | aa->used = GNUNET_NO; | ||
313 | aa->solver_information = NULL; | 314 | aa->solver_information = NULL; |
314 | aa->assigned_bw_in = GNUNET_BANDWIDTH_value_init(0); | 315 | aa->assigned_bw_in = GNUNET_BANDWIDTH_value_init(0); |
315 | aa->assigned_bw_out = GNUNET_BANDWIDTH_value_init(0); | 316 | aa->assigned_bw_out = GNUNET_BANDWIDTH_value_init(0); |
@@ -520,9 +521,6 @@ GAS_addresses_add (struct GAS_Addresses_Handle *handle, | |||
520 | GNUNET_i2s (peer), session_id, aa); | 521 | GNUNET_i2s (peer), session_id, aa); |
521 | /* Tell solver about new address */ | 522 | /* Tell solver about new address */ |
522 | handle->s_add (handle->solver, handle->addresses, aa); | 523 | handle->s_add (handle->solver, handle->addresses, aa); |
523 | |||
524 | |||
525 | |||
526 | return; | 524 | return; |
527 | } | 525 | } |
528 | GNUNET_free (aa->plugin); | 526 | GNUNET_free (aa->plugin); |
@@ -530,7 +528,8 @@ GAS_addresses_add (struct GAS_Addresses_Handle *handle, | |||
530 | 528 | ||
531 | if (ea->session_id != 0) | 529 | if (ea->session_id != 0) |
532 | { | 530 | { |
533 | /* This addresswith the same session is already existing */ | 531 | /* This address with the same session is already existing |
532 | * Should not happen */ | ||
534 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 533 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
535 | "Added already existing address for peer `%s' `%s' %p with new session %u\n", | 534 | "Added already existing address for peer `%s' `%s' %p with new session %u\n", |
536 | GNUNET_i2s (peer), plugin_name, session_id); | 535 | GNUNET_i2s (peer), plugin_name, session_id); |
@@ -539,18 +538,21 @@ GAS_addresses_add (struct GAS_Addresses_Handle *handle, | |||
539 | } | 538 | } |
540 | 539 | ||
541 | /* We have an address without an session, update this address */ | 540 | /* We have an address without an session, update this address */ |
542 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 541 | |
543 | "Updated existing address for peer `%s' %p with new session %u\n", | 542 | /* Notify solver about update with atsi information and session */ |
544 | GNUNET_i2s (peer), ea, session_id); | 543 | handle->s_update (handle->solver, handle->addresses, ea, session_id, ea->used, atsi, atsi_count); |
544 | |||
545 | /* Do the update */ | ||
545 | ea->session_id = session_id; | 546 | ea->session_id = session_id; |
546 | if (atsi_count != (ats_res = disassemble_ats_information(atsi, atsi_count, ea))) | 547 | if (atsi_count != (ats_res = disassemble_ats_information(atsi, atsi_count, ea))) |
547 | { | 548 | { |
548 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 549 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
549 | "While updating address: had %u ATS elements to add, could only add %u\n", | 550 | "While updating address: had %u ATS elements to add, could only add %u\n", |
550 | atsi_count, ats_res); | 551 | atsi_count, ats_res); |
551 | } | 552 | } |
552 | 553 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | |
553 | handle->s_update (handle->solver, handle->addresses, ea); | 554 | "Updated existing address for peer `%s' %p with new session %u\n", |
555 | GNUNET_i2s (peer), ea, session_id); | ||
554 | } | 556 | } |
555 | 557 | ||
556 | 558 | ||
@@ -586,6 +588,10 @@ GAS_addresses_update (struct GAS_Addresses_Handle *handle, | |||
586 | "ADDRESS UPDATE", | 588 | "ADDRESS UPDATE", |
587 | GNUNET_i2s (peer), aa); | 589 | GNUNET_i2s (peer), aa); |
588 | 590 | ||
591 | /* Tell solver about update */ | ||
592 | handle->s_update (handle->solver, handle->addresses, aa, session_id, aa->used, atsi, atsi_count); | ||
593 | |||
594 | /* Update address */ | ||
589 | if (atsi_count != (ats_res = disassemble_ats_information (atsi, atsi_count, aa))) | 595 | if (atsi_count != (ats_res = disassemble_ats_information (atsi, atsi_count, aa))) |
590 | { | 596 | { |
591 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 597 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
@@ -595,9 +601,6 @@ GAS_addresses_update (struct GAS_Addresses_Handle *handle, | |||
595 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 601 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
596 | "Updated %u ATS elements for address %p\n", | 602 | "Updated %u ATS elements for address %p\n", |
597 | ats_res, aa); | 603 | ats_res, aa); |
598 | |||
599 | /* Tell solver about update */ | ||
600 | handle->s_update (handle->solver, handle->addresses, aa); | ||
601 | } | 604 | } |
602 | 605 | ||
603 | 606 | ||
@@ -779,10 +782,10 @@ GAS_addresses_in_use (struct GAS_Addresses_Handle *handle, | |||
779 | (GNUNET_NO == in_use) ? "NO" : "YES"); | 782 | (GNUNET_NO == in_use) ? "NO" : "YES"); |
780 | return GNUNET_SYSERR; | 783 | return GNUNET_SYSERR; |
781 | } | 784 | } |
782 | ea->used = in_use; | ||
783 | 785 | ||
784 | /* Tell solver about update */ | 786 | /* Tell solver about update */ |
785 | handle->s_update (handle->solver, handle->addresses, ea); | 787 | handle->s_update (handle->solver, handle->addresses, ea, session_id, in_use, NULL, 0); |
788 | ea->used = in_use; | ||
786 | 789 | ||
787 | return GNUNET_OK; | 790 | return GNUNET_OK; |
788 | } | 791 | } |
diff --git a/src/ats/gnunet-service-ats_addresses.h b/src/ats/gnunet-service-ats_addresses.h index b5c665992..a9aac2094 100644 --- a/src/ats/gnunet-service-ats_addresses.h +++ b/src/ats/gnunet-service-ats_addresses.h | |||
@@ -209,7 +209,11 @@ typedef void | |||
209 | typedef void | 209 | typedef void |
210 | (*GAS_solver_address_update) (void *solver, | 210 | (*GAS_solver_address_update) (void *solver, |
211 | struct GNUNET_CONTAINER_MultiHashMap *addresses, | 211 | struct GNUNET_CONTAINER_MultiHashMap *addresses, |
212 | struct ATS_Address *address); | 212 | struct ATS_Address *address, |
213 | uint32_t session, | ||
214 | int in_use, | ||
215 | const struct GNUNET_ATS_Information *atsi, | ||
216 | uint32_t atsi_count); | ||
213 | 217 | ||
214 | 218 | ||
215 | typedef const struct ATS_Address * | 219 | typedef const struct ATS_Address * |
diff --git a/src/ats/gnunet-service-ats_addresses_mlp.c b/src/ats/gnunet-service-ats_addresses_mlp.c index 4dbf02cd7..2ba939982 100644 --- a/src/ats/gnunet-service-ats_addresses_mlp.c +++ b/src/ats/gnunet-service-ats_addresses_mlp.c | |||
@@ -1550,7 +1550,13 @@ GAS_mlp_address_add (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addres | |||
1550 | * @param address the address to update | 1550 | * @param address the address to update |
1551 | */ | 1551 | */ |
1552 | void | 1552 | void |
1553 | GAS_mlp_address_update (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address) | 1553 | GAS_mlp_address_update (void *solver, |
1554 | struct GNUNET_CONTAINER_MultiHashMap *addresses, | ||
1555 | struct ATS_Address *address, | ||
1556 | uint32_t session, | ||
1557 | int in_use, | ||
1558 | const struct GNUNET_ATS_Information *atsi, | ||
1559 | uint32_t atsi_count) | ||
1554 | { | 1560 | { |
1555 | struct GAS_MLP_Handle *mlp = solver; | 1561 | struct GAS_MLP_Handle *mlp = solver; |
1556 | int new; | 1562 | int new; |
diff --git a/src/ats/gnunet-service-ats_addresses_mlp.h b/src/ats/gnunet-service-ats_addresses_mlp.h index 49996ba51..ce0a348a3 100644 --- a/src/ats/gnunet-service-ats_addresses_mlp.h +++ b/src/ats/gnunet-service-ats_addresses_mlp.h | |||
@@ -356,8 +356,12 @@ GAS_mlp_address_add (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addres | |||
356 | */ | 356 | */ |
357 | void | 357 | void |
358 | GAS_mlp_address_update (void *solver, | 358 | GAS_mlp_address_update (void *solver, |
359 | struct GNUNET_CONTAINER_MultiHashMap * addresses, | 359 | struct GNUNET_CONTAINER_MultiHashMap *addresses, |
360 | struct ATS_Address *address); | 360 | struct ATS_Address *address, |
361 | uint32_t session, | ||
362 | int in_use, | ||
363 | const struct GNUNET_ATS_Information *atsi, | ||
364 | uint32_t atsi_count); | ||
361 | 365 | ||
362 | 366 | ||
363 | /** | 367 | /** |
diff --git a/src/ats/gnunet-service-ats_addresses_simplistic.c b/src/ats/gnunet-service-ats_addresses_simplistic.c index 37491dd7f..95f9294f4 100644 --- a/src/ats/gnunet-service-ats_addresses_simplistic.c +++ b/src/ats/gnunet-service-ats_addresses_simplistic.c | |||
@@ -337,27 +337,83 @@ GAS_simplistic_address_add (void *solver, struct GNUNET_CONTAINER_MultiHashMap * | |||
337 | * @param address the update address | 337 | * @param address the update address |
338 | */ | 338 | */ |
339 | void | 339 | void |
340 | GAS_simplistic_address_update (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address) | 340 | GAS_simplistic_address_update (void *solver, |
341 | struct GNUNET_CONTAINER_MultiHashMap *addresses, | ||
342 | struct ATS_Address *address, | ||
343 | uint32_t session, | ||
344 | int in_use, | ||
345 | const struct GNUNET_ATS_Information *atsi, | ||
346 | uint32_t atsi_count) | ||
341 | { | 347 | { |
342 | #if 0 | 348 | int i; |
343 | struct GAS_SIMPLISTIC_Handle *s = solver; | 349 | uint32_t value; |
344 | GNUNET_assert (NULL != s); | 350 | uint32_t type; |
345 | int c; | 351 | for (i = 0; i < atsi_count; i++) |
346 | for (c = 0; c < s->networks; c++) | ||
347 | { | 352 | { |
348 | if (address->atsp_network_type == s->quota_net[c]) | 353 | type = ntohl (atsi[i].type); |
349 | { | 354 | value = ntohl (atsi[i].value); |
350 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 355 | switch (type) |
351 | "Updating address for network type %u (%u total)\n", | 356 | { |
352 | address->atsp_network_type, | 357 | case GNUNET_ATS_UTILIZATION_UP: |
353 | s->active_addresses_per_net[c]); | 358 | //if (address->atsp_utilization_out.value__ != atsi[i].value) |
354 | break; | 359 | |
355 | } | 360 | break; |
361 | case GNUNET_ATS_UTILIZATION_DOWN: | ||
362 | //if (address->atsp_utilization_in.value__ != atsi[i].value) | ||
363 | |||
364 | break; | ||
365 | case GNUNET_ATS_QUALITY_NET_DELAY: | ||
366 | //if (address->atsp_latency.rel_value != value) | ||
367 | |||
368 | break; | ||
369 | case GNUNET_ATS_QUALITY_NET_DISTANCE: | ||
370 | //if (address->atsp_distance != value) | ||
371 | |||
372 | break; | ||
373 | case GNUNET_ATS_COST_WAN: | ||
374 | //if (address->atsp_cost_wan != value) | ||
375 | |||
376 | break; | ||
377 | case GNUNET_ATS_COST_LAN: | ||
378 | //if (address->atsp_cost_lan != value) | ||
379 | |||
380 | break; | ||
381 | case GNUNET_ATS_COST_WLAN: | ||
382 | //if (address->atsp_cost_wlan != value) | ||
383 | |||
384 | break; | ||
385 | case GNUNET_ATS_NETWORK_TYPE: | ||
386 | if (address->atsp_network_type != value) | ||
387 | LOG (GNUNET_ERROR_TYPE_ERROR, "Network changed from `%s' to `%s'\n", | ||
388 | GNUNET_ATS_print_network_type(address->atsp_network_type), | ||
389 | GNUNET_ATS_print_network_type(value)); | ||
390 | break; | ||
391 | case GNUNET_ATS_ARRAY_TERMINATOR: | ||
392 | break; | ||
393 | default: | ||
394 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
395 | "Received unsupported ATS type %u\n", type); | ||
396 | GNUNET_break (0); | ||
397 | break; | ||
398 | |||
399 | } | ||
400 | |||
401 | } | ||
402 | |||
403 | |||
404 | if (address->session_id != session) | ||
405 | { | ||
406 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
407 | "Session changed from %u to %u\n", address->session_id, session); | ||
408 | address->session_id = session; | ||
409 | } | ||
410 | if (address->used != in_use) | ||
411 | { | ||
412 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
413 | "Usage changed from %u to %u\n", address->used, in_use); | ||
414 | address->used = in_use; | ||
356 | } | 415 | } |
357 | 416 | ||
358 | /* Update quota for this network type */ | ||
359 | update_quota_per_network (s, c); | ||
360 | #endif | ||
361 | } | 417 | } |
362 | 418 | ||
363 | 419 | ||
diff --git a/src/ats/gnunet-service-ats_addresses_simplistic.h b/src/ats/gnunet-service-ats_addresses_simplistic.h index 3fd36cf32..029a74037 100644 --- a/src/ats/gnunet-service-ats_addresses_simplistic.h +++ b/src/ats/gnunet-service-ats_addresses_simplistic.h | |||
@@ -89,7 +89,13 @@ GAS_simplistic_address_add (void *solver, struct GNUNET_CONTAINER_MultiHashMap * | |||
89 | * @param address the update address | 89 | * @param address the update address |
90 | */ | 90 | */ |
91 | void | 91 | void |
92 | GAS_simplistic_address_update (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address); | 92 | GAS_simplistic_address_update (void *solver, |
93 | struct GNUNET_CONTAINER_MultiHashMap *addresses, | ||
94 | struct ATS_Address *address, | ||
95 | uint32_t session, | ||
96 | int in_use, | ||
97 | const struct GNUNET_ATS_Information *atsi, | ||
98 | uint32_t atsi_count); | ||
93 | 99 | ||
94 | 100 | ||
95 | /** | 101 | /** |