diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 8 | ||||
-rw-r--r-- | src/route.rs | 16 |
2 files changed, 16 insertions, 8 deletions
diff --git a/src/main.rs b/src/main.rs index a06e9f6..2830a78 100644 --- a/src/main.rs +++ b/src/main.rs @@ -50,7 +50,13 @@ fn configure_rsppp0() -> Result<()> { addr::flush("rsppp0".into())?; addr::add("rsppp0".into(), IpAddr::V4(ip_config.addr), 32)?; - route::add4(Ipv4Addr::UNSPECIFIED, 0, ip_config.rtr, "rsppp0".into())?; + route::add4(ip_config.rtr, 32, None, "rsppp0".into())?; + route::add4( + Ipv4Addr::UNSPECIFIED, + 0, + Some(ip_config.rtr), + "rsppp0".into(), + )?; Ok(()) } diff --git a/src/route.rs b/src/route.rs index 436a14b..7d95300 100644 --- a/src/route.rs +++ b/src/route.rs @@ -5,7 +5,7 @@ use std::net::Ipv4Addr; use futures_util::TryStreamExt; use tokio::runtime::Runtime; -async fn do_add4(dst: Ipv4Addr, prefix_len: u8, rtr: Ipv4Addr, link: String) -> Result<()> { +async fn do_add4(dst: Ipv4Addr, prefix_len: u8, rtr: Option<Ipv4Addr>, link: String) -> Result<()> { let (conn, handle, _) = rtnetlink::new_connection()?; tokio::spawn(conn); @@ -20,19 +20,21 @@ async fn do_add4(dst: Ipv4Addr, prefix_len: u8, rtr: Ipv4Addr, link: String) -> let id = link.header.index; - handle + let mut add = handle .route() .add() .v4() .destination_prefix(dst, prefix_len) - .gateway(rtr) - .output_interface(id) - .execute() - .await?; + .output_interface(id); + + if let Some(rtr) = rtr { + add = add.gateway(rtr); + } + add.execute().await?; Ok(()) } -pub fn add4(dst: Ipv4Addr, prefix_len: u8, rtr: Ipv4Addr, link: String) -> Result<()> { +pub fn add4(dst: Ipv4Addr, prefix_len: u8, rtr: Option<Ipv4Addr>, link: String) -> Result<()> { Runtime::new()?.block_on(do_add4(dst, prefix_len, rtr, link)) } |