aboutsummaryrefslogtreecommitdiff
path: root/src/ats
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-12-12 15:32:42 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-12-12 15:32:42 +0000
commit51cea9066b6b3ce46913edce9978c8b90e4c9fd9 (patch)
tree58ecbf493bdd0b10f1c48ffe726fbd42438630e7 /src/ats
parenta4571164ebf622ee6fb67a24355b50d5a6e51739 (diff)
downloadgnunet-51cea9066b6b3ce46913edce9978c8b90e4c9fd9.tar.gz
gnunet-51cea9066b6b3ce46913edce9978c8b90e4c9fd9.zip
updating addresses support changing networks
Diffstat (limited to 'src/ats')
-rw-r--r--src/ats/Makefile.am1
-rw-r--r--src/ats/gnunet-service-ats_addresses.c35
-rw-r--r--src/ats/gnunet-service-ats_addresses.h6
-rw-r--r--src/ats/gnunet-service-ats_addresses_mlp.c8
-rw-r--r--src/ats/gnunet-service-ats_addresses_mlp.h8
-rw-r--r--src/ats/gnunet-service-ats_addresses_simplistic.c90
-rw-r--r--src/ats/gnunet-service-ats_addresses_simplistic.h8
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 = \
52gnunet_service_ats_LDADD = \ 52gnunet_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)
57gnunet_service_ats_DEPENDENCIES = \ 58gnunet_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
209typedef void 209typedef 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
215typedef const struct ATS_Address * 219typedef 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 */
1552void 1552void
1553GAS_mlp_address_update (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address) 1553GAS_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 */
357void 357void
358GAS_mlp_address_update (void *solver, 358GAS_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 */
339void 339void
340GAS_simplistic_address_update (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address) 340GAS_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 */
91void 91void
92GAS_simplistic_address_update (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address); 92GAS_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/**