[tor-commits] [tor/master] Log number of inbound/outbound ipv4/6 conns as part of heartbeat

asn at torproject.org asn at torproject.org
Tue Aug 25 12:43:33 UTC 2020


commit 24c721de37d2e10f5c864c2e8001f1468a8a4506
Author: Nick Mathewson <nickm at torproject.org>
Date:   Fri Aug 7 10:45:29 2020 -0400

    Log number of inbound/outbound ipv4/6 conns as part of heartbeat
    
    Closes #29113
---
 changes/ticket29113            |  3 +++
 src/core/mainloop/connection.c |  6 ++++++
 src/core/or/status.c           | 41 ++++++++++++++++++++++++++++++++++++++++-
 src/core/or/status.h           |  1 +
 src/test/test_status.c         | 19 +++++++++++++++----
 5 files changed, 65 insertions(+), 5 deletions(-)

diff --git a/changes/ticket29113 b/changes/ticket29113
new file mode 100644
index 0000000000..b883999f5b
--- /dev/null
+++ b/changes/ticket29113
@@ -0,0 +1,3 @@
+  o Minor features (heartbeat):
+    - Include the total number of inbound and outbound IPv4 and IPv6
+      connections in the heartbeat message . Closes ticket 29113.
diff --git a/src/core/mainloop/connection.c b/src/core/mainloop/connection.c
index b89a4ae796..2b926a076c 100644
--- a/src/core/mainloop/connection.c
+++ b/src/core/mainloop/connection.c
@@ -82,6 +82,7 @@
 #include "core/or/policies.h"
 #include "core/or/reasons.h"
 #include "core/or/relay.h"
+#include "core/or/status.h"
 #include "core/or/crypt_path.h"
 #include "core/proto/proto_haproxy.h"
 #include "core/proto/proto_http.h"
@@ -2042,6 +2043,9 @@ connection_handle_listener_read(connection_t *conn, int new_type)
       connection_mark_for_close(newconn);
     return 0;
   }
+
+  note_connection(true /* inbound */, conn->socket_family);
+
   return 0;
 }
 
@@ -2213,6 +2217,8 @@ connection_connect_sockaddr,(connection_t *conn,
     }
   }
 
+  note_connection(false /* outbound */, conn->socket_family);
+
   /* it succeeded. we're connected. */
   log_fn(inprogress ? LOG_DEBUG : LOG_INFO, LD_NET,
          "Connection to socket %s (sock "TOR_SOCKET_T_FORMAT").",
diff --git a/src/core/or/status.c b/src/core/or/status.c
index ed8448883c..00a88a3178 100644
--- a/src/core/or/status.c
+++ b/src/core/or/status.c
@@ -113,6 +113,41 @@ log_onion_service_stats(void)
              hs_stats_get_n_rendezvous_launches());
 }
 
+/**
+ * @name connection counts for heartbeat
+ *
+ * Tracks incoming and outgoing connections on IPv4/IPv6, for heartbeat
+ * logs.
+ **/
+/**@{*/
+static unsigned n_incoming_ipv4;
+static unsigned n_incoming_ipv6;
+static unsigned n_outgoing_ipv4;
+static unsigned n_outgoing_ipv6;
+/**@}*/
+
+/**
+ * Note that a connection has arrived or has been made, for use in the
+ * heartbeat message.
+ **/
+void
+note_connection(bool inbound, int family)
+{
+  if (family == AF_INET) {
+    if (inbound) {
+      ++n_incoming_ipv4;
+    } else {
+      ++n_outgoing_ipv4;
+    }
+  } else if (family == AF_INET6) {
+    if (inbound) {
+      ++n_incoming_ipv6;
+    } else {
+      ++n_outgoing_ipv6;
+    }
+  }
+}
+
 /** Log a "heartbeat" message describing Tor's status and history so that the
  * user can know that there is indeed a running Tor.  Return 0 on success and
  * -1 on failure. */
@@ -143,8 +178,12 @@ log_heartbeat(time_t now)
   bw_sent = bytes_to_usage(get_bytes_written());
 
   log_fn(LOG_NOTICE, LD_HEARTBEAT, "Heartbeat: Tor's uptime is %s, with %d "
-         "circuits open. I've sent %s and received %s.%s",
+         "circuits open. I've sent %s and received %s. I've received %u "
+         "connections on IPv4 and %u on IPv6. I've made %u connections "
+         "with IPv4 and %u with IPv6.%s",
          uptime, count_circuits(), bw_sent, bw_rcvd,
+         n_incoming_ipv4, n_incoming_ipv6,
+         n_outgoing_ipv4, n_outgoing_ipv6,
          hibernating?" We are currently hibernating.":"");
 
   dirclient_dump_total_dls();
