diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-10-11 09:43:04 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-10-11 09:43:04 +0000 |
commit | d9d94d0e53d26af75ec8241383d166544ebd79f3 (patch) | |
tree | 9080b73624389403a198257fe0547bb4634e64d2 /src/util/bandwidth.c | |
parent | 2d792ee2e9cc0c993b8907e2c8edb0c2b8465343 (diff) | |
download | gnunet-d9d94d0e53d26af75ec8241383d166544ebd79f3.tar.gz gnunet-d9d94d0e53d26af75ec8241383d166544ebd79f3.zip |
converting to GNUNET_LOG_from*
Diffstat (limited to 'src/util/bandwidth.c')
-rw-r--r-- | src/util/bandwidth.c | 184 |
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 | */ |
59 | struct GNUNET_BANDWIDTH_Value32NBO | 61 | struct GNUNET_BANDWIDTH_Value32NBO |
60 | GNUNET_BANDWIDTH_value_min (struct GNUNET_BANDWIDTH_Value32NBO b1, | 62 | GNUNET_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 | */ |
77 | uint64_t | 79 | uint64_t |
78 | GNUNET_BANDWIDTH_value_get_available_until (struct GNUNET_BANDWIDTH_Value32NBO | 80 | GNUNET_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 | */ |
104 | struct GNUNET_TIME_Relative | 106 | struct GNUNET_TIME_Relative |
105 | GNUNET_BANDWIDTH_value_get_delay_for (struct GNUNET_BANDWIDTH_Value32NBO bps, | 107 | GNUNET_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 | */ |
144 | void | 146 | void |
145 | GNUNET_BANDWIDTH_tracker_init (struct GNUNET_BANDWIDTH_Tracker *av, | 147 | GNUNET_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 | */ |
216 | int | 218 | int |
217 | GNUNET_BANDWIDTH_tracker_consume (struct GNUNET_BANDWIDTH_Tracker *av, | 219 | GNUNET_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 | */ |
263 | struct GNUNET_TIME_Relative | 265 | struct GNUNET_TIME_Relative |
264 | GNUNET_BANDWIDTH_tracker_get_delay (struct GNUNET_BANDWIDTH_Tracker *av, | 266 | GNUNET_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 | */ |
335 | void | 337 | void |
336 | GNUNET_BANDWIDTH_tracker_update_quota (struct GNUNET_BANDWIDTH_Tracker *av, | 338 | GNUNET_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 | ||