aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock6
-rw-r--r--Cargo.toml4
-rw-r--r--src/main.rs44
3 files changed, 26 insertions, 28 deletions
diff --git a/Cargo.lock b/Cargo.lock
index df93fe4..78cd880 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -461,15 +461,15 @@ dependencies = [
[[package]]
name = "rsdsl_ip_config"
-version = "0.1.0"
-source = "git+https://github.com/rsdsl/ip_config.git#e13adb9cc9367ad93f1e947335b0d56108015999"
+version = "0.2.1"
+source = "git+https://github.com/rsdsl/ip_config.git#26c15096a1f4b69c6c06b5373b507c9dbbfc54c5"
dependencies = [
"serde",
]
[[package]]
name = "rsdsl_netlinkd"
-version = "0.3.2"
+version = "0.4.0"
dependencies = [
"futures-util",
"netlink-packet-route",
diff --git a/Cargo.toml b/Cargo.toml
index cf6ef02..9b78d23 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "rsdsl_netlinkd"
-version = "0.3.2"
+version = "0.4.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -9,7 +9,7 @@ edition = "2021"
futures-util = "0.3.27"
netlink-packet-route = "0.17.0"
notify = "5.1.0"
-rsdsl_ip_config = { git = "https://github.com/rsdsl/ip_config.git", version = "0.1.0" }
+rsdsl_ip_config = { git = "https://github.com/rsdsl/ip_config.git", version = "0.2.1" }
rtnetlink = "0.13.1"
serde_json = "1.0"
thiserror = "1.0"
diff --git a/src/main.rs b/src/main.rs
index f90b840..0f5e9ee 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -2,14 +2,14 @@ use rsdsl_netlinkd::error::Result;
use rsdsl_netlinkd::{addr, link, route};
use std::fs::{self, File};
-use std::net::{IpAddr, Ipv4Addr};
+use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
use std::path::Path;
use std::thread;
use std::time::Duration;
use notify::event::{CreateKind, ModifyKind};
use notify::{Event, EventKind, RecursiveMode, Watcher};
-use rsdsl_ip_config::IpConfig;
+use rsdsl_ip_config::DsConfig;
fn main() -> Result<()> {
println!("wait for eth0");
@@ -97,32 +97,30 @@ fn setup_vlans(base: &str) -> Result<()> {
}
fn configure_wan() {
- match configure_rsppp0() {
- Ok(_) => println!("configure rsppp0 with pppoe data"),
- Err(e) => println!("can't configure rsppp0: {:?}", e),
+ match configure_ppp0() {
+ Ok(_) => println!("configure ppp0 with pppoe data"),
+ Err(e) => println!("can't configure ppp0: {:?}", e),
}
}
-fn configure_rsppp0() -> Result<()> {
- // I've never seen ISPs tunnel IPv6 in PPP and haven't implemented it.
- fs::write("/proc/sys/net/ipv6/conf/rsppp0/disable_ipv6", "1")?;
-
- link::set_mtu("rsppp0".into(), 1492)?;
- link::up("rsppp0".into())?;
+fn configure_ppp0() -> Result<()> {
+ link::set_mtu("ppp0".into(), 1492)?;
+ link::up("ppp0".into())?;
let mut file = File::open(rsdsl_ip_config::LOCATION)?;
- let ip_config: IpConfig = serde_json::from_reader(&mut file)?;
-
- addr::flush("rsppp0".into())?;
- addr::add("rsppp0".into(), IpAddr::V4(ip_config.addr), 32)?;
-
- route::add4(ip_config.rtr, 32, None, "rsppp0".into())?;
- route::add4(
- Ipv4Addr::UNSPECIFIED,
- 0,
- Some(ip_config.rtr),
- "rsppp0".into(),
- )?;
+ let ip_config: DsConfig = serde_json::from_reader(&mut file)?;
+
+ addr::flush("ppp0".into())?;
+
+ if let Some(v4) = ip_config.v4 {
+ addr::add("ppp0".into(), IpAddr::V4(v4.addr), 32)?;
+ route::add4(Ipv4Addr::UNSPECIFIED, 0, None, "ppp0".into())?;
+ }
+
+ if let Some(v6) = ip_config.v6 {
+ addr::add("ppp0".into(), IpAddr::V6(v6.laddr), 64)?;
+ route::add6(Ipv6Addr::UNSPECIFIED, 0, None, "ppp0".into())?;
+ }
Ok(())
}