aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs8
-rw-r--r--src/route.rs16
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))
}