diff options
author | Christian Grothoff <christian@grothoff.org> | 2015-02-12 14:22:43 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2015-02-12 14:22:43 +0000 |
commit | 4a1ac10330cedb8c26fa1ac82ca4ae156addbf6c (patch) | |
tree | 4cee43379b1f41d6f30ef44b4ccf5ac70b30da79 | |
parent | 72cc7c145b4cc443a820cbac27383d66e7467817 (diff) | |
download | gnunet-4a1ac10330cedb8c26fa1ac82ca4ae156addbf6c.tar.gz gnunet-4a1ac10330cedb8c26fa1ac82ca4ae156addbf6c.zip |
keep track of number of temporarily blocked addresses
-rw-r--r-- | src/transport/gnunet-service-transport_ats.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/transport/gnunet-service-transport_ats.c b/src/transport/gnunet-service-transport_ats.c index 3976ae3d9..d204a8950 100644 --- a/src/transport/gnunet-service-transport_ats.c +++ b/src/transport/gnunet-service-transport_ats.c | |||
@@ -89,6 +89,10 @@ struct AddressInfo | |||
89 | */ | 89 | */ |
90 | static struct GNUNET_CONTAINER_MultiPeerMap *p2a; | 90 | static struct GNUNET_CONTAINER_MultiPeerMap *p2a; |
91 | 91 | ||
92 | /** | ||
93 | * Number of blocked addresses. | ||
94 | */ | ||
95 | static unsigned int num_blocked; | ||
92 | 96 | ||
93 | /** | 97 | /** |
94 | * Closure for #find_ai(). | 98 | * Closure for #find_ai(). |
@@ -124,8 +128,12 @@ publish_p2a_stat_update () | |||
124 | { | 128 | { |
125 | GNUNET_STATISTICS_set (GST_stats, | 129 | GNUNET_STATISTICS_set (GST_stats, |
126 | gettext_noop ("# Addresses given to ATS"), | 130 | gettext_noop ("# Addresses given to ATS"), |
127 | GNUNET_CONTAINER_multipeermap_size (p2a), | 131 | GNUNET_CONTAINER_multipeermap_size (p2a) - num_blocked, |
128 | GNUNET_NO); | 132 | GNUNET_NO); |
133 | GNUNET_STATISTICS_set (GST_stats, | ||
134 | "# blocked addresses", | ||
135 | num_blocked, | ||
136 | GNUNET_NO); | ||
129 | } | 137 | } |
130 | 138 | ||
131 | 139 | ||
@@ -272,6 +280,8 @@ unblock_address (void *cls, | |||
272 | ai->session, | 280 | ai->session, |
273 | &ai->properties); | 281 | &ai->properties); |
274 | GNUNET_break (NULL != ai->ar); | 282 | GNUNET_break (NULL != ai->ar); |
283 | num_blocked--; | ||
284 | publish_p2a_stat_update (); | ||
275 | } | 285 | } |
276 | 286 | ||
277 | 287 | ||
@@ -302,6 +312,7 @@ GST_ats_block_address (const struct GNUNET_HELLO_Address *address, | |||
302 | GNUNET_break (0); | 312 | GNUNET_break (0); |
303 | return; | 313 | return; |
304 | } | 314 | } |
315 | ai->back_off = GNUNET_TIME_STD_BACKOFF (ai->back_off); | ||
305 | if (GNUNET_YES == | 316 | if (GNUNET_YES == |
306 | GNUNET_HELLO_address_check_option (address, | 317 | GNUNET_HELLO_address_check_option (address, |
307 | GNUNET_HELLO_ADDRESS_INFO_INBOUND)) | 318 | GNUNET_HELLO_ADDRESS_INFO_INBOUND)) |
@@ -310,10 +321,12 @@ GST_ats_block_address (const struct GNUNET_HELLO_Address *address, | |||
310 | GST_plugins_a2s (address), | 321 | GST_plugins_a2s (address), |
311 | GNUNET_i2s (&address->peer)); | 322 | GNUNET_i2s (&address->peer)); |
312 | else | 323 | else |
313 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 324 | LOG (GNUNET_ERROR_TYPE_INFO, |
314 | "Blocking address %s of peer %s from use for a while\n", | 325 | "Blocking address %s of peer %s from use for %s\n", |
315 | GST_plugins_a2s (address), | 326 | GST_plugins_a2s (address), |
316 | GNUNET_i2s (&address->peer)); | 327 | GNUNET_i2s (&address->peer), |
328 | GNUNET_STRINGS_relative_time_to_string (ai->back_off, | ||
329 | GNUNET_YES)); | ||
317 | /* destroy session and address */ | 330 | /* destroy session and address */ |
318 | if ( (NULL == session) || | 331 | if ( (NULL == session) || |
319 | (GNUNET_NO == | 332 | (GNUNET_NO == |
@@ -322,11 +335,12 @@ GST_ats_block_address (const struct GNUNET_HELLO_Address *address, | |||
322 | ai->ar = NULL; | 335 | ai->ar = NULL; |
323 | 336 | ||
324 | /* determine when the address should come back to life */ | 337 | /* determine when the address should come back to life */ |
325 | ai->back_off = GNUNET_TIME_STD_BACKOFF (ai->back_off); | ||
326 | ai->blocked = GNUNET_TIME_relative_to_absolute (ai->back_off); | 338 | ai->blocked = GNUNET_TIME_relative_to_absolute (ai->back_off); |
327 | ai->unblock_task = GNUNET_SCHEDULER_add_delayed (ai->back_off, | 339 | ai->unblock_task = GNUNET_SCHEDULER_add_delayed (ai->back_off, |
328 | &unblock_address, | 340 | &unblock_address, |
329 | ai); | 341 | ai); |
342 | num_blocked++; | ||
343 | publish_p2a_stat_update (); | ||
330 | } | 344 | } |
331 | 345 | ||
332 | 346 | ||
@@ -653,7 +667,6 @@ GST_ats_expire_address (const struct GNUNET_HELLO_Address *address) | |||
653 | GNUNET_CONTAINER_multipeermap_remove (p2a, | 667 | GNUNET_CONTAINER_multipeermap_remove (p2a, |
654 | &address->peer, | 668 | &address->peer, |
655 | ai)); | 669 | ai)); |
656 | publish_p2a_stat_update (); | ||
657 | GNUNET_break (NULL == ai->session); | 670 | GNUNET_break (NULL == ai->session); |
658 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 671 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
659 | "Telling ATS to destroy address from peer %s\n", | 672 | "Telling ATS to destroy address from peer %s\n", |
@@ -675,7 +688,9 @@ GST_ats_expire_address (const struct GNUNET_HELLO_Address *address) | |||
675 | { | 688 | { |
676 | GNUNET_SCHEDULER_cancel (ai->unblock_task); | 689 | GNUNET_SCHEDULER_cancel (ai->unblock_task); |
677 | ai->unblock_task = NULL; | 690 | ai->unblock_task = NULL; |
691 | num_blocked--; | ||
678 | } | 692 | } |
693 | publish_p2a_stat_update (); | ||
679 | GNUNET_HELLO_address_free (ai->address); | 694 | GNUNET_HELLO_address_free (ai->address); |
680 | GNUNET_free (ai); | 695 | GNUNET_free (ai); |
681 | } | 696 | } |
@@ -714,6 +729,7 @@ destroy_ai (void *cls, | |||
714 | { | 729 | { |
715 | GNUNET_SCHEDULER_cancel (ai->unblock_task); | 730 | GNUNET_SCHEDULER_cancel (ai->unblock_task); |
716 | ai->unblock_task = NULL; | 731 | ai->unblock_task = NULL; |
732 | num_blocked--; | ||
717 | } | 733 | } |
718 | if (NULL != ai->ar) | 734 | if (NULL != ai->ar) |
719 | { | 735 | { |