aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-10-15 13:21:24 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-10-15 13:21:24 +0200
commita30e06c06226f03575cec42236ef9370dbcf3ab2 (patch)
tree77bbdbcc1579f56ef5e2f683ee0e06efa2c8efe4 /src/main.rs
parent3fcfa47368a09eb53808bad844c4f1b80bc7c8c7 (diff)
configure ppp0 on SIGUSR1
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs31
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> {