Skip to content
Draft
Show file tree
Hide file tree
Changes from 97 commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
c17a870
feat: use quinn multipath
dignifiedquire Jul 7, 2025
7fe570d
update iroh-quinn
dignifiedquire Jul 7, 2025
2f469ac
start opening paths
dignifiedquire Jul 8, 2025
870716f
add more paths
dignifiedquire Jul 8, 2025
346a7c2
set keep alive and idle timeouts for new paths
dignifiedquire Jul 8, 2025
68b1769
insert relay path
dignifiedquire Jul 9, 2025
0eb3fde
set relay path as backup
dignifiedquire Jul 11, 2025
79ec17f
start removing ping logic from the node_map
dignifiedquire Jul 11, 2025
c4baca8
start tracking path events
dignifiedquire Jul 11, 2025
549adee
start figuring out more details
dignifiedquire Jul 12, 2025
9ef5765
wip
dignifiedquire Jul 14, 2025
75d5525
get some stuff to work again
dignifiedquire Jul 18, 2025
4f78898
remove ip_mapped_addresses
dignifiedquire Jul 21, 2025
130710f
use correct relay addr on recv
dignifiedquire Jul 21, 2025
dba89df
ensure connection registration
dignifiedquire Jul 21, 2025
aab083d
remove rtt_actor, this is now done inside quinn on a per path basis
dignifiedquire Jul 21, 2025
d4484da
open additional paths after the initial connection
dignifiedquire Jul 21, 2025
6cb94e4
ensure path open
dignifiedquire Jul 22, 2025
998e283
some debugging
dignifiedquire Jul 23, 2025
99cee61
update quinn branch
dignifiedquire Jul 23, 2025
4b60a9a
fixups
dignifiedquire Jul 28, 2025
04b714c
update deps
dignifiedquire Aug 1, 2025
59efdcf
bunch of renames and doc updates, no functional changes
flub Aug 28, 2025
f9924cd
switch to main multipath branch
flub Aug 29, 2025
3058a8e
another rename
flub Aug 29, 2025
11dd04d
Set max_idle_time to a good value
flub Aug 29, 2025
6869faa
fix typo
flub Sep 1, 2025
539a514
Start hooking up a new NodeStateActor
flub Sep 16, 2025
a1a7d89
Rename AllPathsMappedAddr to NodeIdMappedAddr
flub Sep 16, 2025
4b00ad7
Move all mapped addrs to one module
flub Sep 16, 2025
31ab033
allow me to send via the NodeStateActor
flub Sep 16, 2025
5ae71ed
Unify NodeIdMappedAddr and RelayMappedAddr a bit more
flub Sep 16, 2025
599f25d
start implementing AddConnection
flub Sep 17, 2025
2417e6b
make add_node_addr async and send it to the NodeStateActor
flub Sep 18, 2025
9820e60
start handling AddNodeAddr message
flub Sep 18, 2025
ef7a6f3
start sending datagrams from the actor
flub Sep 18, 2025
76f3768
Start adding state for holepunching decisions
flub Sep 23, 2025
1366161
refactor to allow scheduling holepunching attempts
flub Sep 23, 2025
3436423
plug in DiscoState to the NodeStateActor
flub Sep 23, 2025
01bf15c
a sane method to send disco messages
flub Sep 23, 2025
001d16d
Implement starting of holepunching
flub Sep 24, 2025
7a9023f
handle receiving pings
flub Sep 24, 2025
92dd37c
handle receiving CallMeMaybe messages
flub Sep 24, 2025
ac2db4d
open a path when we receive a pong
flub Sep 25, 2025
6d69555
Move open path to not block the actor
flub Sep 29, 2025
12d12c0
select the right path
flub Sep 30, 2025
9e7be2d
close paths on all connections
flub Sep 30, 2025
c1bfdf5
send connections to the NodeStateActor
flub Sep 30, 2025
7b4f056
remove PingActions from magicsock Actor Message
flub Sep 30, 2025
d3b81e7
Kill a bunch of dead code
flub Sep 30, 2025
d9ed9be
use a better way to send to this channel
flub Sep 30, 2025
2c521b0
Hook up connecting check for a valid send addr
flub Oct 1, 2025
21894e7
Do not send incoming packets through the NodeMap
flub Oct 1, 2025
fc97009
delete a whole bunch of unused code
flub Oct 1, 2025
0b4214b
delete some more unused code
flub Oct 1, 2025
a0d5ba1
fine tune logging
flub Oct 2, 2025
65c5d30
try_send is removed. do not log poll_send span twice
flub Oct 2, 2025
e7d9268
Do not holepunch on sending the first message
flub Oct 2, 2025
924f41b
postpone solving this, make the test work
flub Oct 2, 2025
8b1fd0f
Add the path from a new connection, call select path
flub Oct 3, 2025
0522c0e
Do not close the last direct path on a connection
flub Oct 3, 2025
50cc92f
Open some more paths when needed
flub Oct 3, 2025
4a1375f
Add a first relay test
flub Oct 3, 2025
ee20734
Merge branch 'main' into feat-multipath
flub Oct 6, 2025
fdeb6f4
tidy up NodeMap creation
flub Oct 6, 2025
d4fc291
Simplify delayed discovery start
flub Oct 6, 2025
8ba3fd9
Remove try_send impls, no longer used
flub Oct 6, 2025
23ef6fe
remove dead code
flub Oct 6, 2025
7fbd5df
Merge branch 'main' into feat-multipath
flub Oct 6, 2025
3f58e95
Remove MagicStack and mesh_stacks
flub Oct 7, 2025
7ac4dec
dead code
flub Oct 7, 2025
f38e5c2
remove test and delete then unused function
flub Oct 7, 2025
1eeb4bb
start removing old nodestate
flub Oct 7, 2025
145cb18
delete more: path_validity mod is gone
flub Oct 7, 2025
ccb3287
remove more!
flub Oct 7, 2025
80157d4
and more gone
flub Oct 7, 2025
b0957cb
rename temporary name, now the name is free again
flub Oct 7, 2025
a3e58f8
slightly better logging
flub Oct 7, 2025
ce564f1
avoid unneeded mut when not testing
flub Oct 7, 2025
4eb0f07
Convert to canonical IP address in IpSender
flub Oct 7, 2025
28bf51c
remove duplicate adding
flub Oct 8, 2025
befde29
clearer bounds writing
flub Oct 8, 2025
2b2f3c2
Merge branch 'main' into feat-multipath
flub Oct 8, 2025
79cd50c
fix AddrMap impl to update both maps
flub Oct 8, 2025
c2a192e
Always use IPv6 addresses
flub Oct 8, 2025
04e1e3d
tweak logging, this is too noisy
flub Oct 8, 2025
660c39a
random lost import
flub Oct 8, 2025
9da6c1c
keep reducing redundant logging
flub Oct 8, 2025
85cedca
Make transports Addrs use the canonical form
flub Oct 9, 2025
7ee963f
insert PathId::ZERO in the path_id_map
flub Oct 9, 2025
9de1055
fix addr selection for holepunching
flub Oct 9, 2025
ae07d68
bunch of logging imporvements
flub Oct 9, 2025
0ce64c9
remove redundant logging
flub Oct 9, 2025
9a592ce
plug through a minimal PathInfo
flub Oct 9, 2025
eb92bb7
We don't pend CallMeMaybe anymore
flub Oct 9, 2025
6e31e4d
clippy, at last some code quality
flub Oct 9, 2025
008648c
care to enable multipath?
flub Oct 9, 2025
cdc0f90
refactor into more methods, just mechanical
flub Oct 10, 2025
b80de1a
Log transports::Addr a bit more compactly
flub Oct 14, 2025
4200059
some minimal docs
flub Oct 14, 2025
5988e94
rework the test a little to have easier spans
flub Oct 14, 2025
77dfc32
log the correct packet lengths
flub Oct 14, 2025
8b8321b
Set the path status for the initial path
flub Oct 14, 2025
50f98b8
next thing to work on
flub Oct 14, 2025
b4114fa
chore: update git deps
dignifiedquire Oct 14, 2025
583cf9e
Merge remote-tracking branch 'origin/main' into feat-multipath
dignifiedquire Oct 14, 2025
5071e56
Merge remote-tracking branch 'origin/main' into feat-multipath
dignifiedquire Oct 14, 2025
1976993
improve logging and reduce max concurrent paths to 16
flub Oct 15, 2025
e10ac11
Merge branch 'main' into feat-multipath
flub Oct 16, 2025
ce5bdd2
newtype the connection id
flub Oct 16, 2025
7839a4c
make sure that the transport addrs use canonical addresses
flub Oct 17, 2025
fcaea95
No longer need to patch rustls
flub Oct 18, 2025
7d86eff
Only select the path based on open paths
flub Oct 20, 2025
203204c
some fixes to path selection
flub Oct 20, 2025
de2074e
small cleanups, review comments
flub Oct 21, 2025
55d1c29
Merge branch 'main' into feat-multipath
flub Oct 21, 2025
bd680f1
Merge branch 'main' into feat-multipath
flub Oct 21, 2025
9fcdd71
Use TransportAddr to improve PathInfo exposed
flub Oct 21, 2025
de6eefc
compile on wasm again
flub Oct 22, 2025
c2b131f
add relay to a new connection that is direct (#3569)
flub Oct 25, 2025
5930eb5
Merge remote-tracking branch 'origin/main' into feat-multipath-mergemain
Frando Oct 29, 2025
a0edf73
target main-iroh branch
flub Oct 29, 2025
e5ad681
test improvements
flub Oct 31, 2025
e6625cd
Merge remote-tracking branch 'origin/main' into feat-multipath
dignifiedquire Nov 3, 2025
a5ca365
chore: fix typos
dignifiedquire Nov 3, 2025
a710f9d
cleanup docs and references
dignifiedquire Nov 3, 2025
a08af73
wasm fixes
dignifiedquire Nov 3, 2025
4ddc94f
Merge remote-tracking branch 'origin/main' into feat-multipath
dignifiedquire Nov 4, 2025
212e13a
Merge remote-tracking branch 'origin/main' into feat-multipath
Frando Nov 5, 2025
6bec028
Remove obsolete test
flub Nov 5, 2025
dc46e18
fix doc links and clippy
flub Nov 5, 2025
a59f62f
Remove EndpointStateMapInner
flub Nov 5, 2025
8f1cb97
fix: removal of path selection missed a cfg attribute
Frando Nov 6, 2025
0659765
Merge remote-tracking branch 'origin/main' into feat-multipath
Frando Nov 6, 2025
9921a35
bump quinn branch
flub Nov 6, 2025
1a5c4dd
chore: only patch quinn directly
dignifiedquire Nov 6, 2025
147e6bb
bench: add ipv6 option and metrics feature
dignifiedquire Nov 7, 2025
d1c1dab
refactor: improve path watching, add path stats (#3622)
Frando Nov 7, 2025
7887fb5
refactor: minor cleanups in endpoint state (#3626)
Frando Nov 10, 2025
1d5937c
refactor: use Connection::on_closed in endpoint state actor (#3627)
Frando Nov 10, 2025
e0f10ce
refactor(multipath): Make registering connections with the magicsock …
Frando Nov 10, 2025
9d795d3
Merge remote-tracking branch 'origin/main' into feat-multipath
dignifiedquire Nov 11, 2025
6380246
refactor: remove the TransportsSenderActor
dignifiedquire Nov 11, 2025
d0707e8
chore: fixup deny
dignifiedquire Nov 11, 2025
50fdda3
refactor: disallow certain Source variants to be constructed externally
dignifiedquire Nov 11, 2025
2f924d9
refactor: remove Endpoint::conn_type (#3647)
Frando Nov 11, 2025
492b74e
refactor: use boxed watcher, not watchable, on connection (#3632)
Frando Nov 11, 2025
25fe805
refactor(multipath): Stop inactive endpoint actors (#3643)
Frando Nov 12, 2025
e7bf47d
Bump quinn
flub Nov 12, 2025
4b6824c
fix(iroh): Clear `EndpointStateActor::selected_path` once the last co…
matheus23 Nov 12, 2025
8d819f0
perf: various improvements
dignifiedquire Nov 13, 2025
3745e7e
bump quinn
flub Nov 14, 2025
dab9d5f
fix(iroh)!: Correct the error structure (#3663)
flub Nov 14, 2025
c24c5d4
Cleanup some broken tests
flub Nov 14, 2025
103e3c5
fix
flub Nov 14, 2025
13fe787
fix(tests): Also run the tests in isolation in the default profile (#…
flub Nov 14, 2025
1f2db9f
fix test by calling stream.finish() (#3665)
flub Nov 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 62 additions & 69 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,13 @@ unexpected_cfgs = { level = "warn", check-cfg = ["cfg(iroh_docsrs)", "cfg(iroh_l

[workspace.lints.clippy]
unused-async = "warn"


[patch.crates-io]
rustls = { git = "https://github.com/n0-computer/rustls", rev = "da7b54c6621fdeb2defff38242c5b56ef4c5a920" }
netwatch = { git = "https://github.com/n0-computer/net-tools", branch = "feat-multipath" }

[patch."https://github.com/n0-computer/quinn"]
# iroh-quinn = { path = "../iroh-quinn/quinn" }
# iroh-quinn-proto = { path = "../iroh-quinn/quinn-proto" }
# iroh-quinn-udp = { path = "../iroh-quinn/quinn-udp" }
5 changes: 4 additions & 1 deletion iroh-base/src/node_addr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,12 @@ use crate::{NodeId, PublicKey, RelayUrl};
/// [discovery]: https://docs.rs/iroh/*/iroh/index.html#node-discovery
/// [home relay]: https://docs.rs/iroh/*/iroh/relay/index.html
/// [Relay server]: https://docs.rs/iroh/*/iroh/index.html#relay-servers
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(
derive_more::Debug, Clone, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash,
)]
pub struct NodeAddr {
/// The node's identifier.
#[debug("{}", node_id.fmt_short())]
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should be reverted before merging

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, do you think so? I found it really annoying to have to look at those full public keys when we debug-log a NodeAddr. I considered using the alternative-debug format, but unfortunately tracing only has ? and % support in their macros, for Debug and Display respectively. I didn't thyink there's any strict rule about how a Debug should look? It's not like you can eval() this back into a thing like e.g. Python.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it reduces the ability to reproduce information, that's why I am concerend about doing it by default. you can copy and paste the nodeid, relayurl and socket addrs currently, but suddenly you can't do it for the nodeid anymore

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A sigil for alternate display in tracing would be the best solution indeed. Looked again and found tokio-rs/tracing#3258 - I now pinged the tokio discord about how to move it forward (pr is open for 6 months without comments)

pub node_id: NodeId,
/// The node's home relay url.
pub relay_url: Option<RelayUrl>,
Expand Down
4 changes: 2 additions & 2 deletions iroh-relay/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ postcard = { version = "1", default-features = false, features = [
"use-std",
"experimental-derive",
] }
quinn = { package = "iroh-quinn", version = "0.14.0", default-features = false, features = ["rustls-ring"] }
quinn-proto = { package = "iroh-quinn-proto", version = "0.13.0" }
quinn = { package = "iroh-quinn", git = "https://github.com/n0-computer/quinn", branch = "multipath-quinn-0.11.x", default-features = false, features = ["rustls-ring"] }
quinn-proto = { package = "iroh-quinn-proto", git = "https://github.com/n0-computer/quinn", branch = "multipath-quinn-0.11.x" }
rand = "0.9.2"
reqwest = { version = "0.12", default-features = false, features = [
"rustls-tls",
Expand Down
Loading