aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-11-17 18:31:51 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-11-17 18:31:51 +0100
commit89469644f07f3ca9f0f2301fab7883d089865a9c (patch)
tree10f0bb08cc28bca4fa443a9493c87cf324509810
parentb29b330ec84c70112d54a4a0e44ab5670e46190d (diff)
move from linkaddrs to netlinklib
-rw-r--r--Cargo.lock13
-rw-r--r--Cargo.toml3
-rw-r--r--src/main.rs27
3 files changed, 16 insertions, 27 deletions
diff --git a/Cargo.lock b/Cargo.lock
index c71f3e1..6fec15a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -206,18 +206,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
[[package]]
-name = "linkaddrs"
-version = "0.1.0"
-source = "git+https://github.com/HimbeerserverDE/linkaddrs.git#df47e5f96a680f8052ab238e985d683df386368b"
-dependencies = [
- "futures",
- "ipnet",
- "netlink-packet-route",
- "rtnetlink",
- "tokio",
-]
-
-[[package]]
name = "log"
version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -475,7 +463,6 @@ name = "rsdsl_radvd"
version = "0.1.0"
dependencies = [
"ipnet",
- "linkaddrs",
"pnet_packet",
"rsdsl_netlinklib",
"signal-hook",
diff --git a/Cargo.toml b/Cargo.toml
index 467d3ed..811467f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -5,9 +5,8 @@ edition = "2021"
[dependencies]
ipnet = "2.7.1"
-linkaddrs = { git = "https://github.com/HimbeerserverDE/linkaddrs.git", version = "0.1.0" }
pnet_packet = "0.33.0"
-rsdsl_netlinklib = { git = "https://github.com/rsdsl/netlinklib.git", version = "0.3.0", features = ["blocking", "status"], default-features = false }
+rsdsl_netlinklib = { git = "https://github.com/rsdsl/netlinklib.git", version = "0.3.0", features = ["addr", "blocking", "status"], default-features = false }
signal-hook = "0.3.17"
socket2 = { version = "0.5.2", features = ["all"] }
thiserror = "1.0"
diff --git a/src/main.rs b/src/main.rs
index b4a03ce..ef28dfe 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,13 +1,13 @@
use std::io;
use std::mem::MaybeUninit;
-use std::net::{Ipv6Addr, SocketAddrV6};
+use std::net::{IpAddr, Ipv6Addr, SocketAddrV6};
use std::thread;
use std::time::Duration;
use ipnet::Ipv6Net;
use pnet_packet::icmpv6::ndp::{MutableRouterAdvertPacket, NdpOption, NdpOptionType, RouterAdvert};
use pnet_packet::icmpv6::{Icmpv6Code, Icmpv6Type};
-use rsdsl_netlinklib::blocking::link;
+use rsdsl_netlinklib::blocking::{addr, link};
use signal_hook::{consts::SIGUSR1, iterator::Signals};
use socket2::{Domain, Protocol, SockAddr, Socket, Type};
use thiserror::Error;
@@ -20,8 +20,6 @@ enum Error {
#[error("io: {0}")]
Io(#[from] io::Error),
- #[error("linkaddrs: {0}")]
- LinkAddrs(#[from] linkaddrs::Error),
#[error("netlinklib error: {0}")]
Netlinklib(#[from] rsdsl_netlinklib::Error),
}
@@ -119,7 +117,7 @@ fn run(link: String) -> Result<()> {
}
}
-fn create_ra_pkt(link: String) -> Result<(Vec<u8>, Vec<Ipv6Net>)> {
+fn create_ra_pkt(link: String) -> Result<(Vec<u8>, Vec<Ipv6Addr>)> {
let global = Ipv6Net::new(Ipv6Addr::new(0x2000, 0, 0, 0, 0, 0, 0, 0), 3).unwrap();
let mut rdnss_data = [
@@ -136,10 +134,15 @@ fn create_ra_pkt(link: String) -> Result<(Vec<u8>, Vec<Ipv6Net>)> {
}];
let mut prefixes = Vec::new();
- for prefix in linkaddrs::ipv6_addresses(link)?
- .into_iter()
- .filter(|addr| global.contains(addr))
- {
+ let ipv6_addrs = addr::get(link)?.into_iter().filter_map(|addr| {
+ if let IpAddr::V6(v6) = addr {
+ Some(v6)
+ } else {
+ None
+ }
+ });
+
+ for prefix in ipv6_addrs.filter(|addr| global.contains(addr)) {
let mut prefix_data = [
64, // Prefix Length, always /64
0xc0, // Flags: On-Link + SLAAC
@@ -148,7 +151,7 @@ fn create_ra_pkt(link: String) -> Result<(Vec<u8>, Vec<Ipv6Net>)> {
0, 0, 0, 0, // Reserved
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // Prefix (inserted later)
];
- prefix_data[14..].copy_from_slice(&prefix.trunc().addr().octets());
+ prefix_data[14..].copy_from_slice(&prefix.octets());
prefixes.push(prefix);
@@ -189,7 +192,7 @@ fn send_ra_multicast(sock: &Socket, link: String, ifi: u32) -> Result<()> {
let prefixes = pkt_prefixes
.into_iter()
- .map(|prefix| format!("{}", prefix))
+ .map(|prefix| format!("{}/64", prefix))
.reduce(|acc, prefix| acc + ", " + &prefix)
.unwrap_or(String::from("::/64"));
@@ -203,7 +206,7 @@ fn send_ra_unicast(sock: &Socket, link: String, raddr: &SockAddr) -> Result<()>
let prefixes = pkt_prefixes
.into_iter()
- .map(|prefix| format!("{}", prefix))
+ .map(|prefix| format!("{}/64", prefix))
.reduce(|acc, prefix| acc + ", " + &prefix)
.unwrap_or(String::from("::/64"));