diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-10-15 13:21:24 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-10-15 13:21:24 +0200 |
commit | a30e06c06226f03575cec42236ef9370dbcf3ab2 (patch) | |
tree | 77bbdbcc1579f56ef5e2f683ee0e06efa2c8efe4 /src/main.rs | |
parent | 3fcfa47368a09eb53808bad844c4f1b80bc7c8c7 (diff) |
configure ppp0 on SIGUSR1
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs index 4e681de..e659d9d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -105,7 +105,36 @@ fn configure_wan_logged() { } fn configure_wan() -> Result<()> { - todo!() + if let Some(ds_config) = read_ds_config_optional() { + link::set_mtu("ppp0".to_string(), 1492)?; + link::up("ppp0".to_string())?; + + // Deconfigure everything, just to be safe. + addr::flush("ppp0".to_string())?; + route::flush("ppp0".to_string())?; + + if let Some(v4) = ds_config.v4 { + addr::add("ppp0".to_string(), v4.addr.into(), 32)?; + route::add4(Ipv4Addr::UNSPECIFIED, 0, None, "ppp0".to_string())?; + } + + if let Some(v6) = ds_config.v6 { + addr::add("ppp0".to_string(), v6.laddr.into(), 64)?; + route::add6(Ipv6Addr::UNSPECIFIED, 0, None, "ppp0".to_string())?; + } + } + + Ok(()) +} + +fn read_ds_config_optional() -> Option<DsConfig> { + let mut file = File::open(rsdsl_ip_config::LOCATION).ok()?; + serde_json::from_reader(&mut file).ok() +} + +fn read_pd_config_optional() -> Option<PdConfig> { + let mut file = File::open(rsdsl_pd_config::LOCATION).ok()?; + serde_json::from_reader(&mut file).ok() } fn next_ifid1<T: Iterator<Item = Ipv6Net>>(subnets: &mut T) -> Result<Ipv6Addr> { |