[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r27733 - gnunet/src/ats
From: |
gnunet |
Subject: |
[GNUnet-SVN] r27733 - gnunet/src/ats |
Date: |
Wed, 3 Jul 2013 15:40:32 +0200 |
Author: wachs
Date: 2013-07-03 15:40:31 +0200 (Wed, 03 Jul 2013)
New Revision: 27733
Modified:
gnunet/src/ats/gnunet-service-ats-solver_mlp.c
gnunet/src/ats/gnunet-service-ats-solver_mlp.h
gnunet/src/ats/gnunet-service-ats-solver_proportional.c
gnunet/src/ats/gnunet-service-ats-solver_proportional.h
gnunet/src/ats/gnunet-service-ats_addresses.c
gnunet/src/ats/gnunet-service-ats_addresses.h
gnunet/src/ats/gnunet-service-ats_normalization.c
gnunet/src/ats/perf_ats_mlp.c
gnunet/src/ats/test_ats_api.conf
gnunet/src/ats/test_ats_mlp.c
gnunet/src/ats/test_ats_mlp_update.c
Log:
changing solver api: remove address hashmap from functions and pass instead
with init
Modified: gnunet/src/ats/gnunet-service-ats-solver_mlp.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats-solver_mlp.c 2013-07-03 11:55:28 UTC
(rev 27732)
+++ gnunet/src/ats/gnunet-service-ats-solver_mlp.c 2013-07-03 13:40:31 UTC
(rev 27733)
@@ -401,7 +401,7 @@
static int mlp_create_problem_count_addresses (
struct GNUNET_CONTAINER_MultiHashMap * peers,
- struct GNUNET_CONTAINER_MultiHashMap * addresses)
+ const struct GNUNET_CONTAINER_MultiHashMap * addresses)
{
struct CountContext cctx;
cctx.peers = peers;
@@ -716,7 +716,7 @@
* @return GNUNET_OK or GNUNET_SYSERR
*/
static int
-mlp_create_problem (struct GAS_MLP_Handle *mlp, struct
GNUNET_CONTAINER_MultiHashMap * addresses)
+mlp_create_problem (struct GAS_MLP_Handle *mlp)
{
struct MLP_Problem *p = &mlp->p;
int res = GNUNET_OK;
@@ -731,7 +731,7 @@
p->prob = glp_create_prob ();
GNUNET_assert (NULL != p->prob);
p->num_peers = GNUNET_CONTAINER_multihashmap_size (mlp->peers);
- p->num_addresses = mlp_create_problem_count_addresses (mlp->peers,
addresses);
+ p->num_addresses = mlp_create_problem_count_addresses (mlp->peers,
mlp->addresses);
/* Create problem matrix: 10 * #addresses + #q * #addresses + #q, + #peer +
2 + 1 */
p->num_elements = (10 * p->num_addresses + mlp->pv.m_q * p->num_addresses +
mlp->pv.m_q + p->num_peers + 2 + 1);
@@ -766,7 +766,7 @@
mlp_create_problem_add_invariant_rows (mlp, p);
/* Adding address dependent columns constraint rows */
- GNUNET_CONTAINER_multihashmap_iterate (addresses,
&mlp_create_problem_add_address_information, mlp);
+ GNUNET_CONTAINER_multihashmap_iterate (mlp->addresses,
&mlp_create_problem_add_address_information, mlp);
/* Load the matrix */
LOG (GNUNET_ERROR_TYPE_DEBUG, "Loading matrix\n");
@@ -935,11 +935,10 @@
* Solves the MLP problem
*
* @param solver the MLP Handle
- * @param addresses the address hashmap
* @return GNUNET_OK if could be solved, GNUNET_SYSERR on failure
*/
int
-GAS_mlp_solve_problem (void *solver, struct GNUNET_CONTAINER_MultiHashMap *
addresses)
+GAS_mlp_solve_problem (void *solver)
{
struct GAS_MLP_Handle *mlp = solver;
char *filename;
@@ -964,13 +963,12 @@
LOG (GNUNET_ERROR_TYPE_DEBUG, "No changes to problem\n");
return GNUNET_OK;
}
- mlp->addresses = addresses;
if (GNUNET_YES == mlp->mlp_prob_changed)
{
LOG (GNUNET_ERROR_TYPE_DEBUG, "Problem size changed,
rebuilding\n");
mlp_delete_problem (mlp);
start_build = GNUNET_TIME_absolute_get();
- if (GNUNET_SYSERR == mlp_create_problem (mlp,
addresses))
+ if (GNUNET_SYSERR == mlp_create_problem (mlp))
return GNUNET_SYSERR;
duration_build = GNUNET_TIME_absolute_get_duration
(start_build);
mlp->control_param_lp.presolve = GLP_YES;
@@ -1015,7 +1013,7 @@
/* Propagate result*/
if ((GNUNET_OK == res_lp) && (GNUNET_OK == res_mip))
- GNUNET_CONTAINER_multihashmap_iterate (addresses,
&mlp_propagate_results, mlp);
+ GNUNET_CONTAINER_multihashmap_iterate (mlp->addresses,
&mlp_propagate_results, mlp);
struct GNUNET_TIME_Absolute time = GNUNET_TIME_absolute_get();
if (GNUNET_YES == mlp->write_mip_mps)
@@ -1053,7 +1051,6 @@
*/
void
GAS_mlp_address_add (void *solver,
-
struct GNUNET_CONTAINER_MultiHashMap *addresses,
struct ATS_Address *address,
uint32_t network)
{
@@ -1064,10 +1061,8 @@
int c2;
GNUNET_assert (NULL != solver);
- GNUNET_assert (NULL != addresses);
GNUNET_assert (NULL != address);
- mlp->addresses = addresses;
if (NULL == address->solver_information)
{
address->solver_information = GNUNET_malloc (sizeof (struct
MLP_information));
@@ -1093,13 +1088,13 @@
/* Problem size changed: new address for peer with pending request */
mlp->mlp_prob_changed = GNUNET_YES;
if (GNUNET_YES == mlp->mlp_auto_solve)
- GAS_mlp_solve_problem (solver, addresses);
+ GAS_mlp_solve_problem (solver);
}
static void
mlp_update_quality (struct GAS_MLP_Handle *mlp,
- struct GNUNET_CONTAINER_MultiHashMap *addresses,
+ const struct GNUNET_CONTAINER_MultiHashMap *addresses,
struct ATS_Address * address,
const struct GNUNET_ATS_Information *ats_prev, uint32_t
ats_prev_count)
{
@@ -1272,7 +1267,7 @@
if ((GNUNET_YES == mlp->mlp_prob_changed) &&
(GNUNET_YES == mlp->mlp_auto_solve))
{
- GAS_mlp_solve_problem (mlp, addresses);
+ GAS_mlp_solve_problem (mlp);
return;
}
@@ -1328,7 +1323,6 @@
*/
void
GAS_mlp_address_update (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap *addresses,
struct ATS_Address *address,
uint32_t prev_session,
int prev_in_use,
@@ -1340,17 +1334,15 @@
struct MLP_information *mlpi = address->solver_information;
GNUNET_assert (NULL != solver);
- GNUNET_assert (NULL != addresses);
GNUNET_assert (NULL != address);
GNUNET_assert ((NULL != prev_atsi) || (0 == prev_atsi_count));
- mlp->addresses = addresses;
if (NULL == mlpi)
{
LOG (GNUNET_ERROR_TYPE_ERROR, _("Updating address for peer `%s' not
added before\n"), GNUNET_i2s(&address->peer));
return;
}
- mlp_update_quality (mlp, addresses, address, prev_atsi,
prev_atsi_count);
+ mlp_update_quality (mlp, mlp->addresses, address, prev_atsi,
prev_atsi_count);
/* Is this peer included in the problem? */
if (NULL == (p = GNUNET_CONTAINER_multihashmap_get (mlp->peers,
&address->peer.hashPubKey)))
@@ -1364,7 +1356,7 @@
mlp->mlp_prob_updated = GNUNET_YES;
if (GNUNET_YES == mlp->mlp_auto_solve)
- GAS_mlp_solve_problem (solver, addresses);
+ GAS_mlp_solve_problem (solver);
return;
}
@@ -1381,7 +1373,6 @@
*/
void
GAS_mlp_address_delete (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap * addresses,
struct ATS_Address *address,
int session_only)
{
@@ -1389,12 +1380,10 @@
struct GAS_MLP_Handle *mlp = solver;
struct MLP_information *mlpi;
- GNUNET_assert (NULL != solver);
- GNUNET_assert (NULL != addresses);
+ GNUNET_assert (NULL != solver);;
GNUNET_assert (NULL != address);
mlpi = address->solver_information;
- mlp->addresses = addresses;
if (NULL != mlpi)
{
GNUNET_free (mlpi);
@@ -1412,7 +1401,7 @@
/* Problem size changed: new address for peer with pending request */
mlp->mlp_prob_changed = GNUNET_YES;
if (GNUNET_YES == mlp->mlp_auto_solve)
- GAS_mlp_solve_problem (solver, addresses);
+ GAS_mlp_solve_problem (solver);
return;
}
@@ -1475,7 +1464,6 @@
*/
const struct ATS_Address *
GAS_mlp_get_preferred_address (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap *
addresses,
const struct GNUNET_PeerIdentity *peer)
{
struct GAS_MLP_Handle *mlp = solver;
@@ -1483,12 +1471,11 @@
struct ATS_Address *res = NULL;
GNUNET_assert (NULL != solver);
- GNUNET_assert (NULL != addresses);
GNUNET_assert (NULL != peer);
LOG (GNUNET_ERROR_TYPE_DEBUG, "Getting preferred address for `%s'\n",
GNUNET_i2s (peer));
- mlp->addresses = addresses;
+
/* Is this peer included in the problem? */
if (NULL == (p = GNUNET_CONTAINER_multihashmap_get (mlp->peers,
&peer->hashPubKey)))
{
@@ -1504,10 +1491,10 @@
mlp->mlp_prob_changed = GNUNET_YES;
}
if (GNUNET_YES == mlp->mlp_auto_solve)
- GAS_mlp_solve_problem (mlp, addresses);
+ GAS_mlp_solve_problem (mlp);
/* Get prefered address */
- GNUNET_CONTAINER_multihashmap_get_multiple (addresses, &peer->hashPubKey,
+ GNUNET_CONTAINER_multihashmap_get_multiple (mlp->addresses,
&peer->hashPubKey,
mlp_get_preferred_address_it, res);
return res;
@@ -1547,7 +1534,7 @@
if (0 < s->bulk_request)
{
- GAS_mlp_solve_problem (solver, s->addresses);
+ GAS_mlp_solve_problem (solver);
s->bulk_request= 0;
}
}
@@ -1563,14 +1550,12 @@
*/
void
GAS_mlp_stop_get_preferred_address (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap
*addresses,
const struct GNUNET_PeerIdentity *peer)
{
struct GAS_MLP_Handle *mlp = solver;
struct ATS_Peer *p = NULL;
GNUNET_assert (NULL != solver);
- GNUNET_assert (NULL != addresses);
GNUNET_assert (NULL != peer);
if (NULL != (p = GNUNET_CONTAINER_multihashmap_get (mlp->peers,
&peer->hashPubKey)))
@@ -1592,7 +1577,6 @@
*/
void
GAS_mlp_address_change_preference (void *solver,
- struct
GNUNET_CONTAINER_MultiHashMap *addresses,
const struct
GNUNET_PeerIdentity *peer,
enum
GNUNET_ATS_PreferenceKind kind,
double
pref_rel)
@@ -1604,7 +1588,6 @@
GNUNET_i2s(peer));
GNUNET_STATISTICS_update (mlp->stats,"# LP address preference changes", 1,
GNUNET_NO);
- mlp->addresses = addresses;
/* Update the constraints with changed preferences */
/* Update quality constraint c7 */
@@ -1621,7 +1604,7 @@
/* Problem size changed: new address for peer with pending request */
mlp->mlp_prob_updated = GNUNET_YES;
if (GNUNET_YES == mlp->mlp_auto_solve)
- GAS_mlp_solve_problem (solver, addresses);
+ GAS_mlp_solve_problem (solver);
return;
}
@@ -1683,6 +1666,7 @@
void *
GAS_mlp_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
const struct GNUNET_STATISTICS_Handle *stats,
+ const struct GNUNET_CONTAINER_MultiHashMap *addresses,
int *network,
unsigned long long *out_dest,
unsigned long long *in_dest,
@@ -1690,7 +1674,9 @@
GAS_bandwidth_changed_cb bw_changed_cb,
void *bw_changed_cb_cls,
GAS_get_preferences get_preference,
- void *get_preference_cls)
+ void *get_preference_cls,
+ GAS_get_properties get_properties,
+ void *get_properties_cls)
{
struct GAS_MLP_Handle * mlp = GNUNET_malloc (sizeof (struct GAS_MLP_Handle));
@@ -1707,6 +1693,13 @@
struct GNUNET_TIME_Relative max_duration;
long long unsigned int max_iterations;
+ GNUNET_assert (NULL != cfg);
+ GNUNET_assert (NULL != stats);
+ GNUNET_assert (NULL != addresses);
+ GNUNET_assert (NULL != bw_changed_cb);
+ GNUNET_assert (NULL != get_preference);
+ GNUNET_assert (NULL != get_properties);
+
/* Init GLPK environment */
int res = glp_init_env();
switch (res) {
@@ -1892,10 +1885,13 @@
/* Assign options to handle */
mlp->stats = (struct GNUNET_STATISTICS_Handle *) stats;
+ mlp->addresses = addresses;
mlp->bw_changed_cb = bw_changed_cb;
mlp->bw_changed_cb_cls = bw_changed_cb_cls;
mlp->get_preferences = get_preference;
mlp->get_preferences_cls = get_preference_cls;
+ mlp->get_properties = get_properties;
+ mlp->get_properties_cls = get_properties_cls;
/* Setting MLP Input variables */
mlp->pv.co_D = D;
mlp->pv.co_R = R;
Modified: gnunet/src/ats/gnunet-service-ats-solver_mlp.h
===================================================================
--- gnunet/src/ats/gnunet-service-ats-solver_mlp.h 2013-07-03 11:55:28 UTC
(rev 27732)
+++ gnunet/src/ats/gnunet-service-ats-solver_mlp.h 2013-07-03 13:40:31 UTC
(rev 27733)
@@ -90,12 +90,6 @@
/* Legacy preference value */
double f;
-
-#if 0
- /* Array of quality preferences */
- double f_q[GNUNET_ATS_QualityPropertiesCount];
-
-#endif
};
@@ -223,7 +217,7 @@
/**
* Address hashmap for lookups
*/
- struct GNUNET_CONTAINER_MultiHashMap *addresses;
+ const struct GNUNET_CONTAINER_MultiHashMap *addresses;
/**
* Addresses' bandwidth changed callback
@@ -235,10 +229,28 @@
*/
void *bw_changed_cb_cls;
+
+
+ /**
+ * ATS function to get preferences
+ */
GAS_get_preferences get_preferences;
+ /**
+ * Closure for ATS function to get preferences
+ */
void *get_preferences_cls;
+ /**
+ * ATS function to get properties
+ */
+ GAS_get_properties get_properties;
+
+ /**
+ * Closure for ATS function to get properties
+ */
+ void *get_properties_cls;
+
struct MLP_Problem p;
struct MLP_Variables pv;
@@ -353,11 +365,10 @@
* Solves the MLP problem
*
* @param solver the MLP Handle
- * @param addresses the address hashmap
* @return GNUNET_OK if could be solved, GNUNET_SYSERR on failure
*/
int
-GAS_mlp_solve_problem (void *solver, struct GNUNET_CONTAINER_MultiHashMap *
addresses);
+GAS_mlp_solve_problem (void *solver);
/**
@@ -378,6 +389,7 @@
void *
GAS_mlp_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
const struct GNUNET_STATISTICS_Handle *stats,
+ const struct GNUNET_CONTAINER_MultiHashMap *addresses,
int *network,
unsigned long long *out_dest,
unsigned long long *in_dest,
@@ -385,7 +397,9 @@
GAS_bandwidth_changed_cb bw_changed_cb,
void *bw_changed_cb_cls,
GAS_get_preferences get_preference,
- void *get_preference_cls);
+ void *get_preference_cls,
+ GAS_get_properties get_properties,
+ void *get_properties_cls);
/**
@@ -398,7 +412,6 @@
*/
void
GAS_mlp_address_add (void *solver,
-
struct GNUNET_CONTAINER_MultiHashMap *addresses,
struct ATS_Address *address,
uint32_t network);
@@ -424,7 +437,6 @@
*/
void
GAS_mlp_address_update (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap *addresses,
struct ATS_Address *address,
uint32_t prev_session,
int prev_in_use,
@@ -445,7 +457,6 @@
*/
void
GAS_mlp_address_delete (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap *addresses,
struct ATS_Address *address,
int session_only);
@@ -461,7 +472,6 @@
*/
void
GAS_mlp_address_change_preference (void *solver,
- struct
GNUNET_CONTAINER_MultiHashMap *addresses,
const struct
GNUNET_PeerIdentity *peer,
enum
GNUNET_ATS_PreferenceKind kind,
double
pref_rel);
@@ -493,7 +503,6 @@
*/
const struct ATS_Address *
GAS_mlp_get_preferred_address (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap *
addresses,
const struct GNUNET_PeerIdentity *peer);
@@ -507,7 +516,6 @@
void
GAS_mlp_stop_get_preferred_address (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap
*addresses,
const struct GNUNET_PeerIdentity *peer);
Modified: gnunet/src/ats/gnunet-service-ats-solver_proportional.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats-solver_proportional.c 2013-07-03
11:55:28 UTC (rev 27732)
+++ gnunet/src/ats/gnunet-service-ats-solver_proportional.c 2013-07-03
13:40:31 UTC (rev 27733)
@@ -224,6 +224,11 @@
struct GNUNET_STATISTICS_Handle *stats;
/**
+ * Hashmap containing all valid addresses
+ */
+ const struct GNUNET_CONTAINER_MultiHashMap *addresses;
+
+ /**
* Bandwidth changed callback
*/
GAS_bandwidth_changed_cb bw_changed;
@@ -244,6 +249,16 @@
void *get_preferences_cls;
/**
+ * ATS function to get properties
+ */
+ GAS_get_properties get_properties;
+
+ /**
+ * Closure for ATS function to get properties
+ */
+ void *get_properties_cls;
+
+ /**
* Bulk lock
*/
int bulk_lock;
@@ -551,6 +566,15 @@
static int
get_performance_info (struct ATS_Address *address, uint32_t type);
+
+
+struct FindBestAddressCtx
+{
+ struct GAS_PROPORTIONAL_Handle *s;
+ struct ATS_Address *best;
+};
+
+
/**
* Find a "good" address to use for a peer by iterating over the addresses for
this peer.
* If we already have an existing address, we stick to it.
@@ -564,15 +588,12 @@
static int
find_best_address_it (void *cls, const struct GNUNET_HashCode * key, void
*value)
{
- struct ATS_Address **previous_p = cls;
+ struct FindBestAddressCtx *fba_ctx = (struct FindBestAddressCtx *) cls;
struct ATS_Address *current = (struct ATS_Address *) value;
- struct ATS_Address *previous = *previous_p;
struct GNUNET_TIME_Absolute now;
struct Network *net = (struct Network *) current->solver_information;
- uint32_t p_distance_cur;
- uint32_t p_distance_prev;
- uint32_t p_delay_cur;
- uint32_t p_delay_prev;
+ const double *norm_prop_cur;
+ const double *norm_prop_prev;
now = GNUNET_TIME_absolute_get();
@@ -585,61 +606,57 @@
GNUNET_TIME_absolute_get_difference(now,
current->blocked_until).rel_value);
return GNUNET_OK;
}
-
if (GNUNET_NO == is_bandwidth_available_in_network (net))
return GNUNET_OK; /* There's no bandwidth available in this network */
-
- if (NULL != previous)
+ if (NULL != fba_ctx->best)
{
- GNUNET_assert (NULL != previous->plugin);
+ GNUNET_assert (NULL != fba_ctx->best->plugin);
GNUNET_assert (NULL != current->plugin);
- if (0 == strcmp (previous->plugin, current->plugin))
+ if (0 == strcmp (fba_ctx->best->plugin, current->plugin))
{
- if ((0 != previous->addr_len) &&
+ if ((0 != fba_ctx->best->addr_len) &&
(0 == current->addr_len))
{
/* saved address was an outbound address, but we have an inbound
address */
- *previous_p = current;
+ fba_ctx->best = current;
return GNUNET_OK;
}
- if (0 == previous->addr_len)
+ if (0 == fba_ctx->best->addr_len)
{
/* saved address was an inbound address, so do not overwrite */
return GNUNET_OK;
}
}
}
-
- if (NULL == previous)
+ if (NULL == fba_ctx->best)
{
- *previous_p = current;
+ fba_ctx->best = current;
return GNUNET_OK;
}
- if ((ntohl (previous->assigned_bw_in.value__) == 0) &&
+ if ((ntohl (fba_ctx->best->assigned_bw_in.value__) == 0) &&
(ntohl (current->assigned_bw_in.value__) > 0))
{
/* stick to existing connection */
- *previous_p = current;
+ fba_ctx->best = current;
return GNUNET_OK;
}
- p_distance_prev = get_performance_info (previous,
GNUNET_ATS_QUALITY_NET_DISTANCE);
- p_distance_cur = get_performance_info (current,
GNUNET_ATS_QUALITY_NET_DISTANCE);
- if ((p_distance_prev != GNUNET_ATS_VALUE_UNDEFINED) && (p_distance_cur !=
GNUNET_ATS_VALUE_UNDEFINED) &&
- (p_distance_prev > p_distance_cur))
+ norm_prop_cur = fba_ctx->s->get_properties (fba_ctx->s->get_properties_cls,
+ (const struct ATS_Address *) current);
+ GNUNET_break (0);
+ norm_prop_prev = fba_ctx->s->get_properties (fba_ctx->s->get_properties_cls,
+ (const struct ATS_Address *) fba_ctx->best);
+
+ if (norm_prop_cur[1] < norm_prop_prev[1])
{
/* user shorter distance */
- *previous_p = current;
+ fba_ctx->best = current;
return GNUNET_OK;
}
-
- p_delay_prev = get_performance_info (previous, GNUNET_ATS_QUALITY_NET_DELAY);
- p_delay_cur = get_performance_info (current, GNUNET_ATS_QUALITY_NET_DELAY);
- if ((p_delay_prev != GNUNET_ATS_VALUE_UNDEFINED) && (p_delay_cur !=
GNUNET_ATS_VALUE_UNDEFINED) &&
- (p_delay_prev > p_delay_cur))
+ if (norm_prop_cur[0] < norm_prop_prev[0])
{
- /* user lower latency */
- *previous_p = current;
+ /* user shorter distance */
+ fba_ctx->best = current;
return GNUNET_OK;
}
@@ -857,14 +874,12 @@
* Changes the preferences for a peer in the problem
*
* @param solver the solver handle
- * @param addresses the address hashmap
* @param peer the peer to change the preference for
* @param kind the kind to change the preference
* @param pref_rel the normalized preference value for this kind over all
clients
*/
void
GAS_proportional_address_change_preference (void *solver,
-
struct GNUNET_CONTAINER_MultiHashMap *addresses,
const struct GNUNET_PeerIdentity *peer,
enum GNUNET_ATS_PreferenceKind kind,
double pref_rel)
@@ -876,6 +891,7 @@
distribute_bandwidth_in_all_networks (s);
}
+
/**
* Get the preferred address for a specific peer
*
@@ -885,41 +901,44 @@
*/
const struct ATS_Address *
GAS_proportional_get_preferred_address (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap *
addresses,
const struct GNUNET_PeerIdentity *peer)
{
struct GAS_PROPORTIONAL_Handle *s = solver;
struct Network *net_prev;
struct Network *net_cur;
- struct ATS_Address *cur;
struct ATS_Address *prev;
+ struct FindBestAddressCtx fba_ctx;
GNUNET_assert (s != NULL);
- cur = NULL;
+ GNUNET_assert (peer != NULL);
+
/* Get address with: stick to current address, lower distance, lower latency
*/
- GNUNET_CONTAINER_multihashmap_get_multiple (addresses, &peer->hashPubKey,
- &find_best_address_it, &cur);
- if (NULL == cur)
+ fba_ctx.s = s;
+ fba_ctx.best = NULL;
+ GNUNET_break (0);
+ GNUNET_CONTAINER_multihashmap_get_multiple (s->addresses, &peer->hashPubKey,
+ &find_best_address_it, &fba_ctx);
+ if (NULL == fba_ctx.best)
{
LOG (GNUNET_ERROR_TYPE_DEBUG, "Cannot suggest address for peer `%s'\n",
GNUNET_i2s (peer));
return NULL;
}
LOG (GNUNET_ERROR_TYPE_DEBUG, "Suggesting %s address %p for peer `%s'\n",
- (GNUNET_NO == cur->active) ? "inactive" : "active",
- cur, GNUNET_i2s (peer));
- net_cur = (struct Network *) cur->solver_information;
- if (NULL == cur)
+ (GNUNET_NO == fba_ctx.best->active) ? "inactive" : "active",
+ fba_ctx.best, GNUNET_i2s (peer));
+ net_cur = (struct Network *) fba_ctx.best->solver_information;
+ if (NULL == fba_ctx.best)
{
LOG (GNUNET_ERROR_TYPE_ERROR, "Trying to suggesting unknown address peer
`%s'\n",
GNUNET_i2s (peer));
GNUNET_break (0);
return NULL;
}
- if (GNUNET_YES == cur->active)
+ if (GNUNET_YES == fba_ctx.best->active)
{
/* This address was selected previously, so no need to update quotas */
- return cur;
+ return fba_ctx.best;
}
/* This address was not active, so we have to:
@@ -929,7 +948,7 @@
* - update quota for this address network
*/
- prev = get_active_address (s, addresses, peer);
+ prev = get_active_address (s, (struct GNUNET_CONTAINER_MultiHashMap *)
s->addresses, peer);
if (NULL != prev)
{
net_prev = (struct Network *) prev->solver_information;
@@ -942,16 +961,16 @@
distribute_bandwidth_in_network (s, net_prev, NULL);
}
- if (GNUNET_NO == (is_bandwidth_available_in_network
(cur->solver_information)))
+ if (GNUNET_NO == (is_bandwidth_available_in_network
(fba_ctx.best->solver_information)))
{
GNUNET_break (0); /* This should never happen*/
return NULL;
}
- cur->active = GNUNET_YES;
+ fba_ctx.best->active = GNUNET_YES;
addresse_increment(s, net_cur, GNUNET_NO, GNUNET_YES);
- distribute_bandwidth_in_network (s, net_cur, cur);
- return cur;
+ distribute_bandwidth_in_network (s, net_cur, fba_ctx.best);
+ return fba_ctx.best;
}
@@ -964,7 +983,6 @@
*/
void
GAS_proportional_stop_get_preferred_address (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap
*addresses,
const struct GNUNET_PeerIdentity *peer)
{
return;
@@ -981,8 +999,8 @@
*/
void
GAS_proportional_address_delete (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap * addresses,
- struct ATS_Address *address, int session_only)
+
struct ATS_Address *address,
+
int session_only)
{
struct GAS_PROPORTIONAL_Handle *s = solver;
struct Network *net;
@@ -1090,15 +1108,13 @@
* Add a new single address to a network
*
* @param solver the solver Handle
- * @param addresses the address hashmap containing all addresses
* @param address the address to add
* @param network network type of this address
*/
void
GAS_proportional_address_add (void *solver,
- struct
GNUNET_CONTAINER_MultiHashMap *addresses,
- struct ATS_Address
*address,
- uint32_t network);
+
struct ATS_Address *address,
+
uint32_t network);
/**
* Updates a single address in the solver and checks previous values
@@ -1113,7 +1129,6 @@
*/
void
GAS_proportional_address_update (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap *addresses,
struct ATS_Address *address,
uint32_t session,
int in_use,
@@ -1163,7 +1178,7 @@
save_active = address->active;
/* remove from old network */
- GAS_proportional_address_delete (solver, addresses, address,
GNUNET_NO);
+ GAS_proportional_address_delete (solver, address, GNUNET_NO);
/* set new network type */
new_net = get_network (solver, addr_net);
@@ -1180,7 +1195,7 @@
address->solver_information = new_net;
/* Add to new network and update*/
- GAS_proportional_address_add (solver, addresses, address, addr_net);
+ GAS_proportional_address_add (solver, address, addr_net);
if (GNUNET_YES == save_active)
{
/* check if bandwidth available in new network */
@@ -1201,7 +1216,7 @@
s->bw_changed (s->bw_changed_cls, address);
/* Find new address to suggest since no bandwidth in network*/
- new = (struct ATS_Address *)
GAS_proportional_get_preferred_address (s, addresses, &address->peer);
+ new = (struct ATS_Address *)
GAS_proportional_get_preferred_address (s, &address->peer);
if (NULL != new)
{
/* Have an alternative address to suggest */
@@ -1248,9 +1263,8 @@
*/
void
GAS_proportional_address_add (void *solver,
- struct
GNUNET_CONTAINER_MultiHashMap *addresses,
- struct ATS_Address
*address,
- uint32_t network)
+
struct ATS_Address *address,
+
uint32_t network)
{
struct GAS_PROPORTIONAL_Handle *s = solver;
struct Network *net = NULL;
@@ -1293,6 +1307,7 @@
*
* @param cfg configuration handle
* @param stats the GNUNET_STATISTICS handle
+ * @param addresses hashmap containing all addresses
* @param network array of GNUNET_ATS_NetworkType with length dest_length
* @param out_quota array of outbound quotas
* @param in_quota array of outbound quota
@@ -1306,6 +1321,7 @@
void *
GAS_proportional_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
const struct GNUNET_STATISTICS_Handle *stats,
+ const struct GNUNET_CONTAINER_MultiHashMap *addresses,
int *network,
unsigned long long *out_quota,
unsigned long long *in_quota,
@@ -1313,24 +1329,35 @@
GAS_bandwidth_changed_cb bw_changed_cb,
void *bw_changed_cb_cls,
GAS_get_preferences get_preference,
- void *get_preference_cls)
+ void *get_preference_cls,
+ GAS_get_properties get_properties,
+ void *get_properties_cls)
{
int c;
struct GAS_PROPORTIONAL_Handle *s = GNUNET_malloc (sizeof (struct
GAS_PROPORTIONAL_Handle));
struct Network * cur;
char * net_str[GNUNET_ATS_NetworkTypeCount] = GNUNET_ATS_NetworkTypeString;
+ GNUNET_assert (NULL != cfg);
+ GNUNET_assert (NULL != stats);
+ GNUNET_assert (NULL != network);
+ GNUNET_assert (NULL != bw_changed_cb);
+ GNUNET_assert (NULL != get_preference);
+ GNUNET_assert (NULL != get_properties);
s->stats = (struct GNUNET_STATISTICS_Handle *) stats;
s->bw_changed = bw_changed_cb;
s->bw_changed_cls = bw_changed_cb_cls;
s->get_preferences = get_preference;
s->get_preferences_cls = get_preference_cls;
+ s->get_properties = get_properties;
+ s->get_properties_cls = get_properties_cls;
s->networks = dest_length;
s->network_entries = GNUNET_malloc (dest_length * sizeof (struct Network));
s->active_addresses = 0;
s->total_addresses = 0;
s->bulk_lock = GNUNET_NO;
+ s->addresses = addresses;
for (c = 0; c < dest_length; c++)
{
Modified: gnunet/src/ats/gnunet-service-ats-solver_proportional.h
===================================================================
--- gnunet/src/ats/gnunet-service-ats-solver_proportional.h 2013-07-03
11:55:28 UTC (rev 27732)
+++ gnunet/src/ats/gnunet-service-ats-solver_proportional.h 2013-07-03
13:40:31 UTC (rev 27733)
@@ -45,7 +45,6 @@
*/
void
GAS_proportional_address_change_preference (void *solver,
-
struct GNUNET_CONTAINER_MultiHashMap *addresses,
const struct GNUNET_PeerIdentity *peer,
enum GNUNET_ATS_PreferenceKind kind,
double pref_rel);
@@ -68,6 +67,7 @@
* @param cfg configuration handle
* @param stats the GNUNET_STATISTICS handle
* @param network array of GNUNET_ATS_NetworkType with length dest_length
+ * @param addresses hashmap containing all addresses
* @param out_quota array of outbound quotas
* @param in_quota array of outbound quota
* @param dest_length array length for quota arrays
@@ -80,6 +80,7 @@
void *
GAS_proportional_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
const struct GNUNET_STATISTICS_Handle *stats,
+ const struct GNUNET_CONTAINER_MultiHashMap *addresses,
int *network,
unsigned long long *out_quota,
unsigned long long *in_quota,
@@ -87,9 +88,10 @@
GAS_bandwidth_changed_cb bw_changed_cb,
void *bw_changed_cb_cls,
GAS_get_preferences get_preference,
- void *get_preference_cls);
+ void *get_preference_cls,
+ GAS_get_properties get_properties,
+ void *get_properties_cls);
-
/**
* Shutdown the proportional problem solver
*
@@ -109,7 +111,6 @@
*/
void
GAS_proportional_address_add (void *solver,
- struct
GNUNET_CONTAINER_MultiHashMap *addresses,
struct ATS_Address
*address,
uint32_t network);
@@ -127,7 +128,6 @@
*/
void
GAS_proportional_address_update (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap *addresses,
struct ATS_Address *address,
uint32_t session,
int in_use,
@@ -145,7 +145,6 @@
*/
void
GAS_proportional_address_delete (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap * addresses,
struct ATS_Address *address, int session_only);
@@ -173,7 +172,6 @@
*/
void
GAS_proportional_stop_get_preferred_address (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap
*addresses,
const struct GNUNET_PeerIdentity *peer);
@@ -186,7 +184,6 @@
*/
const struct ATS_Address *
GAS_proportional_get_preferred_address (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap *
addresses,
const struct GNUNET_PeerIdentity *peer);
/* end of gnunet-service-ats-solver_proportional.c */
Modified: gnunet/src/ats/gnunet-service-ats_addresses.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.c 2013-07-03 11:55:28 UTC
(rev 27732)
+++ gnunet/src/ats/gnunet-service-ats_addresses.c 2013-07-03 13:40:31 UTC
(rev 27733)
@@ -822,7 +822,7 @@
handle->s_bulk_start (handle->solver);
GAS_normalization_normalize_property (handle->addresses, aa, atsi,
atsi_count);
handle->s_bulk_stop (handle->solver);
- handle->s_add (handle->solver, handle->addresses, aa, addr_net);
+ handle->s_add (handle->solver, aa, addr_net);
/* Notify performance clients about new address */
GAS_performance_notify_all_clients (&aa->peer,
aa->plugin,
@@ -868,7 +868,7 @@
handle->s_bulk_start (handle->solver);
GAS_normalization_normalize_property (handle->addresses, ea, atsi,
atsi_count);
handle->s_bulk_stop (handle->solver);
- handle->s_update (handle->solver, handle->addresses, ea, session_id,
ea->used, atsi_delta, atsi_delta_count);
+ handle->s_update (handle->solver, ea, session_id, ea->used, atsi_delta,
atsi_delta_count);
GNUNET_free_non_null (atsi_delta);
/* Do the update */
@@ -957,7 +957,7 @@
handle->s_bulk_stop (handle->solver);
/* Tell solver about update */
- handle->s_update (handle->solver, handle->addresses, aa, prev_session,
aa->used, atsi_delta, atsi_delta_count);
+ handle->s_update (handle->solver, aa, prev_session, aa->used, atsi_delta,
atsi_delta_count);
GNUNET_free_non_null (atsi_delta);
}
@@ -1013,7 +1013,7 @@
GNUNET_i2s (&aa->peer), aa->session_id, aa);
/* Notify solver about deletion */
- handle->s_del (handle->solver, handle->addresses, aa, GNUNET_NO);
+ handle->s_del (handle->solver, aa, GNUNET_NO);
destroy_address (handle, aa);
dc->result = GNUNET_NO;
return GNUNET_OK; /* Continue iteration */
@@ -1043,7 +1043,7 @@
GNUNET_i2s (&aa->peer), aa->plugin, aa->session_id);
/* Notify solver about deletion */
- handle->s_del (handle->solver, handle->addresses, aa, GNUNET_NO);
+ handle->s_del (handle->solver, aa, GNUNET_NO);
destroy_address (handle, aa);
dc->result = GNUNET_NO;
return GNUNET_OK; /* Continue iteration */
@@ -1055,7 +1055,7 @@
"Deleting session for peer `%s': `%s' %u\n",
GNUNET_i2s (&aa->peer), aa->plugin, aa->session_id);
/* Notify solver to delete session */
- handle->s_del (handle->solver, handle->addresses, aa, GNUNET_YES);
+ handle->s_del (handle->solver, aa, GNUNET_YES);
aa->session_id = 0;
return GNUNET_OK;
}
@@ -1180,7 +1180,7 @@
/* Tell solver about update */
prev_inuse = ea->used;
ea->used = in_use;
- handle->s_update (handle->solver, handle->addresses, ea, session_id,
prev_inuse, NULL, 0);
+ handle->s_update (handle->solver, ea, session_id, prev_inuse, NULL, 0);
return GNUNET_OK;
@@ -1215,7 +1215,7 @@
"No address requests pending for peer `%s', cannot
remove!\n", GNUNET_i2s (peer));
return;
}
- handle->s_get_stop (handle->solver, handle->addresses, peer);
+ handle->s_get_stop (handle->solver, peer);
GAS_addresses_handle_backoff_reset (handle, peer);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Removed request pending for peer `%s\n", GNUNET_i2s (peer));
@@ -1258,7 +1258,7 @@
}
/* Get prefered address from solver */
- aa = (struct ATS_Address *) handle->s_get (handle->solver,
handle->addresses, peer);
+ aa = (struct ATS_Address *) handle->s_get (handle->solver, peer);
if (NULL == aa)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1351,7 +1351,7 @@
GNUNET_assert (NULL != cls);
struct GAS_Addresses_Handle *handle = cls;
/* Tell solver about update */
- handle->s_pref (handle->solver, handle->addresses, peer, kind, pref_rel);
+ handle->s_pref (handle->solver, peer, kind, pref_rel);
}
@@ -1403,9 +1403,9 @@
* @return array of double values with |GNUNET_ATS_QualityPropertiesCount|
elements
*/
const double *
-get_property_cb (void *cls, struct ATS_Address *address)
+get_property_cb (void *cls, const struct ATS_Address *address)
{
- return GAS_normalization_get_properties (address);
+ return GAS_normalization_get_properties ((struct ATS_Address *)
address);
}
/**
@@ -1681,6 +1681,7 @@
ah->s_bulk_stop = &GAS_mlp_bulk_stop;
ah->s_done = &GAS_mlp_done;
#else
+
GNUNET_free (ah);
return NULL;
#endif
@@ -1720,10 +1721,11 @@
&normalized_property_changed_cb, ah);
quota_count = load_quotas(cfg, quotas_in, quotas_out,
GNUNET_ATS_NetworkTypeCount);
- ah->solver = ah->s_init (cfg, stats,
+ ah->solver = ah->s_init (cfg, stats, ah->addresses,
quotas, quotas_in, quotas_out, quota_count,
&bandwidth_changed_cb, ah,
- &get_preferences_cb, NULL);
+ &get_preferences_cb, NULL,
+ &get_property_cb, NULL);
if (NULL == ah->solver)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to initialize solver!\n");
@@ -1750,7 +1752,7 @@
{
struct GAS_Addresses_Handle *handle = cls;
struct ATS_Address *aa = value;
- handle->s_del (handle->solver, handle->addresses, aa, GNUNET_NO);
+ handle->s_del (handle->solver, aa, GNUNET_NO);
destroy_address (handle, aa);
return GNUNET_OK;
}
Modified: gnunet/src/ats/gnunet-service-ats_addresses.h
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.h 2013-07-03 11:55:28 UTC
(rev 27732)
+++ gnunet/src/ats/gnunet-service-ats_addresses.h 2013-07-03 13:40:31 UTC
(rev 27733)
@@ -365,6 +365,11 @@
(*GAS_get_preferences) (void *cls, const struct GNUNET_PeerIdentity *id);
+typedef const double *
+ (*GAS_get_properties) (void *cls, const struct ATS_Address *address);
+
+
+
/*
* Solver API
* ----------
@@ -372,6 +377,7 @@
/**
* Init the simplistic problem solving component
+ *==32673== by 0x40571F: GAS_addresses_request_address
(gnunet-service-ats_addresses.c:1261)
*
* Quotas:
* network[i] contains the network type as type GNUNET_ATS_NetworkType[i]
@@ -386,6 +392,7 @@
*
* @param cfg configuration handle
* @param stats the GNUNET_STATISTICS handle
+ * @param addresses hashmap containing all addresses
* @param network array of GNUNET_ATS_NetworkType with length dest_length
* @param out_quota array of outbound quotas
* @param in_quota array of outbound quota
@@ -395,6 +402,7 @@
typedef void *
(*GAS_solver_init) (const struct GNUNET_CONFIGURATION_Handle *cfg,
const struct GNUNET_STATISTICS_Handle *stats,
+ const struct GNUNET_CONTAINER_MultiHashMap *addresses,
int *network,
unsigned long long *out_quota,
unsigned long long *in_quota,
@@ -402,7 +410,9 @@
GAS_bandwidth_changed_cb bw_changed_cb,
void *bw_changed_cb_cls,
GAS_get_preferences get_preference,
- void *get_preference_cls);
+ void *get_preference_cls,
+ GAS_get_properties get_properties,
+ void *get_properties_cls);
/**
@@ -417,7 +427,6 @@
*/
typedef void
(*GAS_solver_address_change_preference) (void *solver,
-
struct GNUNET_CONTAINER_MultiHashMap *addresses,
const struct GNUNET_PeerIdentity *peer,
enum GNUNET_ATS_PreferenceKind kind,
double pref_rel);
@@ -438,9 +447,8 @@
*/
typedef void
(*GAS_solver_address_add) (void *solver,
-
struct GNUNET_CONTAINER_MultiHashMap *addresses,
-
struct ATS_Address *address,
-
uint32_t network);
+
struct ATS_Address *address,
+
uint32_t network);
/**
@@ -453,7 +461,6 @@
*/
typedef void
(*GAS_solver_address_delete) (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap *addresses,
struct ATS_Address *address,
int session_only);
@@ -471,7 +478,6 @@
*/
typedef void
(*GAS_solver_address_update) (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap *addresses,
struct ATS_Address *address,
uint32_t prev_session,
int in_use,
@@ -488,7 +494,6 @@
*/
typedef const struct ATS_Address *
(*GAS_solver_get_preferred_address) (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap
*addresses,
const struct GNUNET_PeerIdentity *peer);
@@ -501,7 +506,6 @@
*/
typedef void
(*GAS_solver_stop_get_preferred_address) (void *solver,
- struct GNUNET_CONTAINER_MultiHashMap
*addresses,
const struct GNUNET_PeerIdentity *peer);
/**
Modified: gnunet/src/ats/gnunet-service-ats_normalization.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_normalization.c 2013-07-03 11:55:28 UTC
(rev 27732)
+++ gnunet/src/ats/gnunet-service-ats_normalization.c 2013-07-03 13:40:31 UTC
(rev 27733)
@@ -534,6 +534,7 @@
else
norm_values[i] = DEFAULT_REL_QUALITY;
}
+ GNUNET_break (0);
return norm_values;
}
Modified: gnunet/src/ats/perf_ats_mlp.c
===================================================================
--- gnunet/src/ats/perf_ats_mlp.c 2013-07-03 11:55:28 UTC (rev 27732)
+++ gnunet/src/ats/perf_ats_mlp.c 2013-07-03 13:40:31 UTC (rev 27733)
@@ -150,7 +150,13 @@
/* TODO */
}
+const double *
+get_property_cb (void *cls, const struct ATS_Address *address)
+{
+ return GAS_normalization_get_properties ((struct ATS_Address *)
address);
+}
+
static const double *
get_preferences_cb (void *cls, const struct GNUNET_PeerIdentity *id)
{
@@ -184,7 +190,7 @@
ats[1].type = htonl (GNUNET_ATS_QUALITY_NET_DISTANCE);
ats[1].value = htonl
(GNUNET_CRYPTO_random_u32(GNUNET_CRYPTO_QUALITY_WEAK, 10));
- GAS_mlp_address_update (mlp, addresses, address, 0, GNUNET_YES, ats, 2);
+ GAS_mlp_address_update (mlp, address, 0, GNUNET_YES, ats, 2);
}
@@ -215,7 +221,7 @@
default:
break;
}
- GAS_mlp_address_update (mlp, addresses, cur, 0, GNUNET_YES, ats, 1);
+ GAS_mlp_address_update (mlp, cur, 0, GNUNET_YES, ats, 1);
}
static void
@@ -314,8 +320,11 @@
addresses = GNUNET_CONTAINER_multihashmap_create (N_address, GNUNET_NO);
/* Init MLP solver */
- mlp = GAS_mlp_init (cfg, stats, quotas, quotas_out, quotas_in,
- GNUNET_ATS_NetworkTypeCount, &bandwidth_changed_cb, NULL,
&get_preferences_cb, NULL);
+ mlp = GAS_mlp_init (cfg, stats, addresses,
+ quotas, quotas_out, quotas_in,
+ GNUNET_ATS_NetworkTypeCount, &bandwidth_changed_cb, NULL,
+ &get_preferences_cb, NULL,
+ &get_property_cb, NULL);
if (NULL == mlp)
{
GNUNET_break (0);
@@ -338,16 +347,16 @@
{
cur_addr = perf_create_address(cp, ca);
/* add address */
- GAS_mlp_address_add (mlp, addresses,
cur_addr, GNUNET_ATS_NET_UNSPECIFIED);
+ GAS_mlp_address_add (mlp, cur_addr,
GNUNET_ATS_NET_UNSPECIFIED);
address_initial_update (mlp, addresses,
cur_addr);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Adding address for peer %u address %u: \n", cp, ca);
}
- GAS_mlp_get_preferred_address( mlp, addresses,
&peers[cp].id);
+ GAS_mlp_get_preferred_address( mlp, &peers[cp].id);
/* solve */
if (cp + 1 >= N_peers_start)
{
/* Solve the full problem */
- GAS_mlp_solve_problem (mlp, addresses);
+ GAS_mlp_solve_problem (mlp);
full_lp_res = mlp->ps.lp_res;
full_mip_res = mlp->ps.mip_res;
full_lp_presolv = mlp->ps.lp_presolv;
@@ -361,8 +370,8 @@
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Updating problem with %u peers and %u addresses\n", cp + 1, ca);
update_addresses (cp + 1, ca,
opt_update_quantity);
- GAS_mlp_solve_problem (mlp, addresses);
- GAS_mlp_solve_problem (mlp, addresses);
+ GAS_mlp_solve_problem (mlp);
+ GAS_mlp_solve_problem (mlp);
update_lp_res = mlp->ps.lp_res;
update_mip_res = mlp->ps.mip_res;
update_lp_presolv = mlp->ps.lp_presolv;
@@ -418,7 +427,7 @@
{
for (cur = peers[cp].head; cur != NULL; cur = next)
{
- GAS_mlp_address_delete (mlp, addresses,
cur, GNUNET_NO);
+ GAS_mlp_address_delete (mlp, cur,
GNUNET_NO);
next = cur->next;
GNUNET_CONTAINER_DLL_remove
(peers[cp].head, peers[cp].tail, cur);
GNUNET_free (cur);
Modified: gnunet/src/ats/test_ats_api.conf
===================================================================
--- gnunet/src/ats/test_ats_api.conf 2013-07-03 11:55:28 UTC (rev 27732)
+++ gnunet/src/ats/test_ats_api.conf 2013-07-03 13:40:31 UTC (rev 27733)
@@ -7,7 +7,7 @@
UNIXPATH = /tmp/test-ats-scheduling-arm.sock
[ats]
-#PREFIX = valgrind --leak-check=full --track-origins=yes --num-callers=25
+PREFIX = valgrind --leak-check=full --track-origins=yes --num-callers=25
AUTOSTART = YES
PORT = 12002
HOSTNAME = localhost
Modified: gnunet/src/ats/test_ats_mlp.c
===================================================================
--- gnunet/src/ats/test_ats_mlp.c 2013-07-03 11:55:28 UTC (rev 27732)
+++ gnunet/src/ats/test_ats_mlp.c 2013-07-03 13:40:31 UTC (rev 27733)
@@ -75,7 +75,7 @@
void *value)
{
struct ATS_Address *address = (struct ATS_Address *) value;
- GAS_mlp_address_delete (mlp, addresses, address, GNUNET_NO);
+ GAS_mlp_address_delete (mlp, address, GNUNET_NO);
GNUNET_CONTAINER_multihashmap_remove (addresses, key, value);
GNUNET_free (address);
return GNUNET_OK;
@@ -133,6 +133,13 @@
return GAS_normalization_get_preferences (id);
}
+const double *
+get_property_cb (void *cls, const struct ATS_Address *address)
+{
+ return GAS_normalization_get_properties ((struct ATS_Address *)
address);
+}
+
+
static void
normalized_property_changed_cb (void *cls,
const struct ATS_Address *peer,
@@ -214,8 +221,12 @@
addresses = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
/* Init MLP solver */
- mlp = GAS_mlp_init (cfg, stats, quotas, quotas_out, quotas_in,
- GNUNET_ATS_NetworkTypeCount, &bandwidth_changed_cb, NULL,
&get_preferences_cb, NULL);
+ mlp = GAS_mlp_init (cfg, stats, addresses,
+ quotas, quotas_out, quotas_in,
+ GNUNET_ATS_NetworkTypeCount,
+ &bandwidth_changed_cb, NULL,
+ &get_preferences_cb, NULL,
+ &get_property_cb, NULL);
if (NULL == mlp)
{
GNUNET_break (0);
@@ -251,7 +262,7 @@
GNUNET_CONTAINER_multihashmap_put (addresses, &p[0].hashPubKey, address[0],
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
/* Adding address 0 */
- GAS_mlp_address_add (mlp, addresses, address[0], GNUNET_ATS_NET_UNSPECIFIED);
+ GAS_mlp_address_add (mlp, address[0], GNUNET_ATS_NET_UNSPECIFIED);
/* Create address 1 */
address[1] = create_address (&p[0], "test_plugin1", "test_addr1",
strlen("test_addr1")+1, 0);
@@ -264,7 +275,7 @@
GNUNET_CONTAINER_multihashmap_put (addresses, &p[0].hashPubKey, address[1],
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
/* Adding address 1*/
- GAS_mlp_address_add (mlp, addresses, address[1], GNUNET_ATS_NET_UNSPECIFIED);
+ GAS_mlp_address_add (mlp, address[1], GNUNET_ATS_NET_UNSPECIFIED);
/* Create address 3 */
@@ -278,22 +289,22 @@
GNUNET_CONTAINER_multihashmap_put (addresses, &p[1].hashPubKey, address[2],
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
/* Adding address 3*/
- GAS_mlp_address_add (mlp, addresses, address[2], GNUNET_ATS_NET_UNSPECIFIED);
+ GAS_mlp_address_add (mlp, address[2], GNUNET_ATS_NET_UNSPECIFIED);
/* Updating address 0*/
ats.type = htonl (GNUNET_ATS_NETWORK_TYPE);
ats.value = htonl (GNUNET_ATS_NET_WAN);
- GAS_mlp_address_update (mlp, addresses, address[0], 1, GNUNET_NO, &ats, 1);
+ GAS_mlp_address_update (mlp, address[0], 1, GNUNET_NO, &ats, 1);
/* Retrieving preferred address for peer and wait for callback */
- GAS_mlp_get_preferred_address (mlp, addresses, &p[0]);
- GAS_mlp_get_preferred_address (mlp, addresses, &p[1]);
+ GAS_mlp_get_preferred_address (mlp, &p[0]);
+ GAS_mlp_get_preferred_address (mlp, &p[1]);
mlp->write_mip_mps = GNUNET_NO;
mlp->write_mip_sol = GNUNET_NO;
- GAS_mlp_solve_problem (mlp, addresses);
+ GAS_mlp_solve_problem (mlp);
}
Modified: gnunet/src/ats/test_ats_mlp_update.c
===================================================================
--- gnunet/src/ats/test_ats_mlp_update.c 2013-07-03 11:55:28 UTC (rev
27732)
+++ gnunet/src/ats/test_ats_mlp_update.c 2013-07-03 13:40:31 UTC (rev
27733)
@@ -81,7 +81,7 @@
void *value)
{
struct ATS_Address *address = (struct ATS_Address *) value;
- GAS_mlp_address_delete (mlp, addresses, address, GNUNET_NO);
+ GAS_mlp_address_delete (mlp, address, GNUNET_NO);
GNUNET_CONTAINER_multihashmap_remove (addresses, key, value);
GNUNET_free (address);
return GNUNET_OK;
@@ -139,6 +139,12 @@
return GAS_normalization_get_preferences (id);
}
+const double *
+get_property_cb (void *cls, const struct ATS_Address *address)
+{
+ return GAS_normalization_get_properties ((struct ATS_Address *)
address);
+}
+
static void
normalized_property_changed_cb (void *cls,
const struct ATS_Address *peer,
@@ -210,8 +216,12 @@
addresses = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
/* Init MLP solver */
- mlp = GAS_mlp_init (cfg, stats, quotas, quotas_out, quotas_in,
- GNUNET_ATS_NetworkTypeCount, &bandwidth_changed_cb, NULL,
&get_preferences_cb, NULL);
+ mlp = GAS_mlp_init (cfg, stats, addresses,
+ quotas, quotas_out, quotas_in,
+ GNUNET_ATS_NetworkTypeCount,
+ &bandwidth_changed_cb, NULL,
+ &get_preferences_cb, NULL,
+ &get_property_cb, NULL);
if (NULL == mlp)
{
GNUNET_break (0);
@@ -239,13 +249,13 @@
GNUNET_CONTAINER_multihashmap_put (addresses, &p[0].hashPubKey, address[0],
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
/* Adding address 0 */
- GAS_mlp_address_add (mlp, addresses, address[0], GNUNET_ATS_NET_UNSPECIFIED);
+ GAS_mlp_address_add (mlp, address[0], GNUNET_ATS_NET_UNSPECIFIED);
/* Retrieving preferred address for peer and wait for callback */
- GAS_mlp_get_preferred_address (mlp, addresses, &p[0]);
+ GAS_mlp_get_preferred_address (mlp, &p[0]);
/* Solve problem to build matrix */
- GAS_mlp_solve_problem (mlp, addresses);
+ GAS_mlp_solve_problem (mlp);
address[0]->atsi = ats;
address[0]->atsi_count = 4;
@@ -268,10 +278,10 @@
ats_prev[3].type = htonl (GNUNET_ATS_ARRAY_TERMINATOR);
ats_prev[3].value = htonl (GNUNET_ATS_VALUE_UNDEFINED);
- GAS_mlp_address_update (mlp, addresses, address[0], 1, GNUNET_NO, ats_prev,
4);
+ GAS_mlp_address_update (mlp, address[0], 1, GNUNET_NO, ats_prev, 4);
/* Solve problem to build matrix */
- GAS_mlp_solve_problem (mlp, addresses);
+ GAS_mlp_solve_problem (mlp);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r27733 - gnunet/src/ats,
gnunet <=