aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-11-17 18:38:52 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-11-17 18:38:52 +0100
commit4834c3249e33bfbf259137d62f48fb7abce58532 (patch)
tree4dfdc2846d491c233d047e4ff2b8bba4a28de224
parent89469644f07f3ca9f0f2301fab7883d089865a9c (diff)
remove ipnet dependency
-rw-r--r--Cargo.lock7
-rw-r--r--Cargo.toml1
-rw-r--r--src/main.rs11
3 files changed, 7 insertions, 12 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 6fec15a..9dff0fe 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -194,12 +194,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
[[package]]
-name = "ipnet"
-version = "2.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
-
-[[package]]
name = "libc"
version = "0.2.150"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -462,7 +456,6 @@ dependencies = [
name = "rsdsl_radvd"
version = "0.1.0"
dependencies = [
- "ipnet",
"pnet_packet",
"rsdsl_netlinklib",
"signal-hook",
diff --git a/Cargo.toml b/Cargo.toml
index 811467f..d0caf49 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -4,7 +4,6 @@ version = "0.1.0"
edition = "2021"
[dependencies]
-ipnet = "2.7.1"
pnet_packet = "0.33.0"
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"
diff --git a/src/main.rs b/src/main.rs
index ef28dfe..e4c0324 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -4,7 +4,6 @@ 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::{addr, link};
@@ -118,8 +117,6 @@ fn run(link: String) -> Result<()> {
}
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 = [
0, 0, // Reserved
0, 0, 0x07, 0x08, // Lifetime: 1800s
@@ -142,7 +139,7 @@ fn create_ra_pkt(link: String) -> Result<(Vec<u8>, Vec<Ipv6Addr>)> {
}
});
- for prefix in ipv6_addrs.filter(|addr| global.contains(addr)) {
+ for prefix in ipv6_addrs.filter(is_gua) {
let mut prefix_data = [
64, // Prefix Length, always /64
0xc0, // Flags: On-Link + SLAAC
@@ -218,3 +215,9 @@ fn send_ra_unicast(sock: &Socket, link: String, raddr: &SockAddr) -> Result<()>
);
Ok(())
}
+
+/// Checks whether an IPv6 address is part of the `2000::/3` network.
+fn is_gua(addr: &Ipv6Addr) -> bool {
+ let first_octet_trunc = addr.octets()[0] & 0xe0;
+ first_octet_trunc == 0x20
+}