Commit Graph

2299 Commits

Author SHA1 Message Date
Mike Perry
5b3a067fe3 Replace the constant bottom-half rate with handled count.
This allows us to more accurately estimate effort, based on real bottom-half
throughput over the duration of a descriptor update.
2023-05-10 07:37:11 -07:00
Mike Perry
121766e6b8 Make the thing compile. 2023-05-10 07:37:11 -07:00
Roger Dingledine
e605620744 clients defend themselves from absurd pow requests
if asked for higher than a cap, we just solve it at the cap

i picked 500 for now but maybe we'll pick a better number in the future.
2023-05-10 07:37:11 -07:00
Roger Dingledine
ec7495d35a log_err is reserved for fatal failures 2023-05-10 07:37:11 -07:00
Roger Dingledine
e436ce2a3c drop the default min effort to 20
effort 100 is really quite expensive
2023-05-10 07:37:11 -07:00
Roger Dingledine
a575e35c17 sort pqueue ties by time-added
our pqueue implementation does bizarre unspecified things with
ordering of elements that are equal. it certainly doesn't do any
sort of "first in first out" property that i was expecting.

now make it explicit by saying that "equal-effort, added-earlier" is
higher priority.
2023-05-10 07:37:11 -07:00
Roger Dingledine
13f6258245 rate-limit low-effort rendezvous responses
specifically, if we have 16 in-flight rend circs, and the next
one at the top of the pqueue is lower than our suggested effort,
then don't launch it yet.

this way we always launch adequate-effort requests immediately, and
we always handle *some* low-effort requests, but we are ready at any
moment to handle a few new adequate-effort requests.
2023-05-10 07:37:11 -07:00
Roger Dingledine
dec3a0af7a make the rend_pqueue_cb event be postloop
this change makes us reach the callback *after* each mainloop
run, rather than as the next event to run immediately after
activation.

with the old behavior, we were starving everything else to drain the
pqueue entirely, each time we got a new intro2 cell.

now we at least will get to other activities as well.
2023-05-10 07:37:11 -07:00
Roger Dingledine
b95bd5017f track how many in-flight hs-side rend circs
not used in decision-making yet, but it's all ready to use in a
"don't dequeue any more if we have too many in-flight" kind of way
2023-05-10 07:37:11 -07:00
Roger Dingledine
5e768d5cb9 we were sorting our pqueue the wrong way
i.e. we were putting higher effort intro2 cells at the *end*
2023-05-10 07:37:11 -07:00
Roger Dingledine
d0c2d4cb43 add a log line for when client succeeds 2023-05-10 07:37:11 -07:00
Roger Dingledine
4e55f28220 bump up some log messages for easier debugging 2023-05-10 07:37:11 -07:00
Roger Dingledine
8042379c44 new design for handling too many pending rend reqs
now we let ourselves queue up to twice as many as we expect, and when
we get to the limit we make a new pqueue and move over the first n
elements that we like most.

(the old approach, of calling SMARTLIST_DEL_CURRENT_KEEPORDER() on
elements in a pqueue, will destroy its heapify property.)

we also discard elements that are too old, either during the trimming
process or if they come up as the next request to respond to.

lastly, fix a fencepost error on how many rend reqs we would handle
per iteration.
2023-05-10 07:37:11 -07:00
Roger Dingledine
85cba057e7 make a log message clearer about our actual intent 2023-05-10 07:37:11 -07:00
Roger Dingledine
4571faf0c3 pass time around as a parameter
should help with unit testing
2023-05-10 07:37:11 -07:00
David Goulet
047f8c63ee hs: Maximum rend request and trimming of the queue
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10 07:37:11 -07:00
David Goulet
bc9fe5a6f8 hs: Handle multiple rend request per mainloop run
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10 07:37:11 -07:00
David Goulet
35227a7a15 trunnel: Centralize the INTRO1 extension type
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10 07:37:11 -07:00
David Goulet
4eb783e97b hs: Priority queue for rendezvous requests
If PoW are enabled, use a priority queue by effort for the rendezvous
requests hooked into the mainloop.

Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10 07:37:11 -07:00
David Goulet
f0b63ca242 hs: Move rendezvous circuit data structure
When parsing an INTRODUCE2 cell, we extract data in order to launch the
rendezvous circuit. This commit creates a data structure just for that
data so it can be used by future commits for prop327 in order to copy
that data over a priority queue instead of the whole intro data data
structure which contains pointers that could dissapear.

Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10 07:37:11 -07:00
David Goulet
ca74530b40 hs: Setup service side PoW defenses
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10 07:37:11 -07:00
David Goulet
8b41e09a77 hs: Client now solve PoW if present
At this commit, the tor main loop solves it. We might consider moving
this to the CPU pool at some point.

Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10 07:37:11 -07:00
David Goulet
26957b47ac hs: Descriptor support for PoW
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10 07:37:11 -07:00
David Goulet
51ce0bb6ef hs: Add solve and verify PoW functions
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10 07:37:10 -07:00
David Goulet
c611e328de hs: Add data structure needed for PoW 2023-05-10 07:37:10 -07:00
David Goulet
d79814f1b1 hs: PoW extension encoding
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10 07:37:10 -07:00
Mike Perry
33c3059c82 Handle infinite loop with only one bridge (or snowflake). 2023-05-04 16:31:08 +00:00
Mike Perry
46e473f43e Prop#329 Pool: Avoid sharing Guards and Middles between circuits.
Conflux must not use the same Guard for each leg; nor the same middle for each
leg.
2023-04-06 15:57:11 +00:00
David Goulet
336a24754d Prop#329 Pool: Handle linking, unlinking, and relaunching conflux circuit legs.
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-04-06 15:57:11 +00:00
Mike Perry
2f865b4bba Prop#329 streams: Handle stream usage with conflux
This adds utility functions to help stream block decisions, as well as cpath
layer_hint checks for stream cell acceptance, and syncing stream lists
for conflux circuits.

