diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-17 18:38:52 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-17 18:38:52 +0100 |
commit | 4834c3249e33bfbf259137d62f48fb7abce58532 (patch) | |
tree | 4dfdc2846d491c233d047e4ff2b8bba4a28de224 | |
parent | 89469644f07f3ca9f0f2301fab7883d089865a9c (diff) |
remove ipnet dependency
-rw-r--r-- | Cargo.lock | 7 | ||||
-rw-r--r-- | Cargo.toml | 1 | ||||
-rw-r--r-- | src/main.rs | 11 |
3 files changed, 7 insertions, 12 deletions
@@ -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", @@ -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 +} |