aboutsummaryrefslogtreecommitdiff
path: root/src/ats
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-02-20 21:42:26 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-02-20 21:42:26 +0000
commit2f40f09726422b092245154cbe30a1cf4389b9fa (patch)
treefc4d7d17f52b812812503ab32f7e6c867ee4d7fd /src/ats
parent333a74f3b7237f79a7120f65348ad6326500202c (diff)
downloadgnunet-2f40f09726422b092245154cbe30a1cf4389b9fa.tar.gz
gnunet-2f40f09726422b092245154cbe30a1cf4389b9fa.zip
- latest changes
Diffstat (limited to 'src/ats')
-rw-r--r--src/ats/gnunet-service-ats_addresses.c32
-rw-r--r--src/ats/gnunet-service-ats_addresses_mlp.c15
-rw-r--r--src/ats/gnunet-service-ats_addresses_mlp.h9
-rw-r--r--src/ats/test_ats_mlp.c11
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
1553mlp_get_preferred_address_it (void *cls, const GNUNET_HashCode * key, void *value) 1553mlp_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 */
1575struct ATS_Address * 1580struct ATS_PreferedAddress *
1576GAS_mlp_get_preferred_address (struct GAS_MLP_Handle *mlp, 1581GAS_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
64struct 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 */
369struct ATS_Address * 376struct ATS_PreferedAddress *
370GAS_mlp_get_preferred_address (struct GAS_MLP_Handle *mlp, 377GAS_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]);