From c5db7667d6964344e87fb7ee71df3f2ebe8131e6 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 10 Jul 2020 08:29:24 -0400 Subject: [PATCH] Add IPv6 read and write history to bwhist, state, and extrainfo. These values are stored, persisted, and published. They are not yet actually filled with anything. --- src/app/config/or_state_st.h | 8 ++++++++ src/app/config/statefile.c | 8 ++++++++ src/feature/stats/bwhist.c | 21 +++++++++++++++++++-- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/app/config/or_state_st.h b/src/app/config/or_state_st.h index 8c4e9d5e61..31b7f8a983 100644 --- a/src/app/config/or_state_st.h +++ b/src/app/config/or_state_st.h @@ -65,6 +65,14 @@ struct or_state_t { int BWHistoryWriteInterval; struct smartlist_t *BWHistoryWriteValues; struct smartlist_t *BWHistoryWriteMaxima; + time_t BWHistoryIPv6ReadEnds; + int BWHistoryIPv6ReadInterval; + struct smartlist_t *BWHistoryIPv6ReadValues; + struct smartlist_t *BWHistoryIPv6ReadMaxima; + time_t BWHistoryIPv6WriteEnds; + int BWHistoryIPv6WriteInterval; + struct smartlist_t *BWHistoryIPv6WriteValues; + struct smartlist_t *BWHistoryIPv6WriteMaxima; time_t BWHistoryDirReadEnds; int BWHistoryDirReadInterval; struct smartlist_t *BWHistoryDirReadValues; diff --git a/src/app/config/statefile.c b/src/app/config/statefile.c index 4198c8a389..b25167d2ec 100644 --- a/src/app/config/statefile.c +++ b/src/app/config/statefile.c @@ -112,6 +112,14 @@ static const config_var_t state_vars_[] = { V(BWHistoryWriteInterval, POSINT, "900"), V(BWHistoryWriteValues, CSV, ""), V(BWHistoryWriteMaxima, CSV, ""), + V(BWHistoryIPv6ReadEnds, ISOTIME, NULL), + V(BWHistoryIPv6ReadInterval, POSINT, "900"), + V(BWHistoryIPv6ReadValues, CSV, ""), + V(BWHistoryIPv6ReadMaxima, CSV, ""), + V(BWHistoryIPv6WriteEnds, ISOTIME, NULL), + V(BWHistoryIPv6WriteInterval, POSINT, "900"), + V(BWHistoryIPv6WriteValues, CSV, ""), + V(BWHistoryIPv6WriteMaxima, CSV, ""), V(BWHistoryDirReadEnds, ISOTIME, NULL), V(BWHistoryDirReadInterval, POSINT, "900"), V(BWHistoryDirReadValues, CSV, ""), diff --git a/src/feature/stats/bwhist.c b/src/feature/stats/bwhist.c index fef8a3b2dd..44717f33ba 100644 --- a/src/feature/stats/bwhist.c +++ b/src/feature/stats/bwhist.c @@ -162,10 +162,14 @@ bw_array_free_(bw_array_t *b) tor_free(b); } -/** Recent history of bandwidth observations for read operations. */ +/** Recent history of bandwidth observations for (all) read operations. */ static bw_array_t *read_array = NULL; -/** Recent history of bandwidth observations for write operations. */ +/** Recent history of bandwidth observations for IPv6 read operations. */ +static bw_array_t *read_array_ipv6 = NULL; +/** Recent history of bandwidth observations for (all) write operations. */ STATIC bw_array_t *write_array = NULL; +/** Recent history of bandwidth observations for IPv6 write operations. */ +static bw_array_t *write_array_ipv6 = NULL; /** Recent history of bandwidth observations for read operations for the directory protocol. */ static bw_array_t *dir_read_array = NULL; @@ -179,12 +183,16 @@ void bwhist_init(void) { bw_array_free(read_array); + bw_array_free(read_array_ipv6); bw_array_free(write_array); + bw_array_free(write_array_ipv6); bw_array_free(dir_read_array); bw_array_free(dir_write_array); read_array = bw_array_new(); + read_array_ipv6 = bw_array_new(); write_array = bw_array_new(); + write_array_ipv6 = bw_array_new(); dir_read_array = bw_array_new(); dir_write_array = bw_array_new(); } @@ -358,6 +366,8 @@ bwhist_get_bandwidth_lines(void) bwhist_get_one_bandwidth_line(buf, "write-history", write_array); bwhist_get_one_bandwidth_line(buf, "read-history", read_array); + bwhist_get_one_bandwidth_line(buf, "ipv6-write-history", write_array_ipv6); + bwhist_get_one_bandwidth_line(buf, "ipv6-read-history", read_array_ipv6); bwhist_get_one_bandwidth_line(buf, "dirreq-write-history", dir_write_array); bwhist_get_one_bandwidth_line(buf, "dirreq-read-history", dir_read_array); @@ -441,6 +451,8 @@ bwhist_update_state(or_state_t *state) UPDATE(write_array, Write); UPDATE(read_array, Read); + UPDATE(write_array_ipv6, IPv6Write); + UPDATE(read_array_ipv6, IPv6Read); UPDATE(dir_write_array, DirWrite); UPDATE(dir_read_array, DirRead); @@ -535,6 +547,7 @@ bwhist_load_state(or_state_t *state, char **err) /* Assert they already have been malloced */ tor_assert(read_array && write_array); + tor_assert(read_array_ipv6 && write_array_ipv6); tor_assert(dir_read_array && dir_write_array); #define LOAD(arrname,st) \ @@ -548,6 +561,8 @@ bwhist_load_state(or_state_t *state, char **err) LOAD(write_array, Write); LOAD(read_array, Read); + LOAD(write_array_ipv6, IPv6Write); + LOAD(read_array_ipv6, IPv6Read); LOAD(dir_write_array, DirWrite); LOAD(dir_read_array, DirRead); @@ -565,7 +580,9 @@ void bwhist_free_all(void) { bw_array_free(read_array); + bw_array_free(read_array_ipv6); bw_array_free(write_array); + bw_array_free(write_array_ipv6); bw_array_free(dir_read_array); bw_array_free(dir_write_array); }