#define DEBUG_MLP GNUNET_EXTRA_LOGGING
+#define MLP_AVERAGING_QUEUE_LENGTH 3
+
#define MLP_MAX_EXEC_DURATION GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 3)
#define MLP_MAX_ITERATIONS INT_MAX
struct ATS_Address *tail;
};
+struct ATS_PreferedAddress
+{
+ uint32_t bandwidth_out;
+ uint32_t bandwidth_in;
+ struct ATS_Address *address;
+};
+
/**
* MLP Handle
*/
/* number of quality metrics */
int m_q;
+ /* ATS network quotas */
+ int c_quota[GNUNET_ATS_NetworkTypeCount];
+ int r_quota[GNUNET_ATS_NetworkTypeCount];
+ int quota_index [GNUNET_ATS_NetworkTypeCount];
+ unsigned long long quota_out[GNUNET_ATS_NetworkTypeCount];
+ unsigned long long quota_in[GNUNET_ATS_NetworkTypeCount];
+
/* ATS ressource costs
*
* array with GNUNET_ATS_QualityPropertiesCount elements
*/
struct MLP_information
{
+ double b;
+
+ int n;
+
/* bandwidth column index */
signed int c_b;
/* Quality information row indices */
unsigned int r_q[GNUNET_ATS_QualityPropertiesCount];
- /* Quality information column indices */
- unsigned int c_q[GNUNET_ATS_QualityPropertiesCount];
-
/* Quality information */
- double q[GNUNET_ATS_QualityPropertiesCount];
+ double q[GNUNET_ATS_QualityPropertiesCount][MLP_AVERAGING_QUEUE_LENGTH];
+
+ /* Quality information averaged */
+ double q_averaged[GNUNET_ATS_QualityPropertiesCount];
+
+ /* Averaging index */
+ int q_avg_i[GNUNET_ATS_QualityPropertiesCount];
};
float score);
+/**
+ * Get the preferred address for a specific peer
+ *
+ * @param mlp the MLP Handle
+ * @param addresses address hashmap
+ * @param peer the peer
+ * @return suggested address
+ */
+struct ATS_PreferedAddress *
+GAS_mlp_get_preferred_address (struct GAS_MLP_Handle *mlp,
+ struct GNUNET_CONTAINER_MultiHashMap * addresses,
+ const struct GNUNET_PeerIdentity *peer);
+
/**
* Shutdown the MLP problem solving component
*/