|
1 | 1 | use std::{ |
2 | | - net::{IpAddr, Ipv4Addr, SocketAddr}, |
| 2 | + net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}, |
3 | 3 | sync::Arc, |
4 | 4 | time::{Duration, Instant}, |
5 | 5 | }; |
@@ -32,13 +32,15 @@ pub fn server_endpoint( |
32 | 32 | let mut server_config = quinn::ServerConfig::with_single_cert(cert_chain, key).unwrap(); |
33 | 33 | server_config.transport = Arc::new(transport_config(opt.max_streams, opt.initial_mtu)); |
34 | 34 |
|
| 35 | + let addr = if opt.use_ipv6 { |
| 36 | + IpAddr::V6(Ipv6Addr::LOCALHOST) |
| 37 | + } else { |
| 38 | + IpAddr::V4(Ipv4Addr::LOCALHOST) |
| 39 | + }; |
| 40 | + |
35 | 41 | let endpoint = { |
36 | 42 | let _guard = rt.enter(); |
37 | | - quinn::Endpoint::server( |
38 | | - server_config, |
39 | | - SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 0), |
40 | | - ) |
41 | | - .unwrap() |
| 43 | + quinn::Endpoint::server(server_config, SocketAddr::new(addr, 0)).unwrap() |
42 | 44 | }; |
43 | 45 | let server_addr = endpoint.local_addr().unwrap(); |
44 | 46 | (server_addr, endpoint) |
@@ -69,8 +71,13 @@ pub async fn connect_client( |
69 | 71 | server_cert: CertificateDer<'_>, |
70 | 72 | opt: Opt, |
71 | 73 | ) -> Result<(::quinn::Endpoint, Connection)> { |
72 | | - let endpoint = |
73 | | - quinn::Endpoint::client(SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 0)).unwrap(); |
| 74 | + let addr = if opt.use_ipv6 { |
| 75 | + IpAddr::V6(Ipv6Addr::LOCALHOST) |
| 76 | + } else { |
| 77 | + IpAddr::V4(Ipv4Addr::LOCALHOST) |
| 78 | + }; |
| 79 | + |
| 80 | + let endpoint = quinn::Endpoint::client(SocketAddr::new(addr, 0)).unwrap(); |
74 | 81 |
|
75 | 82 | let mut roots = RootCertStore::empty(); |
76 | 83 | roots.add(server_cert).anyerr()?; |
@@ -103,11 +110,11 @@ pub fn transport_config(max_streams: usize, initial_mtu: u16) -> TransportConfig |
103 | 110 | let mut config = TransportConfig::default(); |
104 | 111 | config.max_concurrent_uni_streams(max_streams.try_into().unwrap()); |
105 | 112 | config.initial_mtu(initial_mtu); |
| 113 | + config.max_concurrent_multipath_paths(16); |
106 | 114 |
|
107 | | - // TODO: re-enable when we upgrade quinn version |
108 | | - // let mut acks = quinn::AckFrequencyConfig::default(); |
109 | | - // acks.ack_eliciting_threshold(10u32.into()); |
110 | | - // config.ack_frequency_config(Some(acks)); |
| 115 | + let mut acks = quinn::AckFrequencyConfig::default(); |
| 116 | + acks.ack_eliciting_threshold(10u32.into()); |
| 117 | + config.ack_frequency_config(Some(acks)); |
111 | 118 |
|
112 | 119 | config |
113 | 120 | } |
|
0 commit comments