|
@@ -966,7 +966,7 @@ entry_guard_learned_bridge_identity(const tor_addr_port_t *addrport,
|
|
* violate it.
|
|
* violate it.
|
|
*/
|
|
*/
|
|
STATIC int
|
|
STATIC int
|
|
-num_reachable_filtered_guards(guard_selection_t *gs,
|
|
|
|
|
|
+num_reachable_filtered_guards(const guard_selection_t *gs,
|
|
const entry_guard_restriction_t *rst)
|
|
const entry_guard_restriction_t *rst)
|
|
{
|
|
{
|
|
int n_reachable_filtered_guards = 0;
|
|
int n_reachable_filtered_guards = 0;
|
|
@@ -1472,30 +1472,28 @@ guard_create_exit_restriction(const uint8_t *exit_id)
|
|
return rst;
|
|
return rst;
|
|
}
|
|
}
|
|
|
|
|
|
-/** If we have fewer than this many possible guards, don't set
|
|
|
|
- * MD-availability-based restrictions: we might blacklist all of
|
|
|
|
- * them. */
|
|
|
|
|
|
+/** If we have fewer than this many possible usable guards, don't set
|
|
|
|
+ * MD-availability-based restrictions: we might blacklist all of them. */
|
|
#define MIN_GUARDS_FOR_MD_RESTRICTION 10
|
|
#define MIN_GUARDS_FOR_MD_RESTRICTION 10
|
|
|
|
|
|
/** Return true if we should set md dirserver restrictions. We might not want
|
|
/** Return true if we should set md dirserver restrictions. We might not want
|
|
- * to set those if our network is too restricted, since we don't want to
|
|
|
|
- * blacklist all our nodes. */
|
|
|
|
|
|
+ * to set those if our guard options are too restricted, since we don't want
|
|
|
|
+ * to blacklist all of them. */
|
|
static int
|
|
static int
|
|
should_set_md_dirserver_restriction(void)
|
|
should_set_md_dirserver_restriction(void)
|
|
{
|
|
{
|
|
const guard_selection_t *gs = get_guard_selection_info();
|
|
const guard_selection_t *gs = get_guard_selection_info();
|
|
|
|
+ int num_usable_guards = num_reachable_filtered_guards(gs, NULL);
|
|
|
|
|
|
- /* Compute the number of filtered guards */
|
|
|
|
- int n_filtered_guards = 0;
|
|
|
|
- SMARTLIST_FOREACH_BEGIN(gs->sampled_entry_guards, entry_guard_t *, guard) {
|
|
|
|
- if (guard->is_filtered_guard) {
|
|
|
|
- ++n_filtered_guards;
|
|
|
|
- }
|
|
|
|
- } SMARTLIST_FOREACH_END(guard);
|
|
|
|
|
|
+ /* Don't set restriction if too few reachable filtered guards. */
|
|
|
|
+ if (num_usable_guards < MIN_GUARDS_FOR_MD_RESTRICTION) {
|
|
|
|
+ log_info(LD_GUARD, "Not setting md restriction: only %d"
|
|
|
|
+ " usable guards.", num_usable_guards);
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
|
|
- /* Do we have enough filtered guards that we feel okay about blacklisting
|
|
|
|
- * some for MD restriction? */
|
|
|
|
- return (n_filtered_guards >= MIN_GUARDS_FOR_MD_RESTRICTION);
|
|
|
|
|
|
+ /* We have enough usable guards: set MD restriction */
|
|
|
|
+ return 1;
|
|
}
|
|
}
|
|
|
|
|
|
/** Allocate and return an outdated md guard restriction. Return NULL if no
|
|
/** Allocate and return an outdated md guard restriction. Return NULL if no
|