diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-10-14 13:28:52 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-10-14 13:28:52 +0200 |
commit | ac8a6a12108bc1f366dd72f3fcdbd9ba1a9a3eb6 (patch) | |
tree | 6fbc80661c7805e9612e0f4ab0fc6ecb6c702187 /src | |
parent | 581daea52fac3a88883cb3b18801600920db90e5 (diff) |
multicast new prefixes on SIGUSR1
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs index f5188c2..fe857de 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,7 @@ use ipnet::Ipv6Net; use pnet_packet::icmpv6::ndp::{MutableRouterAdvertPacket, NdpOption, NdpOptionType, RouterAdvert}; use pnet_packet::icmpv6::{Icmpv6Code, Icmpv6Type}; use rsdsl_netlinkd::link; +use signal_hook::{consts::SIGUSR1, iterator::Signals}; use socket2::{Domain, Protocol, SockAddr, Socket, Type}; use thiserror::Error; @@ -76,6 +77,22 @@ fn run(link: String) -> Result<()> { thread::sleep(Duration::from_secs(1200)); }); + // Send NDP RAs when SIGUSR1 is received. + // This updates the prefixes whenever netlinkd informs us of a change. + let sock2 = sock.try_clone()?; + let link2 = link.clone(); + thread::spawn(move || match Signals::new([SIGUSR1]) { + Ok(mut signals) => { + for _ in signals.forever() { + match send_ra_multicast(&sock2, link2.clone(), ifi) { + Ok(_) => {} + Err(e) => println!("[warn] sig multicast ra {}: {}", link2, e), + } + } + } + Err(e) => println!("[warn] no signal handling on {}: {}", link2, e), + }); + loop { let mut buf = [MaybeUninit::new(0); 1500]; let (n, raddr) = sock.recv_from(&mut buf)?; |