use std::ptr;
use super::rule::Rule;
use nftnl_sys::{self as sys, libc};
pub trait Expression {
fn to_expr(&self, rule: &Rule) -> ptr::NonNull<sys::nftnl_expr>;
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
#[repr(i32)]
pub enum Register {
Reg1 = libc::NFT_REG_1,
Reg2 = libc::NFT_REG_2,
Reg3 = libc::NFT_REG_3,
Reg4 = libc::NFT_REG_4,
}
impl Register {
pub fn to_raw(self) -> u32 {
self as u32
}
}
mod bitwise;
pub use self::bitwise::*;
mod cmp;
pub use self::cmp::*;
mod counter;
pub use self::counter::*;
pub mod ct;
pub use self::ct::*;
mod immediate;
pub use self::immediate::*;
mod lookup;
pub use self::lookup::*;
mod masquerade;
pub use self::masquerade::*;
mod meta;
pub use self::meta::*;
mod nat;
pub use self::nat::*;
mod payload;
pub use self::payload::*;
mod verdict;
pub use self::verdict::*;
pub mod socket;
#[cfg_attr(not(socketexpr), allow(unused_imports))]
pub use self::socket::*;
#[macro_export(local_inner_macros)]
macro_rules! nft_expr {
(bitwise mask $mask:expr,xor $xor:expr) => {
nft_expr_bitwise!(mask $mask, xor $xor)
};
(socket $key:tt level $level:expr) => {
nft_expr_socket!(socket $key level $level)
};
(cmp $op:tt $data:expr) => {
nft_expr_cmp!($op $data)
};
(counter) => {
$crate::expr::Counter
};
(ct $key:ident set) => {
nft_expr_ct!($key set)
};
(ct $key:ident) => {
nft_expr_ct!($key)
};
(verdict $verdict:ident) => {
nft_expr_verdict!($verdict)
};
(verdict $verdict:ident $chain:expr) => {
nft_expr_verdict!($verdict $chain)
};
(lookup $set:expr) => {
nft_expr_lookup!($set)
};
(masquerade) => {
$crate::expr::Masquerade
};
(meta $expr:ident set) => {
nft_expr_meta!($expr set)
};
(meta $expr:ident) => {
nft_expr_meta!($expr)
};
(payload $proto:ident $field:ident) => {
nft_expr_payload!($proto $field)
};
(payload_raw $base:ident $offset:expr, $length:expr) => {
nft_expr_payload!($base $offset, $length)
};
(immediate $expr:ident $value:expr) => {
nft_expr_immediate!($expr $value)
};
}