diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-02-20 21:42:26 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-02-20 21:42:26 +0000 |
commit | 2f40f09726422b092245154cbe30a1cf4389b9fa (patch) | |
tree | fc4d7d17f52b812812503ab32f7e6c867ee4d7fd /src/ats | |
parent | 333a74f3b7237f79a7120f65348ad6326500202c (diff) | |
download | gnunet-2f40f09726422b092245154cbe30a1cf4389b9fa.tar.gz gnunet-2f40f09726422b092245154cbe30a1cf4389b9fa.zip |
- latest changes
Diffstat (limited to 'src/ats')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 32 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses_mlp.c | 15 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses_mlp.h | 9 | ||||
-rw-r--r-- | src/ats/test_ats_mlp.c | 11 |
4 files changed, 48 insertions, 19 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index 12eaef113..843394a0f 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c | |||
@@ -600,23 +600,41 @@ GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer) | |||
600 | /* Get address with: stick to current address, lower distance, lower latency */ | 600 | /* Get address with: stick to current address, lower distance, lower latency */ |
601 | GNUNET_CONTAINER_multihashmap_get_multiple (addresses, &peer->hashPubKey, | 601 | GNUNET_CONTAINER_multihashmap_get_multiple (addresses, &peer->hashPubKey, |
602 | &find_address_it, &aa); | 602 | &find_address_it, &aa); |
603 | if (aa == NULL) | ||
604 | { | ||
605 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
606 | "Cannot suggest address for peer `%s'\n", GNUNET_i2s (peer)); | ||
607 | return; | ||
608 | } | ||
609 | } | 603 | } |
610 | if (ats_mode == MLP) | 604 | if (ats_mode == MLP) |
611 | { | 605 | { |
606 | #if HAVE_GLPK | ||
607 | #endif | ||
612 | /* Get preferred address from MLP */ | 608 | /* Get preferred address from MLP */ |
609 | struct ATS_PreferedAddress * paddr = NULL; | ||
610 | paddr = GAS_mlp_get_preferred_address (mlp, addresses, peer); | ||
611 | aa = paddr->address; | ||
612 | aa->assigned_bw_out = GNUNET_BANDWIDTH_value_init(paddr->bandwidth_out); | ||
613 | /* FIXME use bw in value */ | ||
614 | paddr->bandwidth_in = paddr->bandwidth_out; | ||
615 | aa->assigned_bw_in = GNUNET_BANDWIDTH_value_init (paddr->bandwidth_in); | ||
616 | GNUNET_free (paddr); | ||
617 | } | ||
618 | |||
619 | if (aa == NULL) | ||
620 | { | ||
621 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
622 | "Cannot suggest address for peer `%s'\n", GNUNET_i2s (peer)); | ||
623 | return; | ||
613 | } | 624 | } |
614 | 625 | ||
615 | if (aa->active == GNUNET_NO) | 626 | if (aa->active == GNUNET_NO) |
616 | { | 627 | { |
617 | aa->active = GNUNET_YES; | 628 | aa->active = GNUNET_YES; |
618 | active_addr_count++; | 629 | active_addr_count++; |
619 | recalculate_assigned_bw (); | 630 | if (ats_mode == SIMPLE) |
631 | { | ||
632 | recalculate_assigned_bw (); | ||
633 | } | ||
634 | if (ats_mode == SIMPLE) | ||
635 | { | ||
636 | recalculate_assigned_bw (); | ||
637 | } | ||
620 | } | 638 | } |
621 | else | 639 | else |
622 | { | 640 | { |
diff --git a/src/ats/gnunet-service-ats_addresses_mlp.c b/src/ats/gnunet-service-ats_addresses_mlp.c index b84e671f2..1e10370d9 100644 --- a/src/ats/gnunet-service-ats_addresses_mlp.c +++ b/src/ats/gnunet-service-ats_addresses_mlp.c | |||
@@ -1553,12 +1553,17 @@ static int | |||
1553 | mlp_get_preferred_address_it (void *cls, const GNUNET_HashCode * key, void *value) | 1553 | mlp_get_preferred_address_it (void *cls, const GNUNET_HashCode * key, void *value) |
1554 | { | 1554 | { |
1555 | 1555 | ||
1556 | struct ATS_Address **aa = (struct ATS_Address **)cls; | 1556 | struct ATS_PreferedAddress *aa = (struct ATS_PreferedAddress *) cls; |
1557 | struct ATS_Address *addr = value; | 1557 | struct ATS_Address *addr = value; |
1558 | struct MLP_information *mlpi = addr->mlp_information; | 1558 | struct MLP_information *mlpi = addr->mlp_information; |
1559 | if (mlpi->n == GNUNET_YES) | 1559 | if (mlpi->n == GNUNET_YES) |
1560 | { | 1560 | { |
1561 | *aa = addr; | 1561 | aa->address = addr; |
1562 | if (mlpi->b > (double) UINT32_MAX) | ||
1563 | aa->bandwidth_out = UINT32_MAX; | ||
1564 | else | ||
1565 | aa->bandwidth_out = (uint32_t) mlpi->b; | ||
1566 | aa->bandwidth_in = 0; | ||
1562 | return GNUNET_NO; | 1567 | return GNUNET_NO; |
1563 | } | 1568 | } |
1564 | return GNUNET_YES; | 1569 | return GNUNET_YES; |
@@ -1572,14 +1577,14 @@ mlp_get_preferred_address_it (void *cls, const GNUNET_HashCode * key, void *valu | |||
1572 | * @param peer the peer | 1577 | * @param peer the peer |
1573 | * @return suggested address | 1578 | * @return suggested address |
1574 | */ | 1579 | */ |
1575 | struct ATS_Address * | 1580 | struct ATS_PreferedAddress * |
1576 | GAS_mlp_get_preferred_address (struct GAS_MLP_Handle *mlp, | 1581 | GAS_mlp_get_preferred_address (struct GAS_MLP_Handle *mlp, |
1577 | struct GNUNET_CONTAINER_MultiHashMap * addresses, | 1582 | struct GNUNET_CONTAINER_MultiHashMap * addresses, |
1578 | const struct GNUNET_PeerIdentity *peer) | 1583 | const struct GNUNET_PeerIdentity *peer) |
1579 | { | 1584 | { |
1580 | struct ATS_Address * aa = NULL; | 1585 | struct ATS_PreferedAddress * aa = GNUNET_malloc (sizeof (struct ATS_PreferedAddress)); |
1581 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Getting preferred address for `%s'\n", GNUNET_i2s (peer)); | 1586 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Getting preferred address for `%s'\n", GNUNET_i2s (peer)); |
1582 | GNUNET_CONTAINER_multihashmap_get_multiple(addresses, &peer->hashPubKey, mlp_get_preferred_address_it, &aa); | 1587 | GNUNET_CONTAINER_multihashmap_get_multiple(addresses, &peer->hashPubKey, mlp_get_preferred_address_it, aa); |
1583 | return aa; | 1588 | return aa; |
1584 | } | 1589 | } |
1585 | 1590 | ||
diff --git a/src/ats/gnunet-service-ats_addresses_mlp.h b/src/ats/gnunet-service-ats_addresses_mlp.h index 9e7ca0533..1efcbf0e5 100644 --- a/src/ats/gnunet-service-ats_addresses_mlp.h +++ b/src/ats/gnunet-service-ats_addresses_mlp.h | |||
@@ -61,6 +61,13 @@ struct ATS_Peer | |||
61 | struct ATS_Address *tail; | 61 | struct ATS_Address *tail; |
62 | }; | 62 | }; |
63 | 63 | ||
64 | struct ATS_PreferedAddress | ||
65 | { | ||
66 | uint32_t bandwidth_out; | ||
67 | uint32_t bandwidth_in; | ||
68 | struct ATS_Address *address; | ||
69 | }; | ||
70 | |||
64 | /** | 71 | /** |
65 | * MLP Handle | 72 | * MLP Handle |
66 | */ | 73 | */ |
@@ -366,7 +373,7 @@ GAS_mlp_address_change_preference (struct GAS_MLP_Handle *mlp, | |||
366 | * @param peer the peer | 373 | * @param peer the peer |
367 | * @return suggested address | 374 | * @return suggested address |
368 | */ | 375 | */ |
369 | struct ATS_Address * | 376 | struct ATS_PreferedAddress * |
370 | GAS_mlp_get_preferred_address (struct GAS_MLP_Handle *mlp, | 377 | GAS_mlp_get_preferred_address (struct GAS_MLP_Handle *mlp, |
371 | struct GNUNET_CONTAINER_MultiHashMap * addresses, | 378 | struct GNUNET_CONTAINER_MultiHashMap * addresses, |
372 | const struct GNUNET_PeerIdentity *peer); | 379 | const struct GNUNET_PeerIdentity *peer); |
diff --git a/src/ats/test_ats_mlp.c b/src/ats/test_ats_mlp.c index 8af368c8e..ab8327dd9 100644 --- a/src/ats/test_ats_mlp.c +++ b/src/ats/test_ats_mlp.c | |||
@@ -74,7 +74,7 @@ check (void *cls, char *const *args, const char *cfgfile, | |||
74 | return; | 74 | return; |
75 | #endif | 75 | #endif |
76 | struct ATS_Address addr[10]; | 76 | struct ATS_Address addr[10]; |
77 | struct ATS_Address *res[10]; | 77 | struct ATS_PreferedAddress *res[10]; |
78 | 78 | ||
79 | stats = GNUNET_STATISTICS_create("ats", cfg); | 79 | stats = GNUNET_STATISTICS_create("ats", cfg); |
80 | 80 | ||
@@ -97,8 +97,7 @@ check (void *cls, char *const *args, const char *cfgfile, | |||
97 | set_ats (&a1_ats[1], GNUNET_ATS_QUALITY_NET_DELAY, 2); | 97 | set_ats (&a1_ats[1], GNUNET_ATS_QUALITY_NET_DELAY, 2); |
98 | set_ats (&a1_ats[2], GNUNET_ATS_ARRAY_TERMINATOR, 0); | 98 | set_ats (&a1_ats[2], GNUNET_ATS_ARRAY_TERMINATOR, 0); |
99 | create_address (&addr[0], "dummy", 3, &a1_ats[0]); | 99 | create_address (&addr[0], "dummy", 3, &a1_ats[0]); |
100 | addr[0].atsp_network_type = GNUNET_ATS_NET_LOOPBACK; | 100 | addr[0].atsp_network_type = GNUNET_ATS_NET_WAN; |
101 | |||
102 | 101 | ||
103 | /* Creating peer 1 address 2 */ | 102 | /* Creating peer 1 address 2 */ |
104 | addr[1].peer.hashPubKey = p[0].hashPubKey; | 103 | addr[1].peer.hashPubKey = p[0].hashPubKey; |
@@ -116,7 +115,7 @@ check (void *cls, char *const *args, const char *cfgfile, | |||
116 | set_ats (&a3_ats[1], GNUNET_ATS_QUALITY_NET_DISTANCE, 1); | 115 | set_ats (&a3_ats[1], GNUNET_ATS_QUALITY_NET_DISTANCE, 1); |
117 | set_ats (&a3_ats[2], GNUNET_ATS_ARRAY_TERMINATOR, 0); | 116 | set_ats (&a3_ats[2], GNUNET_ATS_ARRAY_TERMINATOR, 0); |
118 | create_address (&addr[2], "dummy3", 3, &a3_ats[0]); | 117 | create_address (&addr[2], "dummy3", 3, &a3_ats[0]); |
119 | addr[2].atsp_network_type = GNUNET_ATS_NET_WAN; | 118 | addr[2].atsp_network_type = GNUNET_ATS_NET_LAN; |
120 | 119 | ||
121 | GNUNET_CONTAINER_multihashmap_put(addresses, &addr[0].peer.hashPubKey, &addr[0], GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 120 | GNUNET_CONTAINER_multihashmap_put(addresses, &addr[0].peer.hashPubKey, &addr[0], GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
122 | 121 | ||
@@ -144,9 +143,9 @@ check (void *cls, char *const *args, const char *cfgfile, | |||
144 | GNUNET_assert (GNUNET_OK == GAS_mlp_solve_problem(mlp)); | 143 | GNUNET_assert (GNUNET_OK == GAS_mlp_solve_problem(mlp)); |
145 | 144 | ||
146 | res[0] = GAS_mlp_get_preferred_address(mlp, addresses, &p[0]); | 145 | res[0] = GAS_mlp_get_preferred_address(mlp, addresses, &p[0]); |
147 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Preferred address `%s' \n",res[0]->plugin); | 146 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Preferred address `%s' outbound bandwidth: %u Bps\n",res[0]->address->plugin, res[0]->bandwidth_out); |
148 | res[1] = GAS_mlp_get_preferred_address(mlp, addresses, &p[1]); | 147 | res[1] = GAS_mlp_get_preferred_address(mlp, addresses, &p[1]); |
149 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Preferred address `%s' \n",res[1]->plugin); | 148 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Preferred address `%s' outbound bandwidth: %u Bps\n",res[1]->address->plugin, res[1]->bandwidth_out); |
150 | 149 | ||
151 | /* Delete an address */ | 150 | /* Delete an address */ |
152 | GNUNET_CONTAINER_multihashmap_remove (addresses, &addr[0].peer.hashPubKey, &addr[0]); | 151 | GNUNET_CONTAINER_multihashmap_remove (addresses, &addr[0].peer.hashPubKey, &addr[0]); |