make building the example optional
This commit is contained in:
parent
dcfce58525
commit
4f43475c76
40
Cargo.toml
40
Cargo.toml
|
@ -9,20 +9,34 @@ crate-type = ["rlib", "cdylib"]
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
boxcar = "0.2.5"
|
boxcar = { version = "0.2.5", optional = true }
|
||||||
ctor = { version = "0.2.8", optional = true }
|
ctor = { version = "0.2.8", optional = true }
|
||||||
filetime = "0.2.24"
|
filetime = { version = "0.2.24", optional = true }
|
||||||
ipnet = { version = "2.9.0", features = ["serde"] }
|
ipnet = { version = "2.9.0", features = ["serde"], optional = true }
|
||||||
iptrie = "0.8.5"
|
iptrie = { version = "0.8.5", optional = true }
|
||||||
libc = "0.2.155"
|
libc = { version = "0.2.155", optional = true }
|
||||||
mnl = { version = "0.2.2", features = ["mnl-1-0-4"] }
|
mnl = { version = "0.2.2", features = ["mnl-1-0-4"], optional = true }
|
||||||
nftnl = { version = "0.6.2", features = ["nftnl-1-1-2"] }
|
nftnl = { version = "0.6.2", features = ["nftnl-1-1-2"], optional = true }
|
||||||
nix = { version = "0.29.0", features = ["poll", "user"] }
|
nix = { version = "0.29.0", features = ["poll", "user"], optional = true }
|
||||||
radix_trie = "0.2.1"
|
radix_trie = { version = "0.2.1", optional = true }
|
||||||
serde = { version = "1.0.205", features = ["derive"] }
|
serde = { version = "1.0.205", features = ["derive"], optional = true }
|
||||||
serde_json = "1.0.122"
|
serde_json = { version = "1.0.122", optional = true }
|
||||||
smallvec = "1.13.2"
|
smallvec = { version = "1.13.2", optional = true }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
example = ["ctor"]
|
example = [
|
||||||
|
"boxcar",
|
||||||
|
"ctor",
|
||||||
|
"filetime",
|
||||||
|
"ipnet",
|
||||||
|
"iptrie",
|
||||||
|
"libc",
|
||||||
|
"mnl",
|
||||||
|
"nftnl",
|
||||||
|
"nix",
|
||||||
|
"radix_trie",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"smallvec",
|
||||||
|
]
|
||||||
default = ["example"]
|
default = ["example"]
|
||||||
|
|
|
@ -22,15 +22,23 @@ use serde::{
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
domain_tree::PrefixSet,
|
|
||||||
nftables::{nftables_thread, NftData},
|
|
||||||
unbound::{rr_class, rr_type, ModuleEvent, ModuleExtState, ReplyInfo},
|
unbound::{rr_class, rr_type, ModuleEvent, ModuleExtState, ReplyInfo},
|
||||||
UnboundMod,
|
UnboundMod,
|
||||||
};
|
};
|
||||||
|
use domain_tree::PrefixSet;
|
||||||
|
use nftables::{nftables_thread, NftData};
|
||||||
|
|
||||||
|
mod domain_tree;
|
||||||
|
mod nftables;
|
||||||
|
|
||||||
type Domain = SmallVec<[u8; 32]>;
|
type Domain = SmallVec<[u8; 32]>;
|
||||||
type DomainSeg = SmallVec<[u8; 16]>;
|
type DomainSeg = SmallVec<[u8; 16]>;
|
||||||
|
|
||||||
|
#[ctor]
|
||||||
|
fn setup() {
|
||||||
|
crate::set_unbound_mod::<ExampleMod>();
|
||||||
|
}
|
||||||
|
|
||||||
struct IpNetDeser(IpNet);
|
struct IpNetDeser(IpNet);
|
||||||
struct IpNetVisitor;
|
struct IpNetVisitor;
|
||||||
impl<'de> Visitor<'de> for IpNetVisitor {
|
impl<'de> Visitor<'de> for IpNetVisitor {
|
||||||
|
@ -738,11 +746,6 @@ impl UnboundMod for ExampleMod {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[ctor]
|
|
||||||
fn setup() {
|
|
||||||
crate::set_unbound_mod::<ExampleMod>();
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use std::{net::Ipv4Addr, os::unix::fs::MetadataExt, path::PathBuf, str::FromStr, sync::mpsc};
|
use std::{net::Ipv4Addr, os::unix::fs::MetadataExt, path::PathBuf, str::FromStr, sync::mpsc};
|
|
@ -471,7 +471,7 @@ pub(crate) fn nftables_thread(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let socket = mnl::Socket::new(mnl::Bus::Netfilter).unwrap();
|
let socket = mnl::Socket::new(mnl::Bus::Netfilter).unwrap();
|
||||||
let all_sets = crate::nftables::get_sets(&socket).unwrap();
|
let all_sets = get_sets(&socket).unwrap();
|
||||||
for set in all_sets {
|
for set in all_sets {
|
||||||
for ruleset in &mut rulesets {
|
for ruleset in &mut rulesets {
|
||||||
if set.table_name_str() == Some("global") && set.family() == libc::NFPROTO_INET as u32 {
|
if set.table_name_str() == Some("global") && set.family() == libc::NFPROTO_INET as u32 {
|
||||||
|
@ -531,9 +531,7 @@ mod test {
|
||||||
use ipnet::{Ipv4Net, Ipv6Net};
|
use ipnet::{Ipv4Net, Ipv6Net};
|
||||||
use iptrie::RTrieSet;
|
use iptrie::RTrieSet;
|
||||||
|
|
||||||
use crate::nftables::{iter_ip_trie, should_add};
|
use super::{get_sets, iter_ip_trie, should_add};
|
||||||
|
|
||||||
use super::get_sets;
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_nftables() {
|
fn test_nftables() {
|
|
@ -15,11 +15,9 @@ use unbound::ModuleExtState;
|
||||||
)]
|
)]
|
||||||
mod bindings;
|
mod bindings;
|
||||||
mod combine;
|
mod combine;
|
||||||
mod domain_tree;
|
|
||||||
#[cfg(feature = "example")]
|
#[cfg(feature = "example")]
|
||||||
mod example;
|
mod example;
|
||||||
mod exports;
|
mod exports;
|
||||||
mod nftables;
|
|
||||||
mod unbound;
|
mod unbound;
|
||||||
|
|
||||||
pub trait UnboundMod: Send + Sync + Sized + RefUnwindSafe + UnwindSafe {
|
pub trait UnboundMod: Send + Sync + Sized + RefUnwindSafe + UnwindSafe {
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
fn run<T: ToString>(
|
|
||||||
family: &str,
|
|
||||||
table: &str,
|
|
||||||
set: &str,
|
|
||||||
flush: bool,
|
|
||||||
items: impl IntoIterator<T>,
|
|
||||||
) {
|
|
||||||
let nft = libnftables1_sys::Nftables::new();
|
|
||||||
let mut cmd = String::new();
|
|
||||||
if flush {
|
|
||||||
cmd.push_str(&format!("flush set {family} {table} {set}"));
|
|
||||||
nft.run_cmd(c)
|
|
||||||
}
|
|
||||||
nft.set_numeric_time
|
|
||||||
}
|
|
Loading…
Reference in a new issue