1use errno::Errno;
2use mnl::{Attr, AttrTbl, MsgVec, Result};
3use netfilter::nfnetlink_conntrack::CtattrTypeTbl;
4
5#[repr(u16)]
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
11pub enum NfulnlMsgTypes {
12 Packet = 0, Config, MAX,
16}
17pub const NFULNL_MSG_PACKET: u16 = NfulnlMsgTypes::Packet as u16;
18pub const NFULNL_MSG_CONFIG: u16 = NfulnlMsgTypes::Config as u16;
19pub const NFULNL_MSG_MAX: u16 = NfulnlMsgTypes::MAX as u16;
20
21#[repr(C)]
22#[derive(Debug, Clone, Copy)]
23pub struct NfulnlMsgPacketHdr {
24 pub hw_protocol: u16, pub hook: u8, pub _pad: u8,
27}
28
29#[repr(C)]
30#[derive(Debug, Clone, Copy)]
31pub struct NfulnlMsgPacketHw {
32 pub hw_addrlen: u16,
33 pub _pad: u16,
34 pub hw_addr: [u8; 8usize],
35}
36
37#[repr(C)]
38#[derive(Debug, Clone, Copy)]
39pub struct NfulnlMsgPacketTimestamp {
40 pub sec: u64,
41 pub usec: u64,
42}
43
44#[repr(u16)]
45#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, NlaType)]
46#[tbname = "NfulnlVlanAttrTbl"]
47pub enum NfulnlVlanAttr {
48 Unspec,
49
50 #[nla_type(u16, proto)]
51 Proto, #[nla_type(u16, tci)]
54 Tci, _MAX,
57}
58
59#[repr(u16)]
60#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, NlaType)]
61#[tbname = "NfulnlAttrTypeTbl"]
62pub enum NfulnlAttrType {
63 UNSPEC = 0,
64
65 #[nla_type(NfulnlMsgPacketHdr, packet_hdr)]
66 PacketHdr,
67
68 #[nla_type(u32, mark)]
69 Mark, #[nla_type(NfulnlMsgPacketTimestamp, timestamp)]
72 Timestamp, #[nla_type(u32, ifindex_indev)]
75 IfindexIndev, #[nla_type(u32, ifindex_outdev)]
78 IfindexOutdev, #[nla_type(u32, ifindex_physindev)]
81 IfindexPhysindev, #[nla_type(u32, ifindex_physoutdev)]
84 IfindexPhysoutdev, #[nla_type(NfulnlMsgPacketHw, hwaddr)]
87 Hwaddr, #[nla_type(bytes, payload)]
90 Payload, #[nla_type(str, prefix)]
93 Prefix, #[nla_type(u32, uid)]
96 Uid, #[nla_type(u32, seq)]
99 Seq, #[nla_type(u32, seq_global)]
102 SeqGlobal, #[nla_type(u32, gid)]
105 Gid, #[nla_type(u16, hwtype)]
108 Hwtype, #[nla_type(bytes, hwheader)]
111 Hwheader, #[nla_type(u16, hwlen)]
114 Hwlen, #[nla_nest(CtattrTypeTbl, ct)]
117 Ct, #[nla_type(u32, ct_info)]
120 CtInfo, #[nla_nest(NfulnlVlanAttrTbl, vlan)]
123 Vlan, #[nla_type(bytes, l2hdr)]
126 L2Hdr, _MAX,
129}
130
131#[repr(u8)]
132#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
133pub enum NfulnlMsgConfigCmds {
134 None = 0,
136 Bind,
137 Unbind,
138 PfBind,
139 PfUnbind,
140}
141
142#[repr(C, packed)]
143#[derive(Debug, Clone, Copy)]
144pub struct NfulnlMsgConfigCmd {
145 pub command: u8, }
147
148#[repr(C, packed)]
149#[derive(Debug, Clone, Copy)]
150pub struct NfulnlMsgConfigMode {
151 pub copy_range: u32,
152 pub copy_mode: u8,
153 pub _pad: u8,
154}
155
156#[repr(u16)]
157#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, NlaType)]
158pub enum NfulnlAttrConfig {
159 Unspec = 0,
160
161 #[nla_type(NfulnlMsgConfigCmd, cmd)]
162 Cmd, #[nla_type(NfulnlMsgConfigMode, mode)]
165 Mode, Nlbufsiz, Timeout, Qthresh, Flags, _MAX,
172}
173
174pub const NFULNL_COPY_NONE: u8 = 0x00;
175pub const NFULNL_COPY_META: u8 = 0x01;
176pub const NFULNL_COPY_PACKET: u8 = 0x02;
177pub const NFULNL_CFG_F_SEQ: u16 = 0x0001;
180pub const NFULNL_CFG_F_SEQ_GLOBAL: u16 = 0x0002;
181pub const NFULNL_CFG_F_CONNTRACK: u16 = 0x0004;