/* Get address with: stick to current address, lower distance, lower latency */
GNUNET_CONTAINER_multihashmap_get_multiple (addresses, &peer->hashPubKey,
&find_address_it, &aa);
- if (aa == NULL)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Cannot suggest address for peer `%s'\n", GNUNET_i2s (peer));
- return;
- }
}
if (ats_mode == MLP)
{
+#if HAVE_GLPK
+#endif
/* Get preferred address from MLP */
+ struct ATS_PreferedAddress * paddr = NULL;
+ paddr = GAS_mlp_get_preferred_address (mlp, addresses, peer);
+ aa = paddr->address;
+ aa->assigned_bw_out = GNUNET_BANDWIDTH_value_init(paddr->bandwidth_out);
+ /* FIXME use bw in value */
+ paddr->bandwidth_in = paddr->bandwidth_out;
+ aa->assigned_bw_in = GNUNET_BANDWIDTH_value_init (paddr->bandwidth_in);
+ GNUNET_free (paddr);
+ }
+
+ if (aa == NULL)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Cannot suggest address for peer `%s'\n", GNUNET_i2s (peer));
+ return;
}
if (aa->active == GNUNET_NO)
{
aa->active = GNUNET_YES;
active_addr_count++;
- recalculate_assigned_bw ();
+ if (ats_mode == SIMPLE)
+ {
+ recalculate_assigned_bw ();
+ }
+ if (ats_mode == SIMPLE)
+ {
+ recalculate_assigned_bw ();
+ }
}
else
{
mlp_get_preferred_address_it (void *cls, const GNUNET_HashCode * key, void *value)
{
- struct ATS_Address **aa = (struct ATS_Address **)cls;
+ struct ATS_PreferedAddress *aa = (struct ATS_PreferedAddress *) cls;
struct ATS_Address *addr = value;
struct MLP_information *mlpi = addr->mlp_information;
if (mlpi->n == GNUNET_YES)
{
- *aa = addr;
+ aa->address = addr;
+ if (mlpi->b > (double) UINT32_MAX)
+ aa->bandwidth_out = UINT32_MAX;
+ else
+ aa->bandwidth_out = (uint32_t) mlpi->b;
+ aa->bandwidth_in = 0;
return GNUNET_NO;
}
return GNUNET_YES;
* @param peer the peer
* @return suggested address
*/
-struct ATS_Address *
+struct ATS_PreferedAddress *
GAS_mlp_get_preferred_address (struct GAS_MLP_Handle *mlp,
struct GNUNET_CONTAINER_MultiHashMap * addresses,
const struct GNUNET_PeerIdentity *peer)
{
- struct ATS_Address * aa = NULL;
+ struct ATS_PreferedAddress * aa = GNUNET_malloc (sizeof (struct ATS_PreferedAddress));
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Getting preferred address for `%s'\n", GNUNET_i2s (peer));
- GNUNET_CONTAINER_multihashmap_get_multiple(addresses, &peer->hashPubKey, mlp_get_preferred_address_it, &aa);
+ GNUNET_CONTAINER_multihashmap_get_multiple(addresses, &peer->hashPubKey, mlp_get_preferred_address_it, aa);
return aa;
}
struct ATS_Address *tail;
};
+struct ATS_PreferedAddress
+{
+ uint32_t bandwidth_out;
+ uint32_t bandwidth_in;
+ struct ATS_Address *address;
+};
+
/**
* MLP Handle
*/
* @param peer the peer
* @return suggested address
*/
-struct ATS_Address *
+struct ATS_PreferedAddress *
GAS_mlp_get_preferred_address (struct GAS_MLP_Handle *mlp,
struct GNUNET_CONTAINER_MultiHashMap * addresses,
const struct GNUNET_PeerIdentity *peer);
return;
#endif
struct ATS_Address addr[10];
- struct ATS_Address *res[10];
+ struct ATS_PreferedAddress *res[10];
stats = GNUNET_STATISTICS_create("ats", cfg);
set_ats (&a1_ats[1], GNUNET_ATS_QUALITY_NET_DELAY, 2);
set_ats (&a1_ats[2], GNUNET_ATS_ARRAY_TERMINATOR, 0);
create_address (&addr[0], "dummy", 3, &a1_ats[0]);
- addr[0].atsp_network_type = GNUNET_ATS_NET_LOOPBACK;
-
+ addr[0].atsp_network_type = GNUNET_ATS_NET_WAN;
/* Creating peer 1 address 2 */
addr[1].peer.hashPubKey = p[0].hashPubKey;
set_ats (&a3_ats[1], GNUNET_ATS_QUALITY_NET_DISTANCE, 1);
set_ats (&a3_ats[2], GNUNET_ATS_ARRAY_TERMINATOR, 0);
create_address (&addr[2], "dummy3", 3, &a3_ats[0]);
- addr[2].atsp_network_type = GNUNET_ATS_NET_WAN;
+ addr[2].atsp_network_type = GNUNET_ATS_NET_LAN;
GNUNET_CONTAINER_multihashmap_put(addresses, &addr[0].peer.hashPubKey, &addr[0], GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
GNUNET_assert (GNUNET_OK == GAS_mlp_solve_problem(mlp));
res[0] = GAS_mlp_get_preferred_address(mlp, addresses, &p[0]);
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Preferred address `%s' \n",res[0]->plugin);
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Preferred address `%s' outbound bandwidth: %u Bps\n",res[0]->address->plugin, res[0]->bandwidth_out);
res[1] = GAS_mlp_get_preferred_address(mlp, addresses, &p[1]);
- GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Preferred address `%s' \n",res[1]->plugin);
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Preferred address `%s' outbound bandwidth: %u Bps\n",res[1]->address->plugin, res[1]->bandwidth_out);
/* Delete an address */
GNUNET_CONTAINER_multihashmap_remove (addresses, &addr[0].peer.hashPubKey, &addr[0]);