Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
744 changes: 382 additions & 362 deletions Cargo.lock

Large diffs are not rendered by default.

13 changes: 6 additions & 7 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ members = [
resolver = "2"

[workspace.dependencies]
iroh-proxy-utils = { git = "https://github.com/n0-computer/iroh-proxy-utils", branch = "main" }
iroh-proxy-utils = { git = "https://github.com/n0-computer/iroh-proxy-utils", branch = "deps/iroh-096" }
lib = { path = "lib" }
arc-swap = "1.8.0"
axum = "0.7"
Expand All @@ -21,17 +21,16 @@ snafu = "0.8.6"
hex = "0.4.3"
hyper = "1"
hyper-util = { version = "0.1.19", features = ["full"] }
iroh = { version = "0.95", default-features = false }
iroh-base = { version = "0.95" }
iroh-tickets = "0.2"
iroh = { version = "0.96", default-features = false }
iroh-relay = { version = "0.96", default-features = false }
iroh-base = { version = "0.96" }
iroh-tickets = "0.3"
iroh-metrics = "0.38"
iroh-n0des = { version = "0.8", features = ["tickets"] }
iroh-relay = { version = "0.95" }
iroh-n0des = { version = "0.9", features = ["tickets"] }
log = "0.4"
open = "5"
openidconnect = "4.0.1"
postcard = "1"
quinn = { version = "0.14", package = "iroh-quinn" }
rand = "0.9"
reqwest = { version = "0.12", features = ["rustls-tls", "json"] }
serde = { version = "1", features = ["derive"] }
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM rust:1.88-bookworm AS builder
FROM rust:1.93-bookworm AS builder

WORKDIR /app

Expand Down
16 changes: 8 additions & 8 deletions cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ mod dns_dev;
mod tunnel_dev;

use lib::{
Advertisment, AdvertismentTicket, ConnectNode, DiscoveryMode, ListenNode, ProxyState, Repo,
AddressLookupMode, Advertisment, AdvertismentTicket, ConnectNode, ListenNode, ProxyState, Repo,
TcpProxyData,
datum_cloud::{ApiEnv, DatumCloudClient},
};
Expand Down Expand Up @@ -150,7 +150,7 @@ pub struct ServeArgs {
pub port: u16,
/// Discovery mode for connection details.
#[clap(long, value_enum)]
pub discovery: Option<DiscoveryModeArg>,
pub address_lookup: Option<AddressLookupArg>,
/// DNS origin for _iroh.<endpoint-id>.<origin> lookups.
#[clap(long)]
pub dns_origin: Option<String>,
Expand All @@ -166,7 +166,7 @@ pub enum GatewayModeArg {
}

#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum DiscoveryModeArg {
pub enum AddressLookupArg {
Default,
Dns,
Hybrid,
Expand Down Expand Up @@ -294,11 +294,11 @@ async fn main() -> n0_error::Result<()> {
let bind_addr: SocketAddr = (args.bind_addr, args.port).into();
let secret_key = repo.gateway_key().await?;
let mut config = repo.gateway_config().await?;
if let Some(discovery) = args.discovery {
config.common.discovery_mode = match discovery {
DiscoveryModeArg::Default => DiscoveryMode::Default,
DiscoveryModeArg::Dns => DiscoveryMode::Dns,
DiscoveryModeArg::Hybrid => DiscoveryMode::Hybrid,
if let Some(discovery) = args.address_lookup {
config.common.address_lookup = match discovery {
AddressLookupArg::Default => AddressLookupMode::Default,
AddressLookupArg::Dns => AddressLookupMode::Dns,
AddressLookupArg::Hybrid => AddressLookupMode::Hybrid,
};
}
if let Some(origin) = args.dns_origin {
Expand Down
3 changes: 0 additions & 3 deletions lib/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ n0-future.workspace = true
open.workspace = true
openidconnect.workspace = true
postcard.workspace = true
quinn.workspace = true
rand.workspace = true
reqwest.workspace = true
serde.workspace = true
Expand All @@ -41,8 +40,6 @@ tracing-subscriber.workspace = true
tracing.workspace = true
url.workspace = true
uuid.workspace = true
iroh-blobs = "0.97.0"
httparse = "1.10.1"
ttl_cache = "0.5.1"
askama = "0.15.1"
k8s-openapi = { version = "0.26.1", features = ["v1_30"] }
Expand Down
4 changes: 2 additions & 2 deletions lib/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum DiscoveryMode {
pub enum AddressLookupMode {
#[default]
/// Use the built-in n0des discovery defaults.
Default,
Expand All @@ -36,7 +36,7 @@ pub struct Config {

/// How the gateway resolves endpoint connection details.
#[serde(default)]
pub discovery_mode: DiscoveryMode,
pub address_lookup: AddressLookupMode,

/// DNS origin domain used for _iroh.<z32-endpoint-id>.<origin> lookups.
///
Expand Down
2 changes: 1 addition & 1 deletion lib/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ mod repo;
mod state;
pub mod tunnels;

pub use config::{Config, DiscoveryMode, GatewayConfig};
pub use config::{AddressLookupMode, Config, GatewayConfig};
pub use heartbeat::HeartbeatAgent;
pub use node::*;
pub use project_control_plane::ProjectControlPlaneClient;
Expand Down
34 changes: 18 additions & 16 deletions lib/src/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@ use std::{
};

use iroh::{
Endpoint, EndpointId, SecretKey, discovery::dns::DnsDiscovery, endpoint::default_relay_mode,
protocol::Router,
Endpoint, EndpointId, SecretKey, address_lookup::dns::DnsAddressLookup, dns::DnsResolver,
endpoint::default_relay_mode, protocol::Router,
};
use iroh_n0des::ApiSecret;
use iroh_proxy_utils::{ALPN as IROH_HTTP_CONNECT_ALPN, HttpProxyRequest, HttpProxyRequestKind};
use iroh_proxy_utils::{
downstream::{DownstreamProxy, EndpointAuthority, ProxyMode},
upstream::{AuthError, AuthHandler, UpstreamProxy},
};
use iroh_relay::dns::{DnsProtocol, DnsResolver};
use iroh_relay::dns::DnsProtocol;
use n0_error::{AnyError, Result, StackResultExt, StdResultExt, stack_error};
use n0_future::{IterExt, StreamExt, task::AbortOnDropHandle};
use tokio::{
Expand Down Expand Up @@ -95,10 +95,12 @@ impl ListenNode {
async move {
loop {
let metrics = endpoint.metrics();
let recv_total = metrics.magicsock.recv_data_ipv4.get()
+ metrics.magicsock.recv_data_ipv6.get()
+ metrics.magicsock.recv_data_relay.get();
let send_total = metrics.magicsock.send_data.get();
let recv_total = metrics.socket.recv_data_ipv4.get()
+ metrics.socket.recv_data_ipv6.get()
+ metrics.socket.recv_data_relay.get();
let send_total = metrics.socket.send_ipv4.get()
+ metrics.socket.send_ipv6.get()
+ metrics.socket.send_relay.get();
let update = MetricsUpdate {
send: send_total,
recv: recv_total,
Expand Down Expand Up @@ -448,23 +450,23 @@ impl OutboundProxyHandle {
/// Build a new iroh endpoint, applying all relevant details from Configuration
/// to the base endpoint setup
pub(crate) async fn build_endpoint(secret_key: SecretKey, common: &Config) -> Result<Endpoint> {
let mut builder = match common.discovery_mode {
crate::config::DiscoveryMode::Dns => {
let mut builder = match common.address_lookup {
crate::config::AddressLookupMode::Dns => {
Endpoint::empty_builder(default_relay_mode()).secret_key(secret_key)
}
crate::config::DiscoveryMode::Default | crate::config::DiscoveryMode::Hybrid => {
crate::config::AddressLookupMode::Default | crate::config::AddressLookupMode::Hybrid => {
Endpoint::builder().secret_key(secret_key)
}
};
if let Some(addr) = common.ipv4_addr {
builder = builder.bind_addr_v4(addr);
builder = builder.bind_addr(addr)?;
}
if let Some(addr) = common.ipv6_addr {
builder = builder.bind_addr_v6(addr);
builder = builder.bind_addr(addr)?;
}
match common.discovery_mode {
crate::config::DiscoveryMode::Default => {}
crate::config::DiscoveryMode::Dns | crate::config::DiscoveryMode::Hybrid => {
match common.address_lookup {
crate::config::AddressLookupMode::Default => {}
crate::config::AddressLookupMode::Dns | crate::config::AddressLookupMode::Hybrid => {
let origin = match &common.dns_origin {
Some(origin) => origin.clone(),
None => n0_error::bail_any!(
Expand All @@ -477,7 +479,7 @@ pub(crate) async fn build_endpoint(secret_key: SecretKey, common: &Config) -> Re
.build();
builder = builder.dns_resolver(resolver);
}
builder = builder.discovery(DnsDiscovery::builder(origin));
builder = builder.address_lookup(DnsAddressLookup::builder(origin));
}
}
let endpoint = builder.bind().await?;
Expand Down
16 changes: 8 additions & 8 deletions lib/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::net::Ipv4Addr;
use http_body_util::BodyExt;
use hyper::{Request, StatusCode, client::conn::http2};
use hyper_util::rt::{TokioExecutor, TokioIo};
use iroh::{Endpoint, discovery::static_provider::StaticProvider};
use iroh::{Endpoint, address_lookup::MemoryLookup};
use n0_error::{Result, StdResultExt};
use n0_future::task::AbortOnDropHandle;
use n0_tracing_test::traced_test;
Expand All @@ -15,19 +15,19 @@ use tokio::{
use crate::{Advertisment, ListenNode, ProxyState, Repo, TcpProxyData, gateway};

#[derive(Default)]
struct TestDiscovery(StaticProvider);
struct TestAddressLookup(MemoryLookup);

impl TestDiscovery {
impl TestAddressLookup {
fn add(&self, endpoint: &Endpoint) {
endpoint.discovery().add(self.0.clone());
endpoint.address_lookup().add(self.0.clone());
self.0.add_endpoint_info(endpoint.addr());
}
}

#[tokio::test]
#[traced_test]
async fn gateway_end_to_end_to_upstream_http() -> Result<()> {
let discovery = TestDiscovery::default();
let discovery = TestAddressLookup::default();

let n0des_endpoint = Endpoint::bind().await?;
discovery.add(&n0des_endpoint);
Expand Down Expand Up @@ -86,7 +86,7 @@ async fn gateway_end_to_end_to_upstream_http() -> Result<()> {
#[tokio::test]
#[traced_test]
async fn gateway_forward_connect_tunnel() -> Result<()> {
let discovery = TestDiscovery::default();
let discovery = TestAddressLookup::default();

let n0des_endpoint = Endpoint::bind().await?;
discovery.add(&n0des_endpoint);
Expand Down Expand Up @@ -158,7 +158,7 @@ async fn gateway_forward_connect_tunnel() -> Result<()> {
#[tokio::test]
#[traced_test]
async fn gateway_forward_h2c_requests_are_stable() -> Result<()> {
let discovery = TestDiscovery::default();
let discovery = TestAddressLookup::default();

let n0des_endpoint = Endpoint::bind().await?;
discovery.add(&n0des_endpoint);
Expand Down Expand Up @@ -234,7 +234,7 @@ async fn gateway_forward_h2c_requests_are_stable() -> Result<()> {
#[tokio::test]
#[traced_test]
async fn gateway_forward_h2c_handles_closed_origin_connections() -> Result<()> {
let discovery = TestDiscovery::default();
let discovery = TestAddressLookup::default();

let n0des_endpoint = Endpoint::bind().await?;
discovery.add(&n0des_endpoint);
Expand Down
4 changes: 2 additions & 2 deletions n0des-local/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ publish = false
[dependencies]
iroh = { workspace = true }
iroh-n0des = { workspace = true, features = ["tickets"] }
irpc = "0.11"
irpc-iroh = "0.11"
irpc = "0.12"
irpc-iroh = "0.12"
n0-error = { workspace = true }
rand = { workspace = true }
tokio = { workspace = true }
Expand Down
1 change: 0 additions & 1 deletion ui/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ iroh-metrics.workspace = true
lib.workspace = true
n0-future.workspace = true
open.workspace = true
quinn.workspace = true
rand.workspace = true
tokio.workspace = true
tokio-util.workspace = true
Expand Down