X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fbandwidth.c;h=60cb50529f316d7a3dfcf085b286025cb6cb5fbb;hb=72c8645af31896829b674b575c5375706f362a30;hp=a736b7607ee04d8af466c79712a3f226283b4c1c;hpb=24bd0eabe9599e8c3da2f86aeed49ba53d52816a;p=oweals%2Fgnunet.git diff --git a/src/util/bandwidth.c b/src/util/bandwidth.c index a736b7607..60cb50529 100644 --- a/src/util/bandwidth.c +++ b/src/util/bandwidth.c @@ -24,12 +24,10 @@ * @author Christian Grothoff */ #include "platform.h" -#include "gnunet_bandwidth_lib.h" -#include "gnunet_server_lib.h" +#include "gnunet_util_lib.h" -#define DEBUG_BANDWIDTH GNUNET_EXTRA_LOGGING -#define LOG(kind,...) GNUNET_log_from (kind, "util",__VA_ARGS__) +#define LOG(kind,...) GNUNET_log_from (kind, "util-bandwidth", __VA_ARGS__) /** * Create a new bandwidth value. @@ -42,10 +40,8 @@ GNUNET_BANDWIDTH_value_init (uint32_t bytes_per_second) { struct GNUNET_BANDWIDTH_Value32NBO ret; -#if DEBUG_BANDWIDTH LOG (GNUNET_ERROR_TYPE_DEBUG, "Initializing bandwidth of %u Bps\n", (unsigned int) bytes_per_second); -#endif ret.value__ = htonl (bytes_per_second); return ret; } @@ -60,11 +56,11 @@ GNUNET_BANDWIDTH_value_init (uint32_t bytes_per_second) */ struct GNUNET_BANDWIDTH_Value32NBO GNUNET_BANDWIDTH_value_min (struct GNUNET_BANDWIDTH_Value32NBO b1, - struct GNUNET_BANDWIDTH_Value32NBO b2) + struct GNUNET_BANDWIDTH_Value32NBO b2) { return - GNUNET_BANDWIDTH_value_init (GNUNET_MIN - (ntohl (b1.value__), ntohl (b2.value__))); + GNUNET_BANDWIDTH_value_init (GNUNET_MIN + (ntohl (b1.value__), ntohl (b2.value__))); } @@ -78,19 +74,17 @@ GNUNET_BANDWIDTH_value_min (struct GNUNET_BANDWIDTH_Value32NBO b1, */ uint64_t GNUNET_BANDWIDTH_value_get_available_until (struct GNUNET_BANDWIDTH_Value32NBO - bps, - struct GNUNET_TIME_Relative - deadline) + bps, + struct GNUNET_TIME_Relative + deadline) { uint64_t b; b = ntohl (bps.value__); -#if DEBUG_BANDWIDTH LOG (GNUNET_ERROR_TYPE_DEBUG, - "Bandwidth has %llu bytes available until deadline in %llums\n", + "Bandwidth has %llu bytes available until deadline in %s\n", (unsigned long long) ((b * deadline.rel_value + 500LL) / 1000LL), - deadline.rel_value); -#endif + GNUNET_STRINGS_relative_time_to_string (deadline, GNUNET_YES)); return (b * deadline.rel_value + 500LL) / 1000LL; } @@ -105,26 +99,22 @@ GNUNET_BANDWIDTH_value_get_available_until (struct GNUNET_BANDWIDTH_Value32NBO */ struct GNUNET_TIME_Relative GNUNET_BANDWIDTH_value_get_delay_for (struct GNUNET_BANDWIDTH_Value32NBO bps, - uint64_t size) + uint64_t size) { uint64_t b; struct GNUNET_TIME_Relative ret; b = ntohl (bps.value__); if (b == 0) - { -#if DEBUG_BANDWIDTH - LOG (GNUNET_ERROR_TYPE_DEBUG, - "Bandwidth suggests delay of infinity (zero bandwidth)\n"); -#endif - return GNUNET_TIME_UNIT_FOREVER_REL; - } + { + LOG (GNUNET_ERROR_TYPE_DEBUG, + "Bandwidth suggests delay of infinity (zero bandwidth)\n"); + return GNUNET_TIME_UNIT_FOREVER_REL; + } ret.rel_value = size * 1000LL / b; -#if DEBUG_BANDWIDTH LOG (GNUNET_ERROR_TYPE_DEBUG, "Bandwidth suggests delay of %llu ms for %llu bytes of traffic\n", (unsigned long long) ret.rel_value, (unsigned long long) size); -#endif return ret; } @@ -145,19 +135,16 @@ GNUNET_BANDWIDTH_value_get_delay_for (struct GNUNET_BANDWIDTH_Value32NBO bps, */ void GNUNET_BANDWIDTH_tracker_init (struct GNUNET_BANDWIDTH_Tracker *av, - struct GNUNET_BANDWIDTH_Value32NBO - bytes_per_second_limit, uint32_t max_carry_s) + struct GNUNET_BANDWIDTH_Value32NBO + bytes_per_second_limit, uint32_t max_carry_s) { av->consumption_since_last_update__ = 0; av->last_update__ = GNUNET_TIME_absolute_get (); av->available_bytes_per_s__ = ntohl (bytes_per_second_limit.value__); av->max_carry_s__ = max_carry_s; -#if DEBUG_BANDWIDTH LOG (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p initialized with %u Bps and max carry %u\n", av, - (unsigned int) av->available_bytes_per_s__, - (unsigned int) max_carry_s); -#endif + (unsigned int) av->available_bytes_per_s__, (unsigned int) max_carry_s); } @@ -179,28 +166,25 @@ update_tracker (struct GNUNET_BANDWIDTH_Tracker *av) now = GNUNET_TIME_absolute_get (); delta_time = now.abs_value - av->last_update__.abs_value; delta_avail = - (delta_time * ((unsigned long long) av->available_bytes_per_s__) + - 500LL) / 1000LL; + (delta_time * ((unsigned long long) av->available_bytes_per_s__) + + 500LL) / 1000LL; av->consumption_since_last_update__ -= delta_avail; av->last_update__ = now; if (av->consumption_since_last_update__ < 0) - { - left_bytes = -av->consumption_since_last_update__; - max_carry = av->available_bytes_per_s__ * av->max_carry_s__; - if (max_carry < GNUNET_SERVER_MAX_MESSAGE_SIZE) - max_carry = GNUNET_SERVER_MAX_MESSAGE_SIZE; - if (max_carry > left_bytes) - av->consumption_since_last_update__ = -left_bytes; - else - av->consumption_since_last_update__ = -max_carry; - } -#if DEBUG_BANDWIDTH + { + left_bytes = -av->consumption_since_last_update__; + max_carry = av->available_bytes_per_s__ * av->max_carry_s__; + if (max_carry < GNUNET_SERVER_MAX_MESSAGE_SIZE) + max_carry = GNUNET_SERVER_MAX_MESSAGE_SIZE; + if (max_carry > left_bytes) + av->consumption_since_last_update__ = -left_bytes; + else + av->consumption_since_last_update__ = -max_carry; + } LOG (GNUNET_ERROR_TYPE_DEBUG, - "Tracker %p updated, have %u Bps, last update was %llu ms ago\n", - av, (unsigned int) av->available_bytes_per_s__, + "Tracker %p updated, have %u Bps, last update was %llu ms ago\n", av, + (unsigned int) av->available_bytes_per_s__, (unsigned long long) delta_time); -#endif - } @@ -217,38 +201,34 @@ update_tracker (struct GNUNET_BANDWIDTH_Tracker *av) */ int GNUNET_BANDWIDTH_tracker_consume (struct GNUNET_BANDWIDTH_Tracker *av, - ssize_t size) + ssize_t size) { int64_t nc; -#if DEBUG_BANDWIDTH LOG (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p consumes %d bytes\n", av, (int) size); -#endif if (size > 0) + { + nc = av->consumption_since_last_update__ + size; + if (nc < av->consumption_since_last_update__) { - nc = av->consumption_since_last_update__ + size; - if (nc < av->consumption_since_last_update__) - { - GNUNET_break (0); - return GNUNET_SYSERR; - } - av->consumption_since_last_update__ = nc; - update_tracker (av); - if (av->consumption_since_last_update__ > 0) - { -#if DEBUG_BANDWIDTH - LOG (GNUNET_ERROR_TYPE_DEBUG, - "Tracker %p consumption %llu bytes above limit\n", av, - (unsigned long long) av->consumption_since_last_update__); -#endif - return GNUNET_YES; - } + GNUNET_break (0); + return GNUNET_SYSERR; } - else + av->consumption_since_last_update__ = nc; + update_tracker (av); + if (av->consumption_since_last_update__ > 0) { - av->consumption_since_last_update__ += size; + LOG (GNUNET_ERROR_TYPE_DEBUG, + "Tracker %p consumption %llu bytes above limit\n", av, + (unsigned long long) av->consumption_since_last_update__); + return GNUNET_YES; } + } + else + { + av->consumption_since_last_update__ += size; + } return GNUNET_NO; } @@ -264,36 +244,29 @@ GNUNET_BANDWIDTH_tracker_consume (struct GNUNET_BANDWIDTH_Tracker *av, */ struct GNUNET_TIME_Relative GNUNET_BANDWIDTH_tracker_get_delay (struct GNUNET_BANDWIDTH_Tracker *av, - size_t size) + size_t size) { struct GNUNET_TIME_Relative ret; int64_t bytes_needed; if (av->available_bytes_per_s__ == 0) - { -#if DEBUG_BANDWIDTH - LOG (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p delay is infinity\n", av); -#endif - return GNUNET_TIME_UNIT_FOREVER_REL; - } + { + LOG (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p delay is infinity\n", av); + return GNUNET_TIME_UNIT_FOREVER_REL; + } update_tracker (av); bytes_needed = size + av->consumption_since_last_update__; if (bytes_needed <= 0) - { -#if DEBUG_BANDWIDTH - LOG (GNUNET_ERROR_TYPE_DEBUG, - "Tracker %p delay for %u bytes is zero\n", av, - (unsigned int) size); -#endif - return GNUNET_TIME_UNIT_ZERO; - } + { + LOG (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p delay for %u bytes is zero\n", av, + (unsigned int) size); + return GNUNET_TIME_UNIT_ZERO; + } ret.rel_value = - (1000LL * bytes_needed) / (unsigned long long) av->available_bytes_per_s__; -#if DEBUG_BANDWIDTH - LOG (GNUNET_ERROR_TYPE_DEBUG, - "Tracker %p delay for %u bytes is %llu ms\n", av, - (unsigned int) size, (unsigned long long) ret.rel_value); -#endif + (1000LL * bytes_needed) / + (unsigned long long) av->available_bytes_per_s__; + LOG (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p delay for %u bytes is %llu ms\n", + av, (unsigned int) size, (unsigned long long) ret.rel_value); return ret; } @@ -315,15 +288,13 @@ GNUNET_BANDWIDTH_tracker_get_available (struct GNUNET_BANDWIDTH_Tracker * av) update_tracker (av); bps = GNUNET_BANDWIDTH_value_init (av->available_bytes_per_s__); avail = - GNUNET_BANDWIDTH_value_get_available_until (bps, - GNUNET_TIME_absolute_get_duration - (av->last_update__)); + GNUNET_BANDWIDTH_value_get_available_until (bps, + GNUNET_TIME_absolute_get_duration + (av->last_update__)); used = av->consumption_since_last_update__; -#if DEBUG_BANDWIDTH LOG (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p available bandwidth is %lld bytes\n", av, (long long) (int64_t) (avail - used)); -#endif return (int64_t) (avail - used); } @@ -336,23 +307,20 @@ GNUNET_BANDWIDTH_tracker_get_available (struct GNUNET_BANDWIDTH_Tracker * av) */ void GNUNET_BANDWIDTH_tracker_update_quota (struct GNUNET_BANDWIDTH_Tracker *av, - struct GNUNET_BANDWIDTH_Value32NBO - bytes_per_second_limit) + struct GNUNET_BANDWIDTH_Value32NBO + bytes_per_second_limit) { uint32_t old_limit; uint32_t new_limit; new_limit = ntohl (bytes_per_second_limit.value__); -#if DEBUG_BANDWIDTH - LOG (GNUNET_ERROR_TYPE_DEBUG, - "Tracker %p bandwidth changed to %u Bps\n", av, + LOG (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p bandwidth changed to %u Bps\n", av, (unsigned int) new_limit); -#endif update_tracker (av); old_limit = av->available_bytes_per_s__; av->available_bytes_per_s__ = new_limit; if (old_limit > new_limit) - update_tracker (av); /* maximum excess might be less now */ + update_tracker (av); /* maximum excess might be less now */ }