aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-11-13 17:13:41 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-11-13 17:13:41 +0100
commitc5c79df2d2a6e598f64c9cf75e53e018e66678f1 (patch)
treedaf078d8efb78e7f7a2d0aaad9b6cc39279129df
parente096a3be05c484935594d84ae10d372d9bfe7738 (diff)
detect ppp0 device presence rather than ppp ds config
Fixes an issue where old, unestablished sessions counted as up and caused errors on startup.
-rw-r--r--src/main.rs33
1 files changed, 18 insertions, 15 deletions
diff --git a/src/main.rs b/src/main.rs
index 59a0cd9..46f063a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -4,7 +4,6 @@ use rsdsl_dhcp6::{Error, Result};
use std::fs::{self, File};
use std::net::{IpAddr, Ipv6Addr, SocketAddr, SocketAddrV6};
-use std::path::Path;
use std::str::FromStr;
use std::time::SystemTime;
@@ -114,20 +113,6 @@ async fn main() -> Result<()> {
let mut sigusr1 = signal(SignalKind::user_defined1())?;
- println!("[info] wait for pppoe");
-
- let ds_config_path = Path::new(rsdsl_ip_config::LOCATION);
- let mut already_up = true;
- while !ds_config_path.exists() {
- already_up = false;
- sleep(Duration::from_secs(8)).await;
- }
-
- if already_up {
- println!("[info] <> ipv6 link already up");
- dhcp6c.up();
- }
-
let sock = Socket::new(Domain::IPV6, Type::DGRAM, None)?;
sock.set_only_v6(true)?;
@@ -142,6 +127,24 @@ async fn main() -> Result<()> {
let sock: UdpSocket = sock.try_into()?;
+ println!("[info] wait for pppoe");
+
+ let mut already_up = true;
+ while let Err(e) = sock.bind_device(Some("ppp0".as_bytes())) {
+ if e.raw_os_error() == Some(19) {
+ // "No such device" doesn't have an ErrorKind.
+ already_up = false;
+ sleep(Duration::from_secs(8)).await;
+ } else {
+ return Err(e.into());
+ }
+ }
+
+ if already_up {
+ println!("[info] <> ipv6 link already up");
+ dhcp6c.up();
+ }
+
let mut buf = [0; 1500];
loop {
tokio::select! {