[tor-commits] [tor/master] Save number of sent/received RELAY_DATA cells for directory connections.

nickm at torproject.org nickm at torproject.org
Mon Feb 27 15:58:47 UTC 2017


commit 3848d236439d476793f03699519a818f26f56c6c
Author: Alexander Færøy <ahf at torproject.org>
Date:   Mon Feb 13 16:57:21 2017 +0000

    Save number of sent/received RELAY_DATA cells for directory connections.
    
    This patch makes us store the number of sent and received RELAY_DATA
    cells used for directory connections. We log the numbers after we have
    received an EOF in connection_dir_client_reached_eof() from the
    directory server.
---
 src/or/directory.c | 13 +++++++++----
 src/or/or.h        |  8 ++++++++
 src/or/relay.c     | 20 ++++++++++++++++++++
 3 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/src/or/directory.c b/src/or/directory.c
index 4ef39af..78cee29 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -1983,12 +1983,17 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
 
   log_debug(LD_DIR,
             "Received response from directory server '%s:%d': %d %s "
-            "(purpose: %d, response size: " U64_FORMAT ", "
-            "compression: %d)",
+            "(purpose: %d, response size: " U64_FORMAT
+#ifdef MEASUREMENTS_21206
+            ", data cells received: %d, data cells sent: %d"
+#endif
+            ", compression: %d)",
             conn->base_.address, conn->base_.port, status_code,
-            escaped(reason),
-            conn->base_.purpose,
+            escaped(reason), conn->base_.purpose,
             U64_PRINTF_ARG(received_bytes),
+#ifdef MEASUREMENTS_21206
+            conn->data_cells_received, conn->data_cells_sent,
+#endif
             compression);
 
   if (conn->guard_state) {
diff --git a/src/or/or.h b/src/or/or.h
index 0db9f23..0e2dc24 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -1786,6 +1786,14 @@ typedef struct dir_connection_t {
    * that's going away and being used on channels instead.  The dirserver still
    * needs this for the incoming side, so it's moved here. */
   uint64_t dirreq_id;
+
+#ifdef MEASUREMENTS_21206
+  /** Number of RELAY_DATA cells received. */
+  uint32_t data_cells_received;
+
+  /** Number of RELAY_DATA cells sent. */
+  uint32_t data_cells_sent;
+#endif
 } dir_connection_t;
 
 /** Subtype of connection_t for an connection to a controller. */
diff --git a/src/or/relay.c b/src/or/relay.c
index 2e76a8e..6b3f34f 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -732,6 +732,16 @@ connection_edge_send_command(edge_connection_t *fromconn,
     return -1;
   }
 
+#ifdef MEASUREMENTS_21206
+  /* Keep track of the number of RELAY_DATA cells sent for directory
+   * connections. */
+  connection_t *linked_conn = TO_CONN(fromconn)->linked_conn;
+
+  if (linked_conn && linked_conn->type == CONN_TYPE_DIR) {
+    ++(TO_DIR_CONN(linked_conn)->data_cells_sent);
+  }
+#endif
+
   return relay_send_command_from_edge(fromconn->stream_id, circ,
                                       relay_command, payload,
                                       payload_len, cpath_layer);
@@ -1585,6 +1595,16 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
       connection_write_to_buf((char*)(cell->payload + RELAY_HEADER_SIZE),
                               rh.length, TO_CONN(conn));
 
+#ifdef MEASUREMENTS_21206
+      /* Count number of RELAY_DATA cells received on a linked directory
+       * connection. */
+      connection_t *linked_conn = TO_CONN(conn)->linked_conn;
+
+      if (linked_conn && linked_conn->type == CONN_TYPE_DIR) {
+        ++(TO_DIR_CONN(linked_conn)->data_cells_received);
+      }
+#endif
+
       if (!optimistic_data) {
         /* Only send a SENDME if we're not getting optimistic data; otherwise
          * a SENDME could arrive before the CONNECTED.





More information about the tor-commits mailing list