These functions are then called throughout the codebase to properly manage
conflux streams.
2023-04-06 15:57:11 +00:00
Mike Perry
a4ee0c29ee Prop#329: Add purposes for conflux circuits
Because UNLINKED circuits must never be used for streams, but LINKED circuits
can be, we want these separate.
2023-04-06 15:57:10 +00:00
Mike Perry
eac2bad86b Prop#329 params: Consensus parameter and torrc handling
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-04-06 15:57:10 +00:00
David Goulet
a9fc6c937c protover: Support Relay=5 for Conflux (prop329)
Closes #40721

Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-04-06 15:57:10 +00:00
trinity-1686a
0c634999c1
don't emit key expiration metric instead of setting it to zero 2023-03-19 10:31:28 +01:00
David Goulet
59456cb3cf Merge branch 'tor-gitlab/mr/700' 2023-03-13 11:22:31 -04:00
Gabriela Moldovan
1a60fa547f metrics: Add HS service side circuit build time metrics.
This adds 2 histogram metrics for hidden services:
* `tor_hs_rend_circ_build_time` - the rendezvous circuit build time in milliseconds
* `tor_hs_intro_circ_build_time` - the introduction circuit build time in milliseconds

The text representation representation of the new metrics looks like this:
```
# HELP tor_hs_rend_circ_build_time The rendezvous circuit build time in milliseconds
# TYPE tor_hs_rend_circ_build_time histogram
tor_hs_rend_circ_build_time_bucket{onion="<elided>",le="1000.00"} 2
tor_hs_rend_circ_build_time_bucket{onion="<elided>",le="5000.00"} 10
tor_hs_rend_circ_build_time_bucket{onion="<elided>",le="10000.00"} 10
tor_hs_rend_circ_build_time_bucket{onion="<elided>",le="30000.00"} 10
tor_hs_rend_circ_build_time_bucket{onion="<elided>",le="60000.00"} 10
tor_hs_rend_circ_build_time_bucket{onion="<elided>",le="+Inf"} 10
tor_hs_rend_circ_build_time_sum{onion="<elided>"} 10824
tor_hs_rend_circ_build_time_count{onion="<elided>"} 10
# HELP tor_hs_intro_circ_build_time The introduction circuit build time in milliseconds
# TYPE tor_hs_intro_circ_build_time histogram
tor_hs_intro_circ_build_time_bucket{onion="<elided>",le="1000.00"} 0
tor_hs_intro_circ_build_time_bucket{onion="<elided>",le="5000.00"} 6
tor_hs_intro_circ_build_time_bucket{onion="<elided>",le="10000.00"} 6
tor_hs_intro_circ_build_time_bucket{onion="<elided>",le="30000.00"} 6
tor_hs_intro_circ_build_time_bucket{onion="<elided>",le="60000.00"} 6
tor_hs_intro_circ_build_time_bucket{onion="<elided>",le="+Inf"} 6
tor_hs_intro_circ_build_time_sum{onion="<elided>"} 9843
tor_hs_intro_circ_build_time_count{onion="<elided>"} 6
```

Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-03-13 11:18:40 -04:00
Gabriela Moldovan
d1264d11c3 metrics: Add support for histograms.
This will enable us to add e.g. circuit build metrics (#40717).

Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-03-13 11:18:40 -04:00
nonameformee
8f50f490a6 Update 3 files
- /src/feature/dirauth/process_descs.c
- /src/test/test_process_descs.c
- /changes/ticket40760
2023-03-12 11:40:52 +00:00
David Goulet
3fa08dc9a7 Merge branch 'tor-gitlab/mr/697' 2023-03-07 09:49:53 -05:00
Gabriela Moldovan
16c6788fbc metrics: Add a reason label to the HS error metrics.
This adds a `reason` label to the `hs_intro_rejected_intro_req_count` and
`hs_rdv_error_count` metrics introduced in #40755.

Metric look up and intialization is now more a bit more involved. This may be
fine for now, but it will become unwieldy if/when we add more labels (and as
such will need to be refactored).

Also, in the future, we may want to introduce finer grained `reason` labels.
For example, the `invalid_introduce2` label actually covers multiple types of
errors that can happen during the processing of an INTRODUCE2 cell (such as
cell parse errors, replays, decryption errors).

Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-03-07 09:46:05 -05:00
David Goulet
73eab76e6d Merge branch 'maint-0.4.7' 2023-03-07 08:39:48 -05:00
trinity-1686a
0222fc4d71
add new metrics entry for cert expiration 2023-03-06 13:56:39 +01:00
Gabriela Moldovan
db4c4d656a
metrics: Add metrics for rendezvous and introduction request failures.
This introduces a couple of new service side metrics:
* `hs_intro_rejected_intro_req_count`, which counts the number of introduction
  requests rejected by the hidden service
* `hs_rdv_error_count`, which counts the number of rendezvous errors as seen by
  the hidden service (this number includes the number of circuit establishment
  failures, failed retries, end-to-end circuit setup failures)

Closes #40755. This partially addresses #40717.

Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-02-16 18:54:30 +00:00
Roger Dingledine
36612b9bf8 vote AuthDirMaxServersPerAddr in consensus params
Directory authorities now include their AuthDirMaxServersPerAddr
config option in the consensus parameter section of their vote. Now
external tools can better predict how they will behave.

In particular, the value should make its way to the
https://consensus-health.torproject.org/#consensusparams page.

Once enough dir auths vote this param, they should also compute a
consensus value for it in the consensus document. Nothing uses this
consensus value yet, but we could imagine having dir auths consult it
in the future.

Implements ticket 40753.
2023-02-13 13:54:29 -05:00
David Goulet
482ce87a8d Merge branch 'maint-0.4.7' 2023-02-13 10:16:13 -05:00
Gabriela Moldovan
21b3397f9b
metrics: Decrement hs_intro_established_count on intro circuit close.
Closes #40751.

Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-02-10 20:31:36 +00:00
Gabriela Moldovan
c98d78c95c
Update find_service documentation.
This updates the docs to stop suggesting `pk` can be NULL, as that doesn't seem
to be the case anymore (`tor_assert(pk)`).

Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-02-10 15:27:43 +00:00
Dimitris Apostolou
c1b940cebf
Fix typos 2023-02-05 00:36:37 +02:00
Roger Dingledine
a4d61c84e3 fix trivial typos 2023-01-30 16:23:24 -05:00
Nick Mathewson
ee153db5a1 Add more test-vectors for key blinding.
These are verified-as-correct against the current C implementation;
adding them here gives us something to copy into Arti.
2023-01-19 12:54:33 -05:00
David Goulet
d02d2a4338 Fix compiler warnings about unused variables
Fixes #40743

Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-01-19 11:18:02 -05:00
David Goulet
637213fce3 Merge branch 'maint-0.4.7' 2023-01-12 10:49:57 -05:00
David Goulet
f2e9ce72d6 dirauth: Reject 0.4.6.x series at the authority level
Closes #40664

Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-01-12 09:07:52 -05:00
David Goulet
1e6d839ce9 Merge branch 'tor-gitlab/mr/668' 2022-12-22 14:03:40 -05:00
Georg Koppen
5ba2bf2551
Add back comments about Stable/familiar decay
Closes: #40734.
2022-12-21 10:43:26 +00:00
Dimitris Apostolou
1da9dec348
Fix typos 2022-12-16 08:09:04 +02:00
David Goulet
58f41c379d Merge branch 'maint-0.4.7' 2022-12-12 13:15:08 -05:00
David Goulet
1d1eb29443 metrics: Fix typo in a label
Fixes #40727

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-12-07 08:43:41 -05:00
David Goulet
9a06fee5a1 Merge branch 'maint-0.4.7' 2022-12-05 13:23:34 -05:00
Mike Perry
a51cd9a569 Ticket 40724: Add metrics for CC circuit counts 2022-12-02 21:50:59 +00:00
Mike Perry
07b521560f Ticket 40724: Additional congestion control metrics 2022-12-01 22:19:08 +00:00
David Goulet
c408d0a7f9 Merge branch 'tor-gitlab/mr/657' 2022-11-28 09:35:53 -05:00
David Goulet
04d8753676 Merge branch 'maint-0.4.7' 2022-11-23 14:54:43 -05:00
David Goulet
fbc9e92fdb relay: Use the configured number of threads for worker work calculation
We cap our number of CPU worker threads to at least 2 even if we have a
single core. But also, before we used to always add one extra thread
regardless of the number of core.

This meant that we were off when re-using the get_num_cpus() function
when calculating our onionskin work overhead because we were always off
by one.

This commit makes it that we always use the number of thread our actual
thread pool was configured with.

Fixes #40719

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-23 14:05:10 -05:00
David Goulet
b5afc7d62a Merge branch 'maint-0.4.7' 2022-11-10 09:30:42 -05:00
David Goulet
e94c27c0ab metrics: Split cc with counters and gauges
Part of #40712

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-10 08:57:39 -05:00
David Goulet
2737037ccd metrics: Split connections with a counter and gauge
Created and Rejected connections are ever going up counters. While
Opened connections are gauges going up and down.

Fixes #40712

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-10 07:29:18 -05:00
David Goulet
f39f8b30f4 Merge branch 'maint-0.4.7' 2022-11-09 15:35:58 -05:00
David Goulet
c13dc8b08a Merge branch 'ticket40674_047_01' into maint-0.4.7 2022-11-09 15:32:18 -05:00
Rasmus Dahlberg
21eac1e8d8 dns: Make TTLs fuzzy at exit relays
This change mitigates DNS-based website oracles by making the time that
a domain name is cached uncertain (+- 4 minutes of what's measurable).

Resolves TROVE-2021-009.

Fixes #40674
2022-11-09 15:30:43 -05:00
David Goulet
560d44b08b Merge branch 'maint-0.4.7' 2022-11-09 15:29:04 -05:00
David Goulet
780ca741f3 relay: Cache onion queue parameters on consensus change
This is part of the fast path so we need to cache consensus parameters
instead of querying it everytime we need to learn a value.

Part of #40704

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-09 15:12:51 -05:00
David Goulet
e3f6908984 relay: Make the max pending tasks per CPU a consensus parameter
Until now, there was this magic number (64) used as the maximum number
of tasks a CPU worker can take at once.

This commit makes it a consensus parameter so our future selves can
think of a better value depending on network conditions.

Part of #40704

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-09 13:13:21 -05:00
David Goulet
9c8c7804d5 relay: Add the onion_queue_wait_cutoff consensus param
Transform the hardcoded value ONIONQUEUE_WAIT_CUTOFF into a consensus
parameter so we can control it network wide.

Closes #40704

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-09 11:57:32 -05:00
David Goulet
93523ed0d6 relay: Make MaxOnionQueueDelay into a consensus param
Part of #40704

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-09 11:57:32 -05:00
David Goulet
bd055a258a Merge branch 'maint-0.4.7' 2022-11-09 11:51:52 -05:00
David Goulet
4db03ac360 Merge branch 'tor-gitlab/mr/654' into maint-0.4.7 2022-11-09 11:51:46 -05:00
Mike Perry
04fafeb2dd metrics: Reorganize state labels so rate() can be applied
Part of #40708.
2022-11-09 11:48:42 -05:00
David Goulet
8b8873b759 Merge branch 'maint-0.4.7' 2022-11-08 15:26:44 -05:00
David Goulet
5b0103cfb4 Merge branch 'tor-gitlab/mr/651' into maint-0.4.7 2022-11-08 15:25:08 -05:00
Mike Perry
59bef48490 metrics: Record percentage of blocked channels
Part of #40708.
2022-11-08 18:25:07 +00:00
David Goulet
56ee2131f1 Merge branch 'maint-0.4.7' 2022-11-08 12:47:17 -05:00
Mike Perry
00633bc619 metrics: Report amount of cwnd drop from delta and gamma
Part of #40708.
2022-11-08 12:47:14 -05:00
David Goulet
2adc73afdb Merge branch 'maint-0.4.7' 2022-11-08 12:36:44 -05:00
David Goulet
fde87096c3 Merge branch 'tor-gitlab/mr/650' into maint-0.4.7 2022-11-08 12:36:19 -05:00
David Goulet
d634a5ebc7 relay: Remove unused conn->ext_or_conn_id
This also incidently removes a use of uninitialized stack data from the
connection_or_set_ext_or_identifier() function.

Fixes #40648

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-08 12:35:09 -05:00
Mike Perry
fec9757a37 metrics: Add flow control metrics.
Part of #40708.
2022-11-07 09:55:06 -05:00
Mike Perry
2f7e05d89d metrics: Add stats when the clock stalls.
Part of #40708.
2022-11-07 09:55:06 -05:00
Mike Perry
83fdaff7c0 metrics: Add running average of CC cwnd in slow start when closing circuit
Count slow start separately.

Part of #40708

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-07 09:55:06 -05:00
David Goulet
62ce557b0b metrics: Add stats when reaching vegas delta or ss_cwnd_max
Part of #40708

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-07 09:55:06 -05:00
David Goulet
a0e72fcb97 metrics: Add running average of CC cwnd when closing circuit
Part of #40708

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-07 09:55:06 -05:00
David Goulet
c565ef9c58 metrics: Add running average of CC cwnd when exiting slow start
Part of #40708

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-07 09:55:06 -05:00
David Goulet
6196e9596a metrics: Add connection socket family to metrics
Adds either ipv4 or ipv6 to the "tor_relay_connections_total" stats.

Closes #40710

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-03 13:05:21 -04:00
David Goulet
87e820a0c5 metrics: Add stats for num circ reaching max cell outq
Part of #40708

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-11-03 09:37:38 -04:00
Rasmus Dahlberg
0fe2096144 Clip DNS TTL values once in event callback
This change ensures that other parts of the code base always operate on
the same clipped TTL values, notably without being aware of clipping.
2022-11-01 09:29:19 -04:00
David Goulet
15e5b203cd Merge branch 'tor-gitlab/mr/594' 2022-11-01 09:11:29 -04:00
David Goulet
3596d193be Merge branch 'tor-gitlab/mr/636' 2022-10-31 14:15:00 -04:00
David Goulet
19b080f2aa Merge branch 'tor-gitlab/mr/646' 2022-10-28 12:07:51 -04:00
Jeremy Saklad
7e80ad4787
relay: Skip warnings for single onion services
Single onion services are not secret, so there is no added risk from
using accounting or running a relay in the same instance.

Related to #40691
2022-10-28 09:15:14 -05:00
Roger Dingledine
338185d840 resolve a BUG() on relays at startup
Remove a harmless "Bug" log message that can happen in
relay_addr_learn_from_dirauth() on relays during startup:

tor_bug_occurred_(): Bug: ../src/feature/relay/relay_find_addr.c:225: relay_addr_learn_from_dirauth: Non-fatal assertion !(!ei) failed. (on Tor 0.4.7.10 )
Bug: Tor 0.4.7.10: Non-fatal assertion !(!ei) failed in relay_addr_learn_from_dirauth at ../src/feature/relay/relay_find_addr.c:225. Stack trace: (on Tor 0.4.7.10 )

Finishes fixing bug 40231.

Fixes bug 40523; bugfix on 0.4.5.4-rc.
2022-10-27 20:07:48 -04:00
David Goulet
3c58fa8a6f Merge branch 'maint-0.4.7' 2022-10-27 11:41:48 -04:00
David Goulet
72f52d2c85 Merge branch 'tor-gitlab/mr/644' into maint-0.4.7 2022-10-27 11:41:43 -04:00
David Goulet
0918cc2783 Merge branch 'maint-0.4.7' 2022-10-27 11:41:26 -04:00
David Goulet
6d40e980fb metrics: Treat relay connections as gauge, not counter
Fixes #40699

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-27 11:37:21 -04:00
David Goulet
177f3a40eb metrics: Add number of opened circuits to MetricsPort
Related to #40194

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-27 10:48:52 -04:00
David Goulet
1a2d93f72a relay: Add our consensus relay flag to MetricsPort
Related to #40194

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-27 10:48:52 -04:00
David Goulet
48ab17cc72 metrics: Add traffic related stats to MetricsPort
At this commit, bytes read and written are exported.

Related to #40194

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-27 10:48:48 -04:00
David Goulet
cd7be492d1 relay: Add DoS subsystem stats to MetricsPort
Related to #40194

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-27 10:47:56 -04:00
David Goulet
fff2b92682 Merge branch 'maint-0.4.7' 2022-10-27 10:46:54 -04:00
David Goulet
a1c40c8511 metrics: Fix naming and documentation
After nickm's review, minor changes to names and comments.

Related to #40194

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-27 10:45:08 -04:00
David Goulet
06a26f1872 relay: Change the connection metrics name
Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-26 15:16:48 -04:00
David Goulet
00f714b374 relay: Add CC RTT reset stats to MetricsPort
Related to #40194

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-26 15:16:48 -04:00
David Goulet
e7e18ae914 relay: Add total number of streams seen on MetricsPort
Related to #40194

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-26 15:16:48 -04:00
David Goulet
98b98fd3ce rephist: Track number of streams seen per type
Related to #40194

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-26 15:16:48 -04:00
David Goulet
dd272b6ef4 Merge remote-tracking branch 'tor-gitlab/mr/638' 2022-10-26 15:12:54 -04:00
David Goulet
78c184d2fe hs: Retry service rendezvous on circuit close
Move the retry from circuit_expire_building() to when the offending
circuit is being closed.

Fixes #40695

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-26 15:10:39 -04:00
David Goulet
5b44a32c59 circ: Get rid of hs_circ_has_timed_out
Logic is too convoluted and we can't efficiently apply a specific
timeout depending on the purpose.

Remove it and instead rely on the right circuit cutoff instead of
keeping this flagged circuit open forever.

Part of #40694

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-26 15:10:37 -04:00
David Goulet
fb21387882 Merge branch 'tor-gitlab/mr/637' 2022-10-26 15:07:42 -04:00
David Goulet
a7aa22a4e7 hs: Retry rdv circuit if repurposed
This can happen if our measurement subsystem decides to snatch it.

Fixes #40696

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-26 15:05:44 -04:00
David Goulet
ca135a127d Merge branch 'maint-0.4.7' 2022-10-26 15:01:43 -04:00
David Goulet
0a49e04691 Merge branch 'tor-gitlab/mr/635' into maint-0.4.7 2022-10-26 15:01:40 -04:00
David Goulet
a2ee39452a Merge branch 'tor-gitlab/mr/633' 2022-10-26 14:58:21 -04:00
David Goulet
59008c6f51 hs: Change the error for a collapsing client circuit
Change it to an "unreachable" error so the intro point can be retried
and not flagged as a failure and never retried again.

Closes #40692

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-26 14:56:45 -04:00
Roger Dingledine
c56980f5e5 use consensus ip:port for dir auths if different
Directory authorities and relays now interact properly with directory
authorities if they change addresses. In the past, they would continue
to upload votes, signatures, descriptors, etc to the hard-coded address
in the configuration. Now, if the directory authority is listed in
the consensus at a different address, they will direct queries to this
new address.

Specifically, these three activities have changed:

* Posting a vote, a signature, or a relay descriptor to all the dir auths.

* Dir auths fetching missing votes or signatures from all the dir auths.

* Dir auths fetching new descriptors from a specific dir auth when they
just learned about them from that dir auth's vote.

We already do this desired behavior (prefer the address in the consensus,
but fall back to the hard-coded dirservers info if needed) when fetching
missing certs.

There is a fifth case, in router_pick_trusteddirserver(), where clients
and relays are trying to reach a random dir auth to fetch something. I
left that case alone for now because the interaction with fallbackdirs
is complicated.

Implements ticket 40705.
2022-10-25 04:19:37 -04:00
Roger Dingledine
2033cc7b5e clean up comment a bit 2022-10-25 02:55:13 -04:00
David Goulet
6300a9548d hs: Retry rdv circuit if repurposed
This can happen if our measurement subsystem decides to snatch it.

Fixes #40696

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-24 11:03:38 -04:00
Roger Dingledine
bab8375ef5 dir auths now omit Measured= if rs->is_authority
Directory authorities stop voting a consensus "Measured" weight
for relays with the Authority flag. Now these relays will be
considered unmeasured, which should reserve their bandwidth
for their dir auth role and minimize distractions from other roles.

In place of the "Measured" weight, they now include a
"MeasuredButAuthority" weight (not used by anything) so the bandwidth
authority's opinion on this relay can be recorded for posterity.

Resolves ticket 40698.
2022-10-24 04:34:49 -04:00
Roger Dingledine
ea2ba4f5a8 back out most of commit b7992d4f
The AuthDirDontVoteOnDirAuthBandwidth torrc option never worked, and it
was implemented in a way that could have produced consensus conflicts
if it had.

Resolves bug 40700.
2022-10-24 04:34:00 -04:00
David Goulet
04cccd7074 hs: Retry service rendezvous on circuit close
Move the retry from circuit_expire_building() to when the offending
circuit is being closed.

Fixes #40695

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-19 16:39:10 -04:00
David Goulet
921268d4ce circ: Get rid of hs_circ_has_timed_out
Logic is too convoluted and we can't efficiently apply a specific
timeout depending on the purpose.

Remove it and instead rely on the right circuit cutoff instead of
keeping this flagged circuit open forever.

Part of #40694

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-19 16:39:10 -04:00
David Goulet
8463111c9b hs: Change the error for a collapsing client circuit
Change it to an "unreachable" error so the intro point can be retried
and not flagged as a failure and never retried again.

Closes #40692

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-19 14:41:48 -04:00
David Goulet
5080a4ff67 Merge branch 'maint-0.4.7' 2022-10-12 15:52:04 -04:00
David Goulet
c8d8fa0d36 relay: Add number of rejected connections to MetricsPort
Related to #40194

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-12 09:25:19 -04:00
David Goulet
d543db5ac0 relay: Add connection stats to MetricsPort
This adds the number of created and opened connections to the
MetricsPort for a relay for each connection type and direction.

Output looks like:

  # HELP tor_relay_connections Connections metrics of this relay
  # TYPE tor_relay_connections counter
  tor_relay_connections{type="OR listener",direction="initiated",state="created"} 0
  tor_relay_connections{type="OR listener",direction="received",state="created"} 0
  tor_relay_connections{type="OR listener",direction="initiated",state="opened"} 0
  tor_relay_connections{type="OR listener",direction="received",state="opened"} 0
  tor_relay_connections{type="OR",direction="initiated",state="created"} 5
  tor_relay_connections{type="OR",direction="received",state="created"} 0
  tor_relay_connections{type="OR",direction="initiated",state="opened"} 5
  tor_relay_connections{type="OR",direction="received",state="opened"} 0
  tor_relay_connections{type="Exit",direction="initiated",state="created"} 0
  tor_relay_connections{type="Exit",direction="received",state="created"} 0
  tor_relay_connections{type="Exit",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Exit",direction="received",state="opened"} 0
  tor_relay_connections{type="Socks listener",direction="initiated",state="created"} 0
  tor_relay_connections{type="Socks listener",direction="received",state="created"} 0
  tor_relay_connections{type="Socks listener",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Socks listener",direction="received",state="opened"} 0
  tor_relay_connections{type="Socks",direction="initiated",state="created"} 0
  tor_relay_connections{type="Socks",direction="received",state="created"} 0
  tor_relay_connections{type="Socks",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Socks",direction="received",state="opened"} 0
  tor_relay_connections{type="Directory listener",direction="initiated",state="created"} 0
  tor_relay_connections{type="Directory listener",direction="received",state="created"} 0
  tor_relay_connections{type="Directory listener",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Directory listener",direction="received",state="opened"} 0
  tor_relay_connections{type="Directory",direction="initiated",state="created"} 0
  tor_relay_connections{type="Directory",direction="received",state="created"} 0
  tor_relay_connections{type="Directory",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Directory",direction="received",state="opened"} 0
  tor_relay_connections{type="Control listener",direction="initiated",state="created"} 0
  tor_relay_connections{type="Control listener",direction="received",state="created"} 0
  tor_relay_connections{type="Control listener",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Control listener",direction="received",state="opened"} 0
  tor_relay_connections{type="Control",direction="initiated",state="created"} 0
  tor_relay_connections{type="Control",direction="received",state="created"} 0
  tor_relay_connections{type="Control",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Control",direction="received",state="opened"} 0
  tor_relay_connections{type="Transparent pf/netfilter listener",direction="initiated",state="created"} 0
  tor_relay_connections{type="Transparent pf/netfilter listener",direction="received",state="created"} 0
  tor_relay_connections{type="Transparent pf/netfilter listener",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Transparent pf/netfilter listener",direction="received",state="opened"} 0
  tor_relay_connections{type="Transparent natd listener",direction="initiated",state="created"} 0
  tor_relay_connections{type="Transparent natd listener",direction="received",state="created"} 0
  tor_relay_connections{type="Transparent natd listener",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Transparent natd listener",direction="received",state="opened"} 0
  tor_relay_connections{type="DNS listener",direction="initiated",state="created"} 0
  tor_relay_connections{type="DNS listener",direction="received",state="created"} 0
  tor_relay_connections{type="DNS listener",direction="initiated",state="opened"} 0
  tor_relay_connections{type="DNS listener",direction="received",state="opened"} 0
  tor_relay_connections{type="Extended OR",direction="initiated",state="created"} 0
  tor_relay_connections{type="Extended OR",direction="received",state="created"} 0
  tor_relay_connections{type="Extended OR",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Extended OR",direction="received",state="opened"} 0
  tor_relay_connections{type="Extended OR listener",direction="initiated",state="created"} 0
  tor_relay_connections{type="Extended OR listener",direction="received",state="created"} 0
  tor_relay_connections{type="Extended OR listener",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Extended OR listener",direction="received",state="opened"} 0
  tor_relay_connections{type="HTTP tunnel listener",direction="initiated",state="created"} 0
  tor_relay_connections{type="HTTP tunnel listener",direction="received",state="created"} 0
  tor_relay_connections{type="HTTP tunnel listener",direction="initiated",state="opened"} 0
  tor_relay_connections{type="HTTP tunnel listener",direction="received",state="opened"} 0
  tor_relay_connections{type="Metrics listener",direction="initiated",state="created"} 0
  tor_relay_connections{type="Metrics listener",direction="received",state="created"} 1
  tor_relay_connections{type="Metrics listener",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Metrics listener",direction="received",state="opened"} 1
  tor_relay_connections{type="Metrics",direction="initiated",state="created"} 0
  tor_relay_connections{type="Metrics",direction="received",state="created"} 0
  tor_relay_connections{type="Metrics",direction="initiated",state="opened"} 0
  tor_relay_connections{type="Metrics",direction="received",state="opened"} 0

Related to #40194

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-12 09:25:19 -04:00
David Goulet
5603baf257 conn: Keep stats of opened and closed connections
Related to #40194

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-10-12 09:25:19 -04:00
David Goulet
4692cf8688 Merge branch 'maint-0.4.7' 2022-10-11 10:09:37 -04:00
Andy
d09414858e Properly compute cell-drop overload fraction
Patch to address #40673. An additional check has been added to
onion_pending_add() in order to ensure that we avoid counting create
cells from clients.

In the cpuworker.c assign_onionskin_to_cpuworker
method if total_pending_tasks >= max_pending_tasks
and channel_is_client(circ->p_chan) returns false then
rep_hist_note_circuit_handshake_dropped() will be called and
rep_hist_note_circuit_handshake_assigned() will not be called. This
causes relays to run into errors due to the fact that the number of
dropped packets exceeds the total number of assigned packets.

To avoid this situation a check has been added to
onion_pending_add() to ensure that these erroneous calls to
rep_hist_note_circuit_handshake_dropped() are not made.

See the #40673 ticket for the conversation with armadev about this issue.
2022-10-06 00:46:29 -04:00
David Goulet
4d18f4aa9a Merge branch 'maint-0.4.7' 2022-08-10 08:53:08 -04:00
Roger Dingledine
d48eaff86d ignore families for L2 guard independence
mike is concerned that we would get too much exposure to adversaries,
if we enforce that none of our L2 guards can be in the same family.

this change set now essentially finishes the feature that commit a77727cdc
was attempting to add, but strips the "_and_family" part of that plan.
2022-08-09 16:39:26 -04:00
Roger Dingledine
7b1fffe0dd make L2 vanguards actually independent
We had omitted some checks for whether our vanguards (second layer
guards from proposal 333) overlapped or came from the same family.
Now make sure to pick each of them to be independent.

Fixes bug 40639; bugfix on 0.4.7.1-alpha.
2022-08-09 14:47:11 -04:00
David Goulet
16664c0017 Merge branch 'maint-0.4.7' 2022-08-09 11:01:44 -04:00
David Goulet
8bf1a86ae1 dirauth: Make voting flag threshold tunable via torrc
Remove UPTIME_TO_GUARANTEE_STABLE, MTBF_TO_GUARANTEE_STABLE,
TIME_KNOWN_TO_GUARANTEE_FAMILIAR WFU_TO_GUARANTEE_GUARD and replace each
of them with a tunnable torrc option.

Related to #40652

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-08-09 11:01:12 -04:00
David Goulet
681c15a32d dirauth: Add a AuthDirVoteGuard to pin Guard flags
Related to #40652

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-08-04 13:32:56 -04:00
David Goulet
b7f9a24c08 relay: Remove unused conn->ext_or_conn_id
This also incidently removes a use of uninitialized stack data from the
connection_or_set_ext_or_identifier() function.

Fixes #40648

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-07-26 11:56:33 -04:00
Nick Mathewson
3cee70e87d Merge remote-tracking branch 'tor-gitlab/mr/592' 2022-07-21 15:19:28 -04:00
Nick Mathewson
0bd2065062 Merge remote-tracking branch 'tor-gitlab/mr/591' 2022-07-21 15:19:24 -04:00
Roger Dingledine
834745929a fix easy typos 2022-07-05 15:18:29 -04:00
Roger Dingledine
f181ad7c59 fix typo in comment 2022-06-30 03:48:39 -04:00
Roger Dingledine
2b9d2055f0 typo fix in comment 2022-06-29 15:43:08 -04:00
Neel Chauhan
419aa78b3a Remove unused RendPostPeriod option 2022-06-23 09:09:01 -04:00