/*
This file is part of GNUnet.
- (C) 2011-2014 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2011-2014 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
/**
#include "gnunet-service-ats_performance.h"
#include "gnunet-service-ats_preferences.h"
#include "gnunet-service-ats_plugins.h"
+#include "gnunet-service-ats_reservations.h"
#include "gnunet-service-ats_scheduling.h"
#include "gnunet-service-ats_normalization.h"
* @param pref_rel the new relative preference value
*/
void
-GAS_normalized_preference_changed (const struct GNUNET_PeerIdentity *peer,
- enum GNUNET_ATS_PreferenceKind kind,
- double pref_rel)
+GAS_plugin_notify_preference_changed (const struct GNUNET_PeerIdentity *peer,
+ enum GNUNET_ATS_PreferenceKind kind,
+ double pref_rel)
{
sf->s_pref (sf->cls,
peer,
/**
- * The relative value for a property changed
+ * The relative value for a property changed.
*
- * @param address the peer
- * @param type the ATS type
- * @param prop_rel the new relative preference value
+ * @param address the peer for which a property changed
*/
void
-GAS_normalized_property_changed (struct ATS_Address *address,
- uint32_t type,
- double prop_rel)
+GAS_plugin_notify_property_changed (struct ATS_Address *address)
{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Normalized property %s for peer `%s' changed to %.3f \n",
- GNUNET_ATS_print_property_type (type),
- GNUNET_i2s (&address->peer),
- prop_rel);
sf->s_address_update_property (sf->cls,
- address,
- type,
- 0,
- prop_rel);
+ address);
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Solver notifies `%s' with result `%s'\n",
"GAS_OP_SOLVE_STOP",
- (GAS_STAT_SUCCESS == status) ? "SUCCESS" : "FAIL",
- add_info);
+ (GAS_STAT_SUCCESS == status) ? "SUCCESS" : "FAIL");
return;
case GAS_OP_SOLVE_SETUP_START:
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
(GAS_STAT_SUCCESS == status) ? "SUCCESS" : "FAIL");
return;
default:
+ GNUNET_break (0);
break;
}
}
bandwidth_changed_cb (void *cls,
struct ATS_Address *address)
{
- uint32_t diff_out;
- uint32_t diff_in;
+ long long diff_out;
+ long long diff_in;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Bandwidth assignment changed for peer %s \n",
- GNUNET_i2s (&address->peer));
-
+ "Bandwidth assignment changed for peer %s to %u/%u\n",
+ GNUNET_i2s (&address->peer),
+ (unsigned int) address->assigned_bw_in,
+ (unsigned int) address->assigned_bw_out);
+ GAS_reservations_set_bandwidth (&address->peer,
+ GNUNET_BANDWIDTH_value_init (address->assigned_bw_in));
/* Notify performance clients about changes to address */
GAS_performance_notify_all_clients (&address->peer,
address->plugin,
address->addr,
address->addr_len,
address->active,
- address->atsi,
- address->atsi_count,
+ &address->properties,
+ address->local_address_info,
GNUNET_BANDWIDTH_value_init (address->assigned_bw_out),
GNUNET_BANDWIDTH_value_init (address->assigned_bw_in));
if ( (0 == address->assigned_bw_in) &&
(0 == address->assigned_bw_out) )
{
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Telling transport to disconnect peer `%s'\n",
GNUNET_i2s (&address->peer));
}
/* Do bandwidth stability check */
- diff_out = abs (address->assigned_bw_out - address->last_notified_bw_out);
- diff_in = abs (address->assigned_bw_in - address->last_notified_bw_in);
-
- if ( (diff_out < htonl(GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT.value__)) &&
- (diff_in < htonl(GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT.value__)) )
+ diff_out = llabs ((long long) address->assigned_bw_out -
+ (long long) address->last_notified_bw_out);
+ diff_in = llabs ((long long) address->assigned_bw_in -
+ (long long) address->last_notified_bw_in);
+ if ( (diff_out < htonl (GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT.value__)) &&
+ (diff_in < htonl (GNUNET_CONSTANTS_DEFAULT_BW_IN_OUT.value__)) )
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Bandwidth change too small, not notifying client\n");
return;
+ }
- GNUNET_log(GNUNET_ERROR_TYPE_INFO,
- "Sending bandwidth update for peer `%s': %u/%u\n",
- GNUNET_i2s (&address->peer),
- address->assigned_bw_out,
- address->assigned_bw_out);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Sending bandwidth update for peer `%s': %u/%u\n",
+ GNUNET_i2s (&address->peer),
+ address->assigned_bw_out,
+ address->assigned_bw_out);
/* *Notify scheduling clients about suggestion */
GAS_scheduling_transmit_address_suggestion (&address->peer,
direction,
GNUNET_ATS_print_network_type (network),
quota_str,
- GNUNET_ATS_DefaultBandwidth);
+ (unsigned long long) GNUNET_ATS_DefaultBandwidth);
ret = GNUNET_ATS_DefaultBandwidth;
}
else
_("No %s-quota configured for network `%s', assigning default bandwidth %llu\n"),
direction,
GNUNET_ATS_print_network_type (type),
- GNUNET_ATS_DefaultBandwidth);
+ (unsigned long long) GNUNET_ATS_DefaultBandwidth);
ret = GNUNET_ATS_DefaultBandwidth;
}
GNUNET_free (entry);
* solver plugin)
*/
int
-GAS_plugins_init (const struct GNUNET_CONFIGURATION_Handle *cfg)
+GAS_plugin_init (const struct GNUNET_CONFIGURATION_Handle *cfg)
{
- unsigned long long quotas_in[GNUNET_ATS_NetworkTypeCount];
- unsigned long long quotas_out[GNUNET_ATS_NetworkTypeCount];
char *mode_str;
- unsigned int c;
/* Figure out configured solution method */
if (GNUNET_SYSERR ==
env.cls = NULL;
env.info_cb = &solver_info_cb;
env.bandwidth_changed_cb = &bandwidth_changed_cb;
- env.get_preferences = &GAS_normalization_get_preferences_by_peer;
- env.get_property = &GAS_normalization_get_properties;
+ env.get_preferences = &GAS_preference_get_by_peer;
+ env.get_connectivity = &GAS_connectivity_has_peer;
env.cfg = cfg;
env.stats = GSA_stats;
env.addresses = GSA_addresses;
env.out_quota,
env.in_quota,
GNUNET_ATS_NetworkTypeCount);
-
GNUNET_asprintf (&plugin,
"libgnunet_plugin_ats_%s",
mode_str);
* Shutdown address subsystem.
*/
void
-GAS_plugins_done ()
+GAS_plugin_done ()
{
GNUNET_PLUGIN_unload (plugin,
sf);
* for talking to the respective peer.
*
* @param new_address the new address
- * @param addr_net network scope the address is in
- * @param atsi performance data for the address
- * @param atsi_count size of the @a atsi array
*/
void
-GAS_plugin_new_address (struct ATS_Address *new_address,
- enum GNUNET_ATS_Network_Type addr_net,
- const struct GNUNET_ATS_Information *atsi,
- uint32_t atsi_count)
+GAS_plugin_new_address (struct ATS_Address *new_address)
{
sf->s_add (sf->cls,
new_address,
- addr_net);
- sf->s_bulk_start (sf->cls);
- GAS_normalization_normalize_property (new_address,
- atsi,
- atsi_count);
- sf->s_bulk_stop (sf->cls);
+ new_address->properties.scope); /* FIXME: remove 3rd arg here! */
}
GAS_plugin_delete_address (struct ATS_Address *address)
{
sf->s_del (sf->cls,
- address,
- GNUNET_NO);
+ address);
}
* @param score_abs degree of the appreciation
*/
void
-GAS_plugin_preference_feedback (struct GNUNET_SERVER_Client *application,
- const struct GNUNET_PeerIdentity *peer,
- const struct GNUNET_TIME_Relative scope,
- enum GNUNET_ATS_PreferenceKind kind,
- float score_abs)
+GAS_plugin_notify_feedback (struct GNUNET_SERVER_Client *application,
+ const struct GNUNET_PeerIdentity *peer,
+ const struct GNUNET_TIME_Relative scope,
+ enum GNUNET_ATS_PreferenceKind kind,
+ float score_abs)
{
sf->s_feedback (sf->cls,
application,
void
GAS_plugin_solver_unlock ()
{
- sf->s_bulk_start (sf->cls);
+ sf->s_bulk_stop (sf->cls);
}
void
GAS_plugin_request_connect_start (const struct GNUNET_PeerIdentity *pid)
{
- const struct ATS_Address *aa;
-
- aa = sf->s_get (sf->cls, pid);
- if (NULL == aa)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Cannot suggest address for peer `%s'\n",
- GNUNET_i2s (pid));
- return;
- }
- GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
- "Suggesting address %p for peer `%s'\n",
- aa,
- GNUNET_i2s (pid));
- GAS_scheduling_transmit_address_suggestion (pid,
- aa->session_id,
- GNUNET_BANDWIDTH_value_init (aa->assigned_bw_out),
- GNUNET_BANDWIDTH_value_init (aa->assigned_bw_in));
+ sf->s_get (sf->cls,
+ pid);
}