diff --git a/src/core/or/status.h b/src/core/or/status.h
index 639f8cdf51..271e0dbc9a 100644
--- a/src/core/or/status.h
+++ b/src/core/or/status.h
@@ -11,6 +11,7 @@
 
 #include "lib/testsupport/testsupport.h"
 
+void note_connection(bool inbound, int family);
 int log_heartbeat(time_t now);
 
 #ifdef STATUS_PRIVATE
diff --git a/src/test/test_status.c b/src/test/test_status.c
index 0edc729b00..b938b86326 100644
--- a/src/test/test_status.c
+++ b/src/test/test_status.c
@@ -347,7 +347,9 @@ test_status_hb_not_in_consensus(void *arg)
                  "not in the cached consensus.\n");
   expect_log_msg("Heartbeat: Tor's uptime is 0:00 hours, "
                  "with 0 circuits open. "
-                 "I've sent 0 kB and received 0 kB.\n");
+                 "I've sent 0 kB and received 0 kB. "
+                 "I've received 0 connections on IPv4 and 0 on IPv6. "
+                 "I've made 0 connections with IPv4 and 0 with IPv6.\n");
   expect_log_msg("Average packaged cell fullness: 100.000%. "
                  "TLS write overhead: 0%\n");
   expect_log_msg("Circuit handshake stats since last time: 1/1 TAP, "
@@ -462,6 +464,8 @@ test_status_hb_simple(void *arg)
   expect_log_msg("Heartbeat: Tor's uptime is 0:00 hours, "
                  "with 0 circuits open. "
                  "I've sent 0 kB and received 0 kB. "
+                 "I've received 0 connections on IPv4 and 0 on IPv6. "
+                 "I've made 0 connections with IPv4 and 0 with IPv6. "
                  "We are currently hibernating.\n");
 
   done:
@@ -581,7 +585,10 @@ test_status_hb_calls_log_accounting(void *arg)
 
   expect_log_msg("Heartbeat: Tor's uptime is 0:00 hours, "
                  "with 0 circuits open. "
-                 "I've sent 0 kB and received 0 kB.\n");
+                 "I've sent 0 kB and received 0 kB. "
+                 "I've received 0 connections on IPv4 and 0 on IPv6. "
+                 "I've made 0 connections with IPv4 and 0 with IPv6.\n");
+
   expect_log_msg_containing("Heartbeat: Accounting enabled. Sent: 0 kB, "
                             "Received: 0 kB, Used: 0 kB / 0 kB, Rule: max. "
                             "The current accounting interval ends on ");
@@ -727,7 +734,9 @@ test_status_hb_packaged_cell_fullness(void *arg)
   tt_int_op(actual, OP_EQ, expected);
   expect_log_msg("Heartbeat: Tor's uptime is 0:00 hours, "
                  "with 0 circuits open. "
-                 "I've sent 0 kB and received 0 kB.\n");
+                 "I've sent 0 kB and received 0 kB. "
+                 "I've received 0 connections on IPv4 and 0 on IPv6. "
+                 "I've made 0 connections with IPv4 and 0 with IPv6.\n");
   expect_log_msg("Average packaged cell fullness: 50.000%. "
                  "TLS write overhead: 0%\n");
 
@@ -850,7 +859,9 @@ test_status_hb_tls_write_overhead(void *arg)
   tt_int_op(actual, OP_EQ, expected);
   expect_log_msg("Heartbeat: Tor's uptime is 0:00 hours, "
                  "with 0 circuits open. "
-                 "I've sent 0 kB and received 0 kB.\n");
+                 "I've sent 0 kB and received 0 kB. "
+                 "I've received 0 connections on IPv4 and 0 on IPv6. "
+                 "I've made 0 connections with IPv4 and 0 with IPv6.\n");
   expect_log_msg("Average packaged cell fullness: 100.000%. "
                  "TLS write overhead: 100%\n");
 





More information about the tor-commits mailing list