When a client's reachable addresses change, we should:
close connections that are on newly unreachable addresses,
mark connections that are on non-preferred connections as "not for new streams".
This implements user intent faster than the current code (which essentially does nothing, and waits for old unreachable connections to die naturally, and new reachable connections to replace them).
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Child items ...
Show closed items
Linked items 0
Link issues together to show that they're related.
Learn more.
Replying to teor:
Are you sure about both? Personally,
When a client's reachable addresses change, we should:
mark connections that are on non-preferred connections as "not for new streams".
this seems fine to me
close connections that are on newly unreachable addresses
not so sure about this.
There are situations when it's preferable to leave existing streams be, but fewer (I can't think of any) when it would be bothersome to leave them alone.
Replying to teor:
Are you sure about both? Personally,
When a client's reachable addresses change, we should:
mark connections that are on non-preferred connections as "not for new streams".
this seems fine to me
close connections that are on newly unreachable addresses
not so sure about this.
There are situations when it's preferable to leave existing streams be, but fewer (I can't think of any) when it would be bothersome to leave them alone.
I can think of several, in approximate order of prevalence:
the client wants their unreachable connections to fail and be reestablished, rather than waiting for them to time out,
the client has moved to a network where data to some IP addresses is restricted or costly, and they want to avoid those addresses,
the client has moved to a network where connecting to certain IP addresses is bad for their anonymity.
Replying to teor:
Are you sure about both? Personally,
When a client's reachable addresses change, we should:
mark connections that are on non-preferred connections as "not for new streams".
this seems fine to me
close connections that are on newly unreachable addresses
not so sure about this.
There are situations when it's preferable to leave existing streams be, but fewer (I can't think of any) when it would be bothersome to leave them alone.
I can think of several, in approximate order of prevalence:
the client wants their unreachable connections to fail and be reestablished, rather than waiting for them to time out,
the client has moved to a network where data to some IP addresses is restricted or costly, and they want to avoid those addresses,
the client has moved to a network where connecting to certain IP addresses is bad for their anonymity.
Good points. Additionally, keeping in mind things like long-running non-resumable transfers, IRC, and similar applications where a broken connection is a nuisance, and times when the client wants to keep a change in their reachable addresses (that could be due to changing location) private, it seems best for this behavior to be configurable.
Replying to teor:
Are you sure about both? Personally,
When a client's reachable addresses change, we should:
mark connections that are on non-preferred connections as "not for new streams".
this seems fine to me
close connections that are on newly unreachable addresses
not so sure about this.
There are situations when it's preferable to leave existing streams be, but fewer (I can't think of any) when it would be bothersome to leave them alone.
I can think of several, in approximate order of prevalence:
the client wants their unreachable connections to fail and be reestablished, rather than waiting for them to time out,
the client has moved to a network where data to some IP addresses is restricted or costly, and they want to avoid those addresses,
the client has moved to a network where connecting to certain IP addresses is bad for their anonymity.
Good points. Additionally, keeping in mind things like long-running non-resumable transfers, IRC, and similar applications where a broken connection is a nuisance, and times when the client wants to keep a change in their reachable addresses (that could be due to changing location) private, it seems best for this behavior to be configurable.
The behaviour is configurable in this design: if you don't want tor to terminate your connections, don't tell it that those addresses are unreachable. Anything else changes the semantics of reachable addresses.
If you want to be able to prefer smaller sets of addresses than the whole of IPv4 or IPv6, that's another feature ticket - please feel free to open it.
Replying to teor:
Are you sure about both? Personally,
When a client's reachable addresses change, we should:
mark connections that are on non-preferred connections as "not for new streams".
this seems fine to me
close connections that are on newly unreachable addresses
not so sure about this.
There are situations when it's preferable to leave existing streams be, but fewer (I can't think of any) when it would be bothersome to leave them alone.
I can think of several, in approximate order of prevalence:
the client wants their unreachable connections to fail and be reestablished, rather than waiting for them to time out,
the client has moved to a network where data to some IP addresses is restricted or costly, and they want to avoid those addresses,
the client has moved to a network where connecting to certain IP addresses is bad for their anonymity.
Good points. Additionally, keeping in mind things like long-running non-resumable transfers, IRC, and similar applications where a broken connection is a nuisance, and times when the client wants to keep a change in their reachable addresses (that could be due to changing location) private, it seems best for this behavior to be configurable.
The behaviour is configurable in this design: if you don't want tor to terminate your connections, don't tell it that those addresses are unreachable. Anything else changes the semantics of reachable addresses.
If you want to be able to prefer smaller sets of addresses than the whole of IPv4 or IPv6, that's another feature ticket - please feel free to open it.
The option needed is for when the client wants to modify their reachable addresses and seamlessly move new streams to better circuits, consistent with how changes in ExitNodes, and so on, affect existing streams.
...
keeping in mind things like long-running non-resumable transfers, IRC, and similar applications where a broken connection is a nuisance, and times when the client wants to keep a change in their reachable addresses (that could be due to changing location) private, it seems best for this behavior to be configurable.
The behaviour is configurable in this design: if you don't want tor to terminate your connections, don't tell it that those addresses are unreachable. Anything else changes the semantics of reachable addresses.
If you want to be able to prefer smaller sets of addresses than the whole of IPv4 or IPv6, that's another feature ticket - please feel free to open it.
The option needed is for when the client wants to modify their reachable addresses and seamlessly move new streams to better circuits, consistent with how changes in ExitNodes, and so on, affect existing streams.
Entry guard changes are different, and have always been different.
Turns out this feature was implemented as I described as part of prop271.
Please feel free to open a feature ticket for the transition you describe: but be aware that we don't tend to add new options for rare use cases, particularly if they have security implications.
Trac: Milestone: Tor: unspecified to Tor: 0.3.0.x-final Status: new to closed Actualpoints: N/Ato 0 Resolution: N/Ato fixed
In any codebase, subtle changes, like this, being practically undocumented, and evidently hidden from both users and developers, is a source of confusion and a hindrance to future debugging.
In any codebase, subtle changes, like this, being practically undocumented, and evidently hidden from both users and developers, is a source of confusion and a hindrance to future debugging.
There are a lot of subtle changes when a subsystem is rewritten.
That's just how it works.
And no, the earlier bug in almost all versions of tor was much harder to debug. (I've debugged ReachableAddresses errors while implementing IPv6 support.) This fix will make it much easier.
In any codebase, subtle changes, like this, being practically undocumented, and evidently hidden from both users and developers, is a source of confusion and a hindrance to future debugging.
There are a lot of subtle changes when a subsystem is rewritten.
That's just how it works.