diff options
author | Himbeer <himbeer@disroot.org> | 2025-03-18 15:46:57 +0100 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2025-03-18 15:47:50 +0100 |
commit | 23c170d7ee9a485f9136dfbf1da02e9a72df1cd0 (patch) | |
tree | 3f88117af0a33c7dca53be3319f185d746595df2 /src | |
parent | f023bacabe03d7b522823283f2fb207ee56689bd (diff) |
This includes assigning metrics to default routes in such a way that
native connectivity is always preferred over DS-Lite.
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/src/main.rs b/src/main.rs index 457930f..b6f44ef 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ use rsdsl_netlinklib::blocking::Connection; +use rsdsl_netlinklib::route::{Route4, Route6}; use std::fs::{self, File}; use std::io; @@ -196,14 +197,30 @@ fn configure_wan(conn: &Connection) -> Result<()> { if let Some(v4) = ds_config.v4 { conn.address_add("ppp0".to_string(), v4.addr.into(), 32)?; - conn.route_add4(Ipv4Addr::UNSPECIFIED, 0, None, "ppp0".to_string())?; + conn.route_add4(Route4 { + dst: Ipv4Addr::UNSPECIFIED, + prefix_len: 0, + rtr: None, + on_link: false, + table: None, + metric: Some(100), + link: String::from("ppp0"), + })?; println!("[info] config ppp0 {}/32", v4.addr); } if let Some(v6) = ds_config.v6 { conn.address_add_link_local("ppp0".to_string(), v6.laddr.into(), 64)?; - conn.route_add6(Ipv6Addr::UNSPECIFIED, 0, None, "ppp0".to_string())?; + conn.route_add6(Route6 { + dst: Ipv6Addr::UNSPECIFIED, + prefix_len: 0, + rtr: None, + on_link: false, + table: None, + metric: Some(100), + link: String::from("ppp0"), + })?; println!("[info] config ppp0 ll {}/64", v6.laddr); @@ -255,12 +272,15 @@ fn configure_wan(conn: &Connection) -> Result<()> { conn.address_add("dslite0".to_string(), ADDR_B4.into(), 29)?; if ds_config.v4.is_none() { - conn.route_add4( - Ipv4Addr::UNSPECIFIED, - 0, - Some(ADDR_AFTR), - "dslite0".to_string(), - )?; + conn.route_add4(Route4 { + dst: Ipv4Addr::UNSPECIFIED, + prefix_len: 0, + rtr: Some(ADDR_AFTR), + on_link: false, + table: None, + metric: Some(50), + link: String::from("dslite0"), + })?; } println!("[info] config dslite0 {}/29", ADDR_B4); |