use errno::Errno;
use mnl::{Attr, AttrTbl, MsgVec, Result};
use netfilter::nfnetlink_conntrack::CtattrTypeTbl;
#[repr(u16)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum NfulnlMsgTypes {
Packet = 0, Config, MAX,
}
pub const NFULNL_MSG_PACKET: u16 = NfulnlMsgTypes::Packet as u16;
pub const NFULNL_MSG_CONFIG: u16 = NfulnlMsgTypes::Config as u16;
pub const NFULNL_MSG_MAX: u16 = NfulnlMsgTypes::MAX as u16;
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct NfulnlMsgPacketHdr {
pub hw_protocol: u16, pub hook: u8, pub _pad: u8,
}
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct NfulnlMsgPacketHw {
pub hw_addrlen: u16,
pub _pad: u16,
pub hw_addr: [u8; 8usize],
}
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct NfulnlMsgPacketTimestamp {
pub sec: u64,
pub usec: u64,
}
#[repr(u16)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, NlaType)]
#[tbname = "NfulnlVlanAttrTbl"]
pub enum NfulnlVlanAttr {
Unspec,
#[nla_type(u16, proto)]
Proto,
#[nla_type(u16, tci)]
Tci,
_MAX,
}
#[repr(u16)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, NlaType)]
#[tbname = "NfulnlAttrTypeTbl"]
pub enum NfulnlAttrType {
UNSPEC = 0,
#[nla_type(NfulnlMsgPacketHdr, packet_hdr)]
PacketHdr,
#[nla_type(u32, mark)]
Mark,
#[nla_type(NfulnlMsgPacketTimestamp, timestamp)]
Timestamp,
#[nla_type(u32, ifindex_indev)]
IfindexIndev,
#[nla_type(u32, ifindex_outdev)]
IfindexOutdev,
#[nla_type(u32, ifindex_physindev)]
IfindexPhysindev,
#[nla_type(u32, ifindex_physoutdev)]
IfindexPhysoutdev,
#[nla_type(NfulnlMsgPacketHw, hwaddr)]
Hwaddr,
#[nla_type(bytes, payload)]
Payload,
#[nla_type(str, prefix)]
Prefix,
#[nla_type(u32, uid)]
Uid,
#[nla_type(u32, seq)]
Seq,
#[nla_type(u32, seq_global)]
SeqGlobal,
#[nla_type(u32, gid)]
Gid,
#[nla_type(u16, hwtype)]
Hwtype,
#[nla_type(bytes, hwheader)]
Hwheader,
#[nla_type(u16, hwlen)]
Hwlen,
#[nla_nest(CtattrTypeTbl, ct)]
Ct,
#[nla_type(u32, ct_info)]
CtInfo,
#[nla_nest(NfulnlVlanAttrTbl, vlan)]
Vlan,
#[nla_type(bytes, l2hdr)]
L2Hdr,
_MAX,
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum NfulnlMsgConfigCmds {
None = 0,
Bind,
Unbind,
PfBind,
PfUnbind,
}
#[repr(C, packed)]
#[derive(Debug, Clone, Copy)]
pub struct NfulnlMsgConfigCmd {
pub command: u8, }
#[repr(C, packed)]
#[derive(Debug, Clone, Copy)]
pub struct NfulnlMsgConfigMode {
pub copy_range: u32,
pub copy_mode: u8,
pub _pad: u8,
}
#[repr(u16)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, NlaType)]
pub enum NfulnlAttrConfig {
Unspec = 0,
#[nla_type(NfulnlMsgConfigCmd, cmd)]
Cmd,
#[nla_type(NfulnlMsgConfigMode, mode)]
Mode,
Nlbufsiz, Timeout, Qthresh, Flags, _MAX,
}
pub const NFULNL_COPY_NONE: u8 = 0x00;
pub const NFULNL_COPY_META: u8 = 0x01;
pub const NFULNL_COPY_PACKET: u8 = 0x02;
pub const NFULNL_CFG_F_SEQ: u16 = 0x0001;
pub const NFULNL_CFG_F_SEQ_GLOBAL: u16 = 0x0002;
pub const NFULNL_CFG_F_CONNTRACK: u16 = 0x0004;