[tor-commits] [tor/master] mainloop: Simplify ip_address_changed()

dgoulet at torproject.org dgoulet at torproject.org
Thu Jan 30 18:58:36 UTC 2020


commit c8ba2c4730180d9d9889a939855331bb1e9f95ac
Author: teor <teor at torproject.org>
Date:   Wed Jan 29 18:23:38 2020 +1000

    mainloop: Simplify ip_address_changed()
    
    Simplify ip_address_changed() by removing redundant checks
    (all exits are relays, and need to rebuild their descriptor when their
    IP addresses change).
    
    Rewrite the function comment, and rename the argument, so the function
    is easier to understand and use.
    
    Closes 33091.
---
 src/core/mainloop/mainloop.c | 30 +++++++++++++++++-------------
 src/core/mainloop/mainloop.h |  2 +-
 2 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/core/mainloop/mainloop.c b/src/core/mainloop/mainloop.c
index 7781b29fb..260de181e 100644
--- a/src/core/mainloop/mainloop.c
+++ b/src/core/mainloop/mainloop.c
@@ -2273,18 +2273,23 @@ systemd_watchdog_callback(periodic_timer_t *timer, void *arg)
 
 #define UPTIME_CUTOFF_FOR_NEW_BANDWIDTH_TEST (6*60*60)
 
-/** Called when our IP address seems to have changed. <b>at_interface</b>
- * should be true if we detected a change in our interface, and false if we
- * detected a change in our published address. */
+/** Called when our IP address seems to have changed. <b>on_client_conn</b>
+ * should be true if:
+ *   - we detected a change in our interface address, using an outbound
+ *     connection, and therefore
+ *   - our client TLS keys need to be rotated.
+ * Otherwise, it should be false, and:
+ *   - we detected a change in our published address
+ *     (using some other method), and therefore
+ *   - the published addresses in our descriptor need to change.
+ */
 void
-ip_address_changed(int at_interface)
+ip_address_changed(int on_client_conn)
 {
   const or_options_t *options = get_options();
   int server = server_mode(options);
-  int exit_reject_interfaces = (server && options->ExitRelay
-                                && options->ExitPolicyRejectLocalInterfaces);
 
-  if (at_interface) {
+  if (on_client_conn) {
     if (! server) {
       /* Okay, change our keys. */
       if (init_keys_client() < 0)
@@ -2296,15 +2301,14 @@ ip_address_changed(int at_interface)
         reset_bandwidth_test();
       reset_uptime();
       router_reset_reachability();
+      /* All relays include their IP addresses as their ORPort addresses in
+       * their descriptor.
+       * Exit relays also incorporate interface addresses in their exit
+       * policies, when ExitPolicyRejectLocalInterfaces is set. */
+      mark_my_descriptor_dirty("IP address changed");
     }
   }
 
-  /* Exit relays incorporate interface addresses in their exit policies when
-   * ExitPolicyRejectLocalInterfaces is set */
-  if (exit_reject_interfaces || (server && !at_interface)) {
-    mark_my_descriptor_dirty("IP address changed");
-  }
-
   dns_servers_relaunch_checks();
 }
 
diff --git a/src/core/mainloop/mainloop.h b/src/core/mainloop/mainloop.h
index f9a48a8e0..1ddfec216 100644
--- a/src/core/mainloop/mainloop.h
+++ b/src/core/mainloop/mainloop.h
@@ -56,7 +56,7 @@ MOCK_DECL(int, connection_count_moribund, (void));
 void directory_all_unreachable(time_t now);
 void directory_info_has_arrived(time_t now, int from_cache, int suppress_logs);
 
-void ip_address_changed(int at_interface);
+void ip_address_changed(int on_client_conn);
 void dns_servers_relaunch_checks(void);
 void reset_all_main_loop_timers(void);
 void reschedule_directory_downloads(void);





More information about the tor-commits mailing list