aboutsummaryrefslogtreecommitdiff
path: root/src/util/bandwidth.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-10-11 09:43:04 +0000
committerChristian Grothoff <christian@grothoff.org>2011-10-11 09:43:04 +0000
commitd9d94d0e53d26af75ec8241383d166544ebd79f3 (patch)
tree9080b73624389403a198257fe0547bb4634e64d2 /src/util/bandwidth.c
parent2d792ee2e9cc0c993b8907e2c8edb0c2b8465343 (diff)
downloadgnunet-d9d94d0e53d26af75ec8241383d166544ebd79f3.tar.gz
gnunet-d9d94d0e53d26af75ec8241383d166544ebd79f3.zip
converting to GNUNET_LOG_from*
Diffstat (limited to 'src/util/bandwidth.c')
-rw-r--r--src/util/bandwidth.c184
1 files changed, 93 insertions, 91 deletions
diff --git a/src/util/bandwidth.c b/src/util/bandwidth.c
index c0ac54054..ceac4d87b 100644
--- a/src/util/bandwidth.c
+++ b/src/util/bandwidth.c
@@ -29,6 +29,8 @@
29 29
30#define DEBUG_BANDWIDTH GNUNET_EXTRA_LOGGING 30#define DEBUG_BANDWIDTH GNUNET_EXTRA_LOGGING
31 31
32#define LOG(kind,...) GNUNET_log_from (kind, "util",__VA_ARGS__)
33
32/** 34/**
33 * Create a new bandwidth value. 35 * Create a new bandwidth value.
34 * 36 *
@@ -41,8 +43,8 @@ GNUNET_BANDWIDTH_value_init (uint32_t bytes_per_second)
41 struct GNUNET_BANDWIDTH_Value32NBO ret; 43 struct GNUNET_BANDWIDTH_Value32NBO ret;
42 44
43#if DEBUG_BANDWIDTH 45#if DEBUG_BANDWIDTH
44 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Initializing bandwidth of %u Bps\n", 46 LOG (GNUNET_ERROR_TYPE_DEBUG, "Initializing bandwidth of %u Bps\n",
45 (unsigned int) bytes_per_second); 47 (unsigned int) bytes_per_second);
46#endif 48#endif
47 ret.value__ = htonl (bytes_per_second); 49 ret.value__ = htonl (bytes_per_second);
48 return ret; 50 return ret;
@@ -58,11 +60,11 @@ GNUNET_BANDWIDTH_value_init (uint32_t bytes_per_second)
58 */ 60 */
59struct GNUNET_BANDWIDTH_Value32NBO 61struct GNUNET_BANDWIDTH_Value32NBO
60GNUNET_BANDWIDTH_value_min (struct GNUNET_BANDWIDTH_Value32NBO b1, 62GNUNET_BANDWIDTH_value_min (struct GNUNET_BANDWIDTH_Value32NBO b1,
61 struct GNUNET_BANDWIDTH_Value32NBO b2) 63 struct GNUNET_BANDWIDTH_Value32NBO b2)
62{ 64{
63 return 65 return
64 GNUNET_BANDWIDTH_value_init (GNUNET_MIN 66 GNUNET_BANDWIDTH_value_init (GNUNET_MIN
65 (ntohl (b1.value__), ntohl (b2.value__))); 67 (ntohl (b1.value__), ntohl (b2.value__)));
66} 68}
67 69
68 70
@@ -76,18 +78,18 @@ GNUNET_BANDWIDTH_value_min (struct GNUNET_BANDWIDTH_Value32NBO b1,
76 */ 78 */
77uint64_t 79uint64_t
78GNUNET_BANDWIDTH_value_get_available_until (struct GNUNET_BANDWIDTH_Value32NBO 80GNUNET_BANDWIDTH_value_get_available_until (struct GNUNET_BANDWIDTH_Value32NBO
79 bps, 81 bps,
80 struct GNUNET_TIME_Relative 82 struct GNUNET_TIME_Relative
81 deadline) 83 deadline)
82{ 84{
83 uint64_t b; 85 uint64_t b;
84 86
85 b = ntohl (bps.value__); 87 b = ntohl (bps.value__);
86#if DEBUG_BANDWIDTH 88#if DEBUG_BANDWIDTH
87 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 89 LOG (GNUNET_ERROR_TYPE_DEBUG,
88 "Bandwidth has %llu bytes available until deadline in %llums\n", 90 "Bandwidth has %llu bytes available until deadline in %llums\n",
89 (unsigned long long) ((b * deadline.rel_value + 500LL) / 1000LL), 91 (unsigned long long) ((b * deadline.rel_value + 500LL) / 1000LL),
90 deadline.rel_value); 92 deadline.rel_value);
91#endif 93#endif
92 return (b * deadline.rel_value + 500LL) / 1000LL; 94 return (b * deadline.rel_value + 500LL) / 1000LL;
93} 95}
@@ -103,25 +105,25 @@ GNUNET_BANDWIDTH_value_get_available_until (struct GNUNET_BANDWIDTH_Value32NBO
103 */ 105 */
104struct GNUNET_TIME_Relative 106struct GNUNET_TIME_Relative
105GNUNET_BANDWIDTH_value_get_delay_for (struct GNUNET_BANDWIDTH_Value32NBO bps, 107GNUNET_BANDWIDTH_value_get_delay_for (struct GNUNET_BANDWIDTH_Value32NBO bps,
106 uint64_t size) 108 uint64_t size)
107{ 109{
108 uint64_t b; 110 uint64_t b;
109 struct GNUNET_TIME_Relative ret; 111 struct GNUNET_TIME_Relative ret;
110 112
111 b = ntohl (bps.value__); 113 b = ntohl (bps.value__);
112 if (b == 0) 114 if (b == 0)
113 { 115 {
114#if DEBUG_BANDWIDTH 116#if DEBUG_BANDWIDTH
115 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 117 LOG (GNUNET_ERROR_TYPE_DEBUG,
116 "Bandwidth suggests delay of infinity (zero bandwidth)\n"); 118 "Bandwidth suggests delay of infinity (zero bandwidth)\n");
117#endif 119#endif
118 return GNUNET_TIME_UNIT_FOREVER_REL; 120 return GNUNET_TIME_UNIT_FOREVER_REL;
119 } 121 }
120 ret.rel_value = size * 1000LL / b; 122 ret.rel_value = size * 1000LL / b;
121#if DEBUG_BANDWIDTH 123#if DEBUG_BANDWIDTH
122 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 124 LOG (GNUNET_ERROR_TYPE_DEBUG,
123 "Bandwidth suggests delay of %llu ms for %llu bytes of traffic\n", 125 "Bandwidth suggests delay of %llu ms for %llu bytes of traffic\n",
124 (unsigned long long) ret.rel_value, (unsigned long long) size); 126 (unsigned long long) ret.rel_value, (unsigned long long) size);
125#endif 127#endif
126 return ret; 128 return ret;
127} 129}
@@ -143,18 +145,18 @@ GNUNET_BANDWIDTH_value_get_delay_for (struct GNUNET_BANDWIDTH_Value32NBO bps,
143 */ 145 */
144void 146void
145GNUNET_BANDWIDTH_tracker_init (struct GNUNET_BANDWIDTH_Tracker *av, 147GNUNET_BANDWIDTH_tracker_init (struct GNUNET_BANDWIDTH_Tracker *av,
146 struct GNUNET_BANDWIDTH_Value32NBO 148 struct GNUNET_BANDWIDTH_Value32NBO
147 bytes_per_second_limit, uint32_t max_carry_s) 149 bytes_per_second_limit, uint32_t max_carry_s)
148{ 150{
149 av->consumption_since_last_update__ = 0; 151 av->consumption_since_last_update__ = 0;
150 av->last_update__ = GNUNET_TIME_absolute_get (); 152 av->last_update__ = GNUNET_TIME_absolute_get ();
151 av->available_bytes_per_s__ = ntohl (bytes_per_second_limit.value__); 153 av->available_bytes_per_s__ = ntohl (bytes_per_second_limit.value__);
152 av->max_carry_s__ = max_carry_s; 154 av->max_carry_s__ = max_carry_s;
153#if DEBUG_BANDWIDTH 155#if DEBUG_BANDWIDTH
154 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 156 LOG (GNUNET_ERROR_TYPE_DEBUG,
155 "Tracker %p initialized with %u Bps and max carry %u\n", av, 157 "Tracker %p initialized with %u Bps and max carry %u\n", av,
156 (unsigned int) av->available_bytes_per_s__, 158 (unsigned int) av->available_bytes_per_s__,
157 (unsigned int) max_carry_s); 159 (unsigned int) max_carry_s);
158#endif 160#endif
159} 161}
160 162
@@ -177,26 +179,26 @@ update_tracker (struct GNUNET_BANDWIDTH_Tracker *av)
177 now = GNUNET_TIME_absolute_get (); 179 now = GNUNET_TIME_absolute_get ();
178 delta_time = now.abs_value - av->last_update__.abs_value; 180 delta_time = now.abs_value - av->last_update__.abs_value;
179 delta_avail = 181 delta_avail =
180 (delta_time * ((unsigned long long) av->available_bytes_per_s__) + 182 (delta_time * ((unsigned long long) av->available_bytes_per_s__) +
181 500LL) / 1000LL; 183 500LL) / 1000LL;
182 av->consumption_since_last_update__ -= delta_avail; 184 av->consumption_since_last_update__ -= delta_avail;
183 av->last_update__ = now; 185 av->last_update__ = now;
184 if (av->consumption_since_last_update__ < 0) 186 if (av->consumption_since_last_update__ < 0)
185 { 187 {
186 left_bytes = -av->consumption_since_last_update__; 188 left_bytes = -av->consumption_since_last_update__;
187 max_carry = av->available_bytes_per_s__ * av->max_carry_s__; 189 max_carry = av->available_bytes_per_s__ * av->max_carry_s__;
188 if (max_carry < GNUNET_SERVER_MAX_MESSAGE_SIZE) 190 if (max_carry < GNUNET_SERVER_MAX_MESSAGE_SIZE)
189 max_carry = GNUNET_SERVER_MAX_MESSAGE_SIZE; 191 max_carry = GNUNET_SERVER_MAX_MESSAGE_SIZE;
190 if (max_carry > left_bytes) 192 if (max_carry > left_bytes)
191 av->consumption_since_last_update__ = -left_bytes; 193 av->consumption_since_last_update__ = -left_bytes;
192 else 194 else
193 av->consumption_since_last_update__ = -max_carry; 195 av->consumption_since_last_update__ = -max_carry;
194 } 196 }
195#if DEBUG_BANDWIDTH 197#if DEBUG_BANDWIDTH
196 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 198 LOG (GNUNET_ERROR_TYPE_DEBUG,
197 "Tracker %p updated, have %u Bps, last update was %llu ms ago\n", 199 "Tracker %p updated, have %u Bps, last update was %llu ms ago\n",
198 av, (unsigned int) av->available_bytes_per_s__, 200 av, (unsigned int) av->available_bytes_per_s__,
199 (unsigned long long) delta_time); 201 (unsigned long long) delta_time);
200#endif 202#endif
201 203
202} 204}
@@ -215,38 +217,38 @@ update_tracker (struct GNUNET_BANDWIDTH_Tracker *av)
215 */ 217 */
216int 218int
217GNUNET_BANDWIDTH_tracker_consume (struct GNUNET_BANDWIDTH_Tracker *av, 219GNUNET_BANDWIDTH_tracker_consume (struct GNUNET_BANDWIDTH_Tracker *av,
218 ssize_t size) 220 ssize_t size)
219{ 221{
220 int64_t nc; 222 int64_t nc;
221 223
222#if DEBUG_BANDWIDTH 224#if DEBUG_BANDWIDTH
223 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p consumes %d bytes\n", av, 225 LOG (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p consumes %d bytes\n", av,
224 (int) size); 226 (int) size);
225#endif 227#endif
226 if (size > 0) 228 if (size > 0)
227 {
228 nc = av->consumption_since_last_update__ + size;
229 if (nc < av->consumption_since_last_update__)
230 {
231 GNUNET_break (0);
232 return GNUNET_SYSERR;
233 }
234 av->consumption_since_last_update__ = nc;
235 update_tracker (av);
236 if (av->consumption_since_last_update__ > 0)
237 { 229 {
230 nc = av->consumption_since_last_update__ + size;
231 if (nc < av->consumption_since_last_update__)
232 {
233 GNUNET_break (0);
234 return GNUNET_SYSERR;
235 }
236 av->consumption_since_last_update__ = nc;
237 update_tracker (av);
238 if (av->consumption_since_last_update__ > 0)
239 {
238#if DEBUG_BANDWIDTH 240#if DEBUG_BANDWIDTH
239 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 241 LOG (GNUNET_ERROR_TYPE_DEBUG,
240 "Tracker %p consumption %llu bytes above limit\n", av, 242 "Tracker %p consumption %llu bytes above limit\n", av,
241 (unsigned long long) av->consumption_since_last_update__); 243 (unsigned long long) av->consumption_since_last_update__);
242#endif 244#endif
243 return GNUNET_YES; 245 return GNUNET_YES;
246 }
244 } 247 }
245 }
246 else 248 else
247 { 249 {
248 av->consumption_since_last_update__ += size; 250 av->consumption_since_last_update__ += size;
249 } 251 }
250 return GNUNET_NO; 252 return GNUNET_NO;
251} 253}
252 254
@@ -262,35 +264,35 @@ GNUNET_BANDWIDTH_tracker_consume (struct GNUNET_BANDWIDTH_Tracker *av,
262 */ 264 */
263struct GNUNET_TIME_Relative 265struct GNUNET_TIME_Relative
264GNUNET_BANDWIDTH_tracker_get_delay (struct GNUNET_BANDWIDTH_Tracker *av, 266GNUNET_BANDWIDTH_tracker_get_delay (struct GNUNET_BANDWIDTH_Tracker *av,
265 size_t size) 267 size_t size)
266{ 268{
267 struct GNUNET_TIME_Relative ret; 269 struct GNUNET_TIME_Relative ret;
268 int64_t bytes_needed; 270 int64_t bytes_needed;
269 271
270 if (av->available_bytes_per_s__ == 0) 272 if (av->available_bytes_per_s__ == 0)
271 { 273 {
272#if DEBUG_BANDWIDTH 274#if DEBUG_BANDWIDTH
273 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p delay is infinity\n", av); 275 LOG (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p delay is infinity\n", av);
274#endif 276#endif
275 return GNUNET_TIME_UNIT_FOREVER_REL; 277 return GNUNET_TIME_UNIT_FOREVER_REL;
276 } 278 }
277 update_tracker (av); 279 update_tracker (av);
278 bytes_needed = size + av->consumption_since_last_update__; 280 bytes_needed = size + av->consumption_since_last_update__;
279 if (bytes_needed <= 0) 281 if (bytes_needed <= 0)
280 { 282 {
281#if DEBUG_BANDWIDTH 283#if DEBUG_BANDWIDTH
282 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 284 LOG (GNUNET_ERROR_TYPE_DEBUG,
283 "Tracker %p delay for %u bytes is zero\n", av, 285 "Tracker %p delay for %u bytes is zero\n", av,
284 (unsigned int) size); 286 (unsigned int) size);
285#endif 287#endif
286 return GNUNET_TIME_UNIT_ZERO; 288 return GNUNET_TIME_UNIT_ZERO;
287 } 289 }
288 ret.rel_value = 290 ret.rel_value =
289 1000LL * bytes_needed / (unsigned long long) av->available_bytes_per_s__; 291 1000LL * bytes_needed / (unsigned long long) av->available_bytes_per_s__;
290#if DEBUG_BANDWIDTH 292#if DEBUG_BANDWIDTH
291 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 293 LOG (GNUNET_ERROR_TYPE_DEBUG,
292 "Tracker %p delay for %u bytes is %llu ms\n", av, 294 "Tracker %p delay for %u bytes is %llu ms\n", av,
293 (unsigned int) size, (unsigned long long) ret.rel_value); 295 (unsigned int) size, (unsigned long long) ret.rel_value);
294#endif 296#endif
295 return ret; 297 return ret;
296} 298}
@@ -313,14 +315,14 @@ GNUNET_BANDWIDTH_tracker_get_available (struct GNUNET_BANDWIDTH_Tracker * av)
313 update_tracker (av); 315 update_tracker (av);
314 bps = GNUNET_BANDWIDTH_value_init (av->available_bytes_per_s__); 316 bps = GNUNET_BANDWIDTH_value_init (av->available_bytes_per_s__);
315 avail = 317 avail =
316 GNUNET_BANDWIDTH_value_get_available_until (bps, 318 GNUNET_BANDWIDTH_value_get_available_until (bps,
317 GNUNET_TIME_absolute_get_duration 319 GNUNET_TIME_absolute_get_duration
318 (av->last_update__)); 320 (av->last_update__));
319 used = av->consumption_since_last_update__; 321 used = av->consumption_since_last_update__;
320#if DEBUG_BANDWIDTH 322#if DEBUG_BANDWIDTH
321 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 323 LOG (GNUNET_ERROR_TYPE_DEBUG,
322 "Tracker %p available bandwidth is %lld bytes\n", av, 324 "Tracker %p available bandwidth is %lld bytes\n", av,
323 (long long) (int64_t) (avail - used)); 325 (long long) (int64_t) (avail - used));
324#endif 326#endif
325 return (int64_t) (avail - used); 327 return (int64_t) (avail - used);
326} 328}
@@ -334,23 +336,23 @@ GNUNET_BANDWIDTH_tracker_get_available (struct GNUNET_BANDWIDTH_Tracker * av)
334 */ 336 */
335void 337void
336GNUNET_BANDWIDTH_tracker_update_quota (struct GNUNET_BANDWIDTH_Tracker *av, 338GNUNET_BANDWIDTH_tracker_update_quota (struct GNUNET_BANDWIDTH_Tracker *av,
337 struct GNUNET_BANDWIDTH_Value32NBO 339 struct GNUNET_BANDWIDTH_Value32NBO
338 bytes_per_second_limit) 340 bytes_per_second_limit)
339{ 341{
340 uint32_t old_limit; 342 uint32_t old_limit;
341 uint32_t new_limit; 343 uint32_t new_limit;
342 344
343 new_limit = ntohl (bytes_per_second_limit.value__); 345 new_limit = ntohl (bytes_per_second_limit.value__);
344#if DEBUG_BANDWIDTH 346#if DEBUG_BANDWIDTH
345 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 347 LOG (GNUNET_ERROR_TYPE_DEBUG,
346 "Tracker %p bandwidth changed to %u Bps\n", av, 348 "Tracker %p bandwidth changed to %u Bps\n", av,
347 (unsigned int) new_limit); 349 (unsigned int) new_limit);
348#endif 350#endif
349 update_tracker (av); 351 update_tracker (av);
350 old_limit = av->available_bytes_per_s__; 352 old_limit = av->available_bytes_per_s__;
351 av->available_bytes_per_s__ = new_limit; 353 av->available_bytes_per_s__ = new_limit;
352 if (old_limit > new_limit) 354 if (old_limit > new_limit)
353 update_tracker (av); /* maximum excess might be less now */ 355 update_tracker (av); /* maximum excess might be less now */
354} 356}
355 357
356 358