diff options
author | Simon THOBY <git@nightmared.fr> | 2021-10-26 22:50:17 +0200 |
---|---|---|
committer | lafleur <lafleur@boum.org> | 2021-11-05 11:21:27 +0100 |
commit | c32f06c9844dbcdb81df4fe611ab0c5caa236110 (patch) | |
tree | 96dd1ba92df6a87c08b4ad0d1959b1aa30030b62 | |
parent | 77fd69af12242ab577b0ab1b3a3539fefd3110d8 (diff) |
tests: add some netlink abstractions to manipulate higher-level object that raw bytes strings
-rw-r--r-- | rustables/src/expr/counter.rs | 94 | ||||
-rw-r--r-- | rustables/src/lib.rs | 3 | ||||
-rw-r--r-- | rustables/src/tests/mod.rs | 194 | ||||
-rw-r--r-- | rustables/src/tests/sys.rs | 833 |
4 files changed, 1030 insertions, 94 deletions
diff --git a/rustables/src/expr/counter.rs b/rustables/src/expr/counter.rs index 1997433..099e7fa 100644 --- a/rustables/src/expr/counter.rs +++ b/rustables/src/expr/counter.rs @@ -44,97 +44,3 @@ impl Expression for Counter { } } } - -#[cfg(test)] -mod tests { - use crate::{nft_nlmsg_maxsize, NlMsg}; - - use rustables_sys as sys; - use std::ffi::{c_void, CString}; - use std::mem::size_of; - use std::rc::Rc; - use sys::libc::{nlmsghdr, AF_UNIX, NFNL_SUBSYS_NFTABLES, NFT_MSG_NEWRULE}; - - fn get_subsystem_from_nlmsghdr_type(x: u16) -> u8 { - ((x & 0xff00) >> 8) as u8 - } - fn get_operation_from_nlmsghdr_type(x: u16) -> u8 { - (x & 0x00ff) as u8 - } - - #[repr(C)] - #[derive(Clone, Copy)] - struct nfgenmsg { - family: u8, /* AF_xxx */ - version: u8, /* nfnetlink version */ - res_id: u16, /* resource id */ - } - - #[test] - fn counter_expr_is_valid() { - let mut counter = super::Counter::new(); - counter.nb_bytes = 0; - counter.nb_packets = 0; - let table = Rc::new(crate::Table::new( - &CString::new("mocktable").unwrap(), - crate::ProtoFamily::Inet, - )); - let chain = Rc::new(crate::Chain::new( - &CString::new("mockchain").unwrap(), - Rc::clone(&table), - )); - let mut rule = crate::Rule::new(Rc::clone(&chain)); - rule.add_expr(&counter); - let mut buf = vec![0u8; nft_nlmsg_maxsize() as usize]; - let (nlmsghdr, nfgenmsg, raw_expr) = unsafe { - rule.write(buf.as_mut_ptr() as *mut c_void, 0, crate::MsgType::Add); - - // right now the message is composed of the following parts: - // - nlmsghdr (contain the message size and type) - // - nfgenmsg (nftables header that describe the family) - // - the raw expression that we want to check - - let size_of_hdr = size_of::<nlmsghdr>(); - let size_of_nfgenmsg = size_of::<nfgenmsg>(); - let nlmsghdr = *(buf[0..size_of_hdr].as_ptr() as *const nlmsghdr); - let nfgenmsg = - *(buf[size_of_hdr..size_of_hdr + size_of_nfgenmsg].as_ptr() as *const nfgenmsg); - ( - nlmsghdr, - nfgenmsg, - &buf[size_of_hdr + size_of_nfgenmsg..nlmsghdr.nlmsg_len as usize], - ) - }; - - // sanity checks on the global message (this should be very similar/factorisable for the - // most part in other tests) - assert_eq!(nlmsghdr.nlmsg_len, 100); - // TODO: check the messages flags - assert_eq!( - get_subsystem_from_nlmsghdr_type(nlmsghdr.nlmsg_type), - NFNL_SUBSYS_NFTABLES as u8 - ); - assert_eq!( - get_operation_from_nlmsghdr_type(nlmsghdr.nlmsg_type), - NFT_MSG_NEWRULE as u8 - ); - assert_eq!(nlmsghdr.nlmsg_seq, 0); - assert_eq!(nlmsghdr.nlmsg_pid, 0); - assert_eq!(nfgenmsg.family, AF_UNIX as u8); - assert_eq!(nfgenmsg.version, 0); - assert_eq!(nfgenmsg.res_id.to_be(), 0); - - // check the expression content itself - assert_eq!( - raw_expr, - &[ - 0xe, 0x0, 0x1, 0x0, 0x6d, 0x6f, 0x63, 0x6b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x0, 0x0, - 0x0, 0xe, 0x0, 0x2, 0x0, 0x6d, 0x6f, 0x63, 0x6b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x0, - 0x0, 0x0, 0x30, 0x0, 0x4, 0x80, 0x2c, 0x0, 0x1, 0x80, 0xc, 0x0, 0x1, 0x0, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x0, 0x1c, 0x0, 0x2, 0x80, 0xc, 0x0, 0x1, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0 - ] - ); - } -} diff --git a/rustables/src/lib.rs b/rustables/src/lib.rs index 1397245..d94c753 100644 --- a/rustables/src/lib.rs +++ b/rustables/src/lib.rs @@ -118,6 +118,9 @@ pub use rule::{get_rules_cb, list_rules_for_chain}; pub mod set; +#[cfg(test)] +mod tests; + /// The type of the message as it's sent to netfilter. A message consists of an object, such as a /// [`Table`], [`Chain`] or [`Rule`] for example, and a [`MsgType`] to describe what to do with /// that object. If a [`Table`] object is sent with `MsgType::Add` then that table will be added diff --git a/rustables/src/tests/mod.rs b/rustables/src/tests/mod.rs new file mode 100644 index 0000000..6e53e3b --- /dev/null +++ b/rustables/src/tests/mod.rs @@ -0,0 +1,194 @@ +use crate::expr::Counter; +use crate::{nft_nlmsg_maxsize, NlMsg}; +use rustables_sys::libc::{nlmsghdr, AF_UNIX, NFNETLINK_V0, NFNL_SUBSYS_NFTABLES, NFT_MSG_NEWRULE}; +use std::ffi::{c_void, CStr}; +use std::mem::size_of; +use std::rc::Rc; +use thiserror::Error; + +mod sys; +use sys::*; + +fn get_subsystem_from_nlmsghdr_type(x: u16) -> u8 { + ((x & 0xff00) >> 8) as u8 +} +fn get_operation_from_nlmsghdr_type(x: u16) -> u8 { + (x & 0x00ff) as u8 +} + +type NetLinkType = u16; + +#[derive(Debug, PartialEq)] +enum NetlinkExpr { + Nested(NetLinkType, Vec<NetlinkExpr>), + Final(NetLinkType, Vec<u8>), + List(Vec<NetlinkExpr>), +} + +#[derive(Debug, Error)] +#[error("empty data")] +struct EmptyDataError; + +impl NetlinkExpr { + fn to_raw(self) -> Result<Vec<u8>, EmptyDataError> { + match self { + NetlinkExpr::Final(ty, val) => { + if val.len() == 0 { + return Err(EmptyDataError); + } + + let len = val.len() + 4; + let mut res = Vec::with_capacity(len); + + res.extend(&(len as u16).to_le_bytes()); + res.extend(&ty.to_le_bytes()); + res.extend(val); + // alignment + while res.len() % 4 != 0 { + res.push(0); + } + + Ok(res) + } + NetlinkExpr::Nested(ty, exprs) => { + if exprs.len() == 0 { + return Err(EmptyDataError); + } + + // some heuristic to decrease allocations (even though this is + // only useful for testing so performance is not an objective) + let mut sub = Vec::with_capacity(exprs.len() * 50); + + for expr in exprs { + sub.append(&mut expr.to_raw()?); + } + + let len = sub.len() + 4; + let mut res = Vec::with_capacity(len); + + // set the "NESTED" flag + res.extend(&(len as u16).to_le_bytes()); + res.extend(&(ty | 0x8000).to_le_bytes()); + res.extend(sub); + + Ok(res) + } + NetlinkExpr::List(exprs) => { + if exprs.len() == 0 { + return Err(EmptyDataError); + } + + // some heuristic to decrease allocations (even though this is + // only useful for testing so performance is not an objective) + let mut list = Vec::with_capacity(exprs.len() * 50); + + for expr in exprs { + list.append(&mut expr.to_raw()?); + } + + Ok(list) + } + } + } +} + +#[repr(C)] +#[derive(Clone, Copy)] +struct nfgenmsg { + family: u8, /* AF_xxx */ + version: u8, /* nfnetlink version */ + res_id: u16, /* resource id */ +} + +#[test] +fn counter_expr_is_valid() { + let table_name = b"mocktable\0"; + let chain_name = b"mockchain\0"; + let nb_bytes = 123456u64; + let nb_packets = 987u64; + + let mut counter = Counter::new(); + counter.nb_bytes = nb_bytes; + counter.nb_packets = nb_packets; + let table = Rc::new(crate::Table::new( + &CStr::from_bytes_with_nul(table_name).unwrap(), + crate::ProtoFamily::Inet, + )); + let chain = Rc::new(crate::Chain::new( + &CStr::from_bytes_with_nul(chain_name).unwrap(), + Rc::clone(&table), + )); + let mut rule = crate::Rule::new(Rc::clone(&chain)); + rule.add_expr(&counter); + let mut buf = vec![0u8; nft_nlmsg_maxsize() as usize]; + let (nlmsghdr, nfgenmsg, raw_expr) = unsafe { + rule.write(buf.as_mut_ptr() as *mut c_void, 0, crate::MsgType::Add); + + // right now the message is composed of the following parts: + // - nlmsghdr (contain the message size and type) + // - nfgenmsg (nftables header that describe the family) + // - the raw expression that we want to check + + let size_of_hdr = size_of::<nlmsghdr>(); + let size_of_nfgenmsg = size_of::<nfgenmsg>(); + let nlmsghdr = *(buf[0..size_of_hdr].as_ptr() as *const nlmsghdr); + let nfgenmsg = + *(buf[size_of_hdr..size_of_hdr + size_of_nfgenmsg].as_ptr() as *const nfgenmsg); + ( + nlmsghdr, + nfgenmsg, + &buf[size_of_hdr + size_of_nfgenmsg..nlmsghdr.nlmsg_len as usize], + ) + }; + + // sanity checks on the global message (this should be very similar/factorisable for the + // most part in other tests) + assert_eq!(nlmsghdr.nlmsg_len, 100); + // TODO: check the messages flags + assert_eq!( + get_subsystem_from_nlmsghdr_type(nlmsghdr.nlmsg_type), + NFNL_SUBSYS_NFTABLES as u8 + ); + assert_eq!( + get_operation_from_nlmsghdr_type(nlmsghdr.nlmsg_type), + NFT_MSG_NEWRULE as u8 + ); + assert_eq!(nlmsghdr.nlmsg_seq, 0); + assert_eq!(nlmsghdr.nlmsg_pid, 0); + assert_eq!(nfgenmsg.family, AF_UNIX as u8); + assert_eq!(nfgenmsg.version, NFNETLINK_V0 as u8); + assert_eq!(nfgenmsg.res_id.to_be(), 0); + + // check the expression content itself + assert_eq!( + raw_expr, + NetlinkExpr::List(vec![ + NetlinkExpr::Final(NFTA_RULE_TABLE, table_name.to_vec()), + NetlinkExpr::Final(NFTA_RULE_CHAIN, chain_name.to_vec()), + NetlinkExpr::Nested( + NFTA_RULE_EXPRESSIONS, + vec![NetlinkExpr::Nested( + NFTA_LIST_ELEM, + vec![ + NetlinkExpr::Final(NFTA_EXPR_NAME, b"counter\0".to_vec()), + NetlinkExpr::Nested( + NFTA_EXPR_DATA, + vec![ + NetlinkExpr::Final( + NFTA_COUNTER_BYTES, + nb_bytes.to_be_bytes().to_vec() + ), + NetlinkExpr::Final( + NFTA_COUNTER_PACKETS, + nb_packets.to_be_bytes().to_vec() + ) + ] + ) + ] + )] + ) + ]) + .to_raw() + .unwrap() + ); +} diff --git a/rustables/src/tests/sys.rs b/rustables/src/tests/sys.rs new file mode 100644 index 0000000..2eb3cc2 --- /dev/null +++ b/rustables/src/tests/sys.rs @@ -0,0 +1,833 @@ +/* automatically generated by rust-bindgen 0.59.1 */ +// to regen, please run `bindgen /usr/include/linux/netfilter/nf_tables.h --no-doc-comments --no-prepend-enum-name` +// then replace the uint by u16 for convenience: in (neo)vim, run %s/\(pub type nft_[a-zA-Z_]*_attributes\) = ::std::os::raw::c_uint;/\1 = u16;/ +#![allow(non_camel_case_types, dead_code)] + +pub const NFT_NAME_MAXLEN: u32 = 256; +pub const NFT_TABLE_MAXNAMELEN: u32 = 256; +pub const NFT_CHAIN_MAXNAMELEN: u32 = 256; +pub const NFT_SET_MAXNAMELEN: u32 = 256; +pub const NFT_OBJ_MAXNAMELEN: u32 = 256; +pub const NFT_USERDATA_MAXLEN: u32 = 256; +pub const NFT_OSF_MAXGENRELEN: u32 = 16; +pub const NFT_REG_SIZE: u32 = 16; +pub const NFT_REG32_SIZE: u32 = 4; +pub const NFT_DATA_RESERVED_MASK: u32 = 4294967040; +pub const NFT_DATA_VALUE_MAXLEN: u32 = 64; +pub const NFT_QUEUE_FLAG_BYPASS: u32 = 1; +pub const NFT_QUEUE_FLAG_CPU_FANOUT: u32 = 2; +pub const NFT_QUEUE_FLAG_MASK: u32 = 3; +pub const NFT_SECMARK_CTX_MAXLEN: u32 = 256; +pub const NFT_OBJECT_UNSPEC: u32 = 0; +pub const NFT_OBJECT_COUNTER: u32 = 1; +pub const NFT_OBJECT_QUOTA: u32 = 2; +pub const NFT_OBJECT_CT_HELPER: u32 = 3; +pub const NFT_OBJECT_LIMIT: u32 = 4; +pub const NFT_OBJECT_CONNLIMIT: u32 = 5; +pub const NFT_OBJECT_TUNNEL: u32 = 6; +pub const NFT_OBJECT_CT_TIMEOUT: u32 = 7; +pub const NFT_OBJECT_SECMARK: u32 = 8; +pub const NFT_OBJECT_CT_EXPECT: u32 = 9; +pub const NFT_OBJECT_SYNPROXY: u32 = 10; +pub const __NFT_OBJECT_MAX: u32 = 11; +pub const NFT_OBJECT_MAX: u32 = 10; +pub const NFT_REG_VERDICT: nft_registers = 0; +pub const NFT_REG_1: nft_registers = 1; +pub const NFT_REG_2: nft_registers = 2; +pub const NFT_REG_3: nft_registers = 3; +pub const NFT_REG_4: nft_registers = 4; +pub const __NFT_REG_MAX: nft_registers = 5; +pub const NFT_REG32_00: nft_registers = 8; +pub const NFT_REG32_01: nft_registers = 9; +pub const NFT_REG32_02: nft_registers = 10; +pub const NFT_REG32_03: nft_registers = 11; +pub const NFT_REG32_04: nft_registers = 12; +pub const NFT_REG32_05: nft_registers = 13; +pub const NFT_REG32_06: nft_registers = 14; +pub const NFT_REG32_07: nft_registers = 15; +pub const NFT_REG32_08: nft_registers = 16; +pub const NFT_REG32_09: nft_registers = 17; +pub const NFT_REG32_10: nft_registers = 18; +pub const NFT_REG32_11: nft_registers = 19; +pub const NFT_REG32_12: nft_registers = 20; +pub const NFT_REG32_13: nft_registers = 21; +pub const NFT_REG32_14: nft_registers = 22; +pub const NFT_REG32_15: nft_registers = 23; +pub type nft_registers = ::std::os::raw::c_uint; +pub const NFT_CONTINUE: nft_verdicts = -1; +pub const NFT_BREAK: nft_verdicts = -2; +pub const NFT_JUMP: nft_verdicts = -3; +pub const NFT_GOTO: nft_verdicts = -4; +pub const NFT_RETURN: nft_verdicts = -5; +pub type nft_verdicts = ::std::os::raw::c_int; +pub const NFT_MSG_NEWTABLE: nf_tables_msg_types = 0; +pub const NFT_MSG_GETTABLE: nf_tables_msg_types = 1; +pub const NFT_MSG_DELTABLE: nf_tables_msg_types = 2; +pub const NFT_MSG_NEWCHAIN: nf_tables_msg_types = 3; +pub const NFT_MSG_GETCHAIN: nf_tables_msg_types = 4; +pub const NFT_MSG_DELCHAIN: nf_tables_msg_types = 5; +pub const NFT_MSG_NEWRULE: nf_tables_msg_types = 6; +pub const NFT_MSG_GETRULE: nf_tables_msg_types = 7; +pub const NFT_MSG_DELRULE: nf_tables_msg_types = 8; +pub const NFT_MSG_NEWSET: nf_tables_msg_types = 9; +pub const NFT_MSG_GETSET: nf_tables_msg_types = 10; +pub const NFT_MSG_DELSET: nf_tables_msg_types = 11; +pub const NFT_MSG_NEWSETELEM: nf_tables_msg_types = 12; +pub const NFT_MSG_GETSETELEM: nf_tables_msg_types = 13; +pub const NFT_MSG_DELSETELEM: nf_tables_msg_types = 14; +pub const NFT_MSG_NEWGEN: nf_tables_msg_types = 15; +pub const NFT_MSG_GETGEN: nf_tables_msg_types = 16; +pub const NFT_MSG_TRACE: nf_tables_msg_types = 17; +pub const NFT_MSG_NEWOBJ: nf_tables_msg_types = 18; +pub const NFT_MSG_GETOBJ: nf_tables_msg_types = 19; +pub const NFT_MSG_DELOBJ: nf_tables_msg_types = 20; +pub const NFT_MSG_GETOBJ_RESET: nf_tables_msg_types = 21; +pub const NFT_MSG_NEWFLOWTABLE: nf_tables_msg_types = 22; +pub const NFT_MSG_GETFLOWTABLE: nf_tables_msg_types = 23; +pub const NFT_MSG_DELFLOWTABLE: nf_tables_msg_types = 24; +pub const NFT_MSG_MAX: nf_tables_msg_types = 25; +pub type nf_tables_msg_types = ::std::os::raw::c_uint; +pub const NFTA_LIST_UNSPEC: nft_list_attributes = 0; +pub const NFTA_LIST_ELEM: nft_list_attributes = 1; +pub const __NFTA_LIST_MAX: nft_list_attributes = 2; +pub type nft_list_attributes = u16; +pub const NFTA_HOOK_UNSPEC: nft_hook_attributes = 0; +pub const NFTA_HOOK_HOOKNUM: nft_hook_attributes = 1; +pub const NFTA_HOOK_PRIORITY: nft_hook_attributes = 2; +pub const NFTA_HOOK_DEV: nft_hook_attributes = 3; +pub const NFTA_HOOK_DEVS: nft_hook_attributes = 4; +pub const __NFTA_HOOK_MAX: nft_hook_attributes = 5; +pub type nft_hook_attributes = u16; +pub const NFT_TABLE_F_DORMANT: nft_table_flags = 1; +pub const NFT_TABLE_F_OWNER: nft_table_flags = 2; +pub type nft_table_flags = ::std::os::raw::c_uint; +pub const NFTA_TABLE_UNSPEC: nft_table_attributes = 0; +pub const NFTA_TABLE_NAME: nft_table_attributes = 1; +pub const NFTA_TABLE_FLAGS: nft_table_attributes = 2; +pub const NFTA_TABLE_USE: nft_table_attributes = 3; +pub const NFTA_TABLE_HANDLE: nft_table_attributes = 4; +pub const NFTA_TABLE_PAD: nft_table_attributes = 5; +pub const NFTA_TABLE_USERDATA: nft_table_attributes = 6; +pub const NFTA_TABLE_OWNER: nft_table_attributes = 7; +pub const __NFTA_TABLE_MAX: nft_table_attributes = 8; +pub type nft_table_attributes = u16; +pub const NFT_CHAIN_BASE: nft_chain_flags = 1; +pub const NFT_CHAIN_HW_OFFLOAD: nft_chain_flags = 2; +pub const NFT_CHAIN_BINDING: nft_chain_flags = 4; +pub type nft_chain_flags = ::std::os::raw::c_uint; +pub const NFTA_CHAIN_UNSPEC: nft_chain_attributes = 0; +pub const NFTA_CHAIN_TABLE: nft_chain_attributes = 1; +pub const NFTA_CHAIN_HANDLE: nft_chain_attributes = 2; +pub const NFTA_CHAIN_NAME: nft_chain_attributes = 3; +pub const NFTA_CHAIN_HOOK: nft_chain_attributes = 4; +pub const NFTA_CHAIN_POLICY: nft_chain_attributes = 5; +pub const NFTA_CHAIN_USE: nft_chain_attributes = 6; +pub const NFTA_CHAIN_TYPE: nft_chain_attributes = 7; +pub const NFTA_CHAIN_COUNTERS: nft_chain_attributes = 8; +pub const NFTA_CHAIN_PAD: nft_chain_attributes = 9; +pub const NFTA_CHAIN_FLAGS: nft_chain_attributes = 10; +pub const NFTA_CHAIN_ID: nft_chain_attributes = 11; +pub const NFTA_CHAIN_USERDATA: nft_chain_attributes = 12; +pub const __NFTA_CHAIN_MAX: nft_chain_attributes = 13; +pub type nft_chain_attributes = u16; +pub const NFTA_RULE_UNSPEC: nft_rule_attributes = 0; +pub const NFTA_RULE_TABLE: nft_rule_attributes = 1; +pub const NFTA_RULE_CHAIN: nft_rule_attributes = 2; +pub const NFTA_RULE_HANDLE: nft_rule_attributes = 3; +pub const NFTA_RULE_EXPRESSIONS: nft_rule_attributes = 4; +pub const NFTA_RULE_COMPAT: nft_rule_attributes = 5; +pub const NFTA_RULE_POSITION: nft_rule_attributes = 6; +pub const NFTA_RULE_USERDATA: nft_rule_attributes = 7; +pub const NFTA_RULE_PAD: nft_rule_attributes = 8; +pub const NFTA_RULE_ID: nft_rule_attributes = 9; +pub const NFTA_RULE_POSITION_ID: nft_rule_attributes = 10; +pub const NFTA_RULE_CHAIN_ID: nft_rule_attributes = 11; +pub const __NFTA_RULE_MAX: nft_rule_attributes = 12; +pub type nft_rule_attributes = u16; +pub const NFT_RULE_COMPAT_F_INV: nft_rule_compat_flags = 2; +pub const NFT_RULE_COMPAT_F_MASK: nft_rule_compat_flags = 2; +pub type nft_rule_compat_flags = ::std::os::raw::c_uint; +pub const NFTA_RULE_COMPAT_UNSPEC: nft_rule_compat_attributes = 0; +pub const NFTA_RULE_COMPAT_PROTO: nft_rule_compat_attributes = 1; +pub const NFTA_RULE_COMPAT_FLAGS: nft_rule_compat_attributes = 2; +pub const __NFTA_RULE_COMPAT_MAX: nft_rule_compat_attributes = 3; +pub type nft_rule_compat_attributes = u16; +pub const NFT_SET_ANONYMOUS: nft_set_flags = 1; +pub const NFT_SET_CONSTANT: nft_set_flags = 2; +pub const NFT_SET_INTERVAL: nft_set_flags = 4; +pub const NFT_SET_MAP: nft_set_flags = 8; +pub const NFT_SET_TIMEOUT: nft_set_flags = 16; +pub const NFT_SET_EVAL: nft_set_flags = 32; +pub const NFT_SET_OBJECT: nft_set_flags = 64; +pub const NFT_SET_CONCAT: nft_set_flags = 128; +pub const NFT_SET_EXPR: nft_set_flags = 256; +pub type nft_set_flags = ::std::os::raw::c_uint; +pub const NFT_SET_POL_PERFORMANCE: nft_set_policies = 0; +pub const NFT_SET_POL_MEMORY: nft_set_policies = 1; +pub type nft_set_policies = ::std::os::raw::c_uint; +pub const NFTA_SET_DESC_UNSPEC: nft_set_desc_attributes = 0; +pub const NFTA_SET_DESC_SIZE: nft_set_desc_attributes = 1; +pub const NFTA_SET_DESC_CONCAT: nft_set_desc_attributes = 2; +pub const __NFTA_SET_DESC_MAX: nft_set_desc_attributes = 3; +pub type nft_set_desc_attributes = u16; +pub const NFTA_SET_FIELD_UNSPEC: nft_set_field_attributes = 0; +pub const NFTA_SET_FIELD_LEN: nft_set_field_attributes = 1; +pub const __NFTA_SET_FIELD_MAX: nft_set_field_attributes = 2; +pub type nft_set_field_attributes = u16; +pub const NFTA_SET_UNSPEC: nft_set_attributes = 0; +pub const NFTA_SET_TABLE: nft_set_attributes = 1; +pub const NFTA_SET_NAME: nft_set_attributes = 2; +pub const NFTA_SET_FLAGS: nft_set_attributes = 3; +pub const NFTA_SET_KEY_TYPE: nft_set_attributes = 4; +pub const NFTA_SET_KEY_LEN: nft_set_attributes = 5; +pub const NFTA_SET_DATA_TYPE: nft_set_attributes = 6; +pub const NFTA_SET_DATA_LEN: nft_set_attributes = 7; +pub const NFTA_SET_POLICY: nft_set_attributes = 8; +pub const NFTA_SET_DESC: nft_set_attributes = 9; +pub const NFTA_SET_ID: nft_set_attributes = 10; +pub const NFTA_SET_TIMEOUT: nft_set_attributes = 11; +pub const NFTA_SET_GC_INTERVAL: nft_set_attributes = 12; +pub const NFTA_SET_USERDATA: nft_set_attributes = 13; +pub const NFTA_SET_PAD: nft_set_attributes = 14; +pub const NFTA_SET_OBJ_TYPE: nft_set_attributes = 15; +pub const NFTA_SET_HANDLE: nft_set_attributes = 16; +pub const NFTA_SET_EXPR: nft_set_attributes = 17; +pub const NFTA_SET_EXPRESSIONS: nft_set_attributes = 18; +pub const __NFTA_SET_MAX: nft_set_attributes = 19; +pub type nft_set_attributes = u16; +pub const NFT_SET_ELEM_INTERVAL_END: nft_set_elem_flags = 1; +pub const NFT_SET_ELEM_CATCHALL: nft_set_elem_flags = 2; +pub type nft_set_elem_flags = ::std::os::raw::c_uint; +pub const NFTA_SET_ELEM_UNSPEC: nft_set_elem_attributes = 0; +pub const NFTA_SET_ELEM_KEY: nft_set_elem_attributes = 1; +pub const NFTA_SET_ELEM_DATA: nft_set_elem_attributes = 2; +pub const NFTA_SET_ELEM_FLAGS: nft_set_elem_attributes = 3; +pub const NFTA_SET_ELEM_TIMEOUT: nft_set_elem_attributes = 4; +pub const NFTA_SET_ELEM_EXPIRATION: nft_set_elem_attributes = 5; +pub const NFTA_SET_ELEM_USERDATA: nft_set_elem_attributes = 6; +pub const NFTA_SET_ELEM_EXPR: nft_set_elem_attributes = 7; +pub const NFTA_SET_ELEM_PAD: nft_set_elem_attributes = 8; +pub const NFTA_SET_ELEM_OBJREF: nft_set_elem_attributes = 9; +pub const NFTA_SET_ELEM_KEY_END: nft_set_elem_attributes = 10; +pub const NFTA_SET_ELEM_EXPRESSIONS: nft_set_elem_attributes = 11; +pub const __NFTA_SET_ELEM_MAX: nft_set_elem_attributes = 12; +pub type nft_set_elem_attributes = u16; +pub const NFTA_SET_ELEM_LIST_UNSPEC: nft_set_elem_list_attributes = 0; +pub const NFTA_SET_ELEM_LIST_TABLE: nft_set_elem_list_attributes = 1; +pub const NFTA_SET_ELEM_LIST_SET: nft_set_elem_list_attributes = 2; +pub const NFTA_SET_ELEM_LIST_ELEMENTS: nft_set_elem_list_attributes = 3; +pub const NFTA_SET_ELEM_LIST_SET_ID: nft_set_elem_list_attributes = 4; +pub const __NFTA_SET_ELEM_LIST_MAX: nft_set_elem_list_attributes = 5; +pub type nft_set_elem_list_attributes = u16; +pub const NFT_DATA_VALUE: nft_data_types = 0; +pub const NFT_DATA_VERDICT: nft_data_types = 4294967040; +pub type nft_data_types = ::std::os::raw::c_uint; +pub const NFTA_DATA_UNSPEC: nft_data_attributes = 0; +pub const NFTA_DATA_VALUE: nft_data_attributes = 1; +pub const NFTA_DATA_VERDICT: nft_data_attributes = 2; +pub const __NFTA_DATA_MAX: nft_data_attributes = 3; +pub type nft_data_attributes = u16; +pub const NFTA_VERDICT_UNSPEC: nft_verdict_attributes = 0; +pub const NFTA_VERDICT_CODE: nft_verdict_attributes = 1; +pub const NFTA_VERDICT_CHAIN: nft_verdict_attributes = 2; +pub const NFTA_VERDICT_CHAIN_ID: nft_verdict_attributes = 3; +pub const __NFTA_VERDICT_MAX: nft_verdict_attributes = 4; +pub type nft_verdict_attributes = u16; +pub const NFTA_EXPR_UNSPEC: nft_expr_attributes = 0; +pub const NFTA_EXPR_NAME: nft_expr_attributes = 1; +pub const NFTA_EXPR_DATA: nft_expr_attributes = 2; +pub const __NFTA_EXPR_MAX: nft_expr_attributes = 3; +pub type nft_expr_attributes = u16; +pub const NFTA_IMMEDIATE_UNSPEC: nft_immediate_attributes = 0; +pub const NFTA_IMMEDIATE_DREG: nft_immediate_attributes = 1; +pub const NFTA_IMMEDIATE_DATA: nft_immediate_attributes = 2; +pub const __NFTA_IMMEDIATE_MAX: nft_immediate_attributes = 3; +pub type nft_immediate_attributes = u16; +pub const NFT_BITWISE_BOOL: nft_bitwise_ops = 0; +pub const NFT_BITWISE_LSHIFT: nft_bitwise_ops = 1; +pub const NFT_BITWISE_RSHIFT: nft_bitwise_ops = 2; +pub type nft_bitwise_ops = ::std::os::raw::c_uint; +pub const NFTA_BITWISE_UNSPEC: nft_bitwise_attributes = 0; +pub const NFTA_BITWISE_SREG: nft_bitwise_attributes = 1; +pub const NFTA_BITWISE_DREG: nft_bitwise_attributes = 2; +pub const NFTA_BITWISE_LEN: nft_bitwise_attributes = 3; +pub const NFTA_BITWISE_MASK: nft_bitwise_attributes = 4; +pub const NFTA_BITWISE_XOR: nft_bitwise_attributes = 5; +pub const NFTA_BITWISE_OP: nft_bitwise_attributes = 6; +pub const NFTA_BITWISE_DATA: nft_bitwise_attributes = 7; +pub const __NFTA_BITWISE_MAX: nft_bitwise_attributes = 8; +pub type nft_bitwise_attributes = u16; +pub const NFT_BYTEORDER_NTOH: nft_byteorder_ops = 0; +pub const NFT_BYTEORDER_HTON: nft_byteorder_ops = 1; +pub type nft_byteorder_ops = ::std::os::raw::c_uint; +pub const NFTA_BYTEORDER_UNSPEC: nft_byteorder_attributes = 0; +pub const NFTA_BYTEORDER_SREG: nft_byteorder_attributes = 1; +pub const NFTA_BYTEORDER_DREG: nft_byteorder_attributes = 2; +pub const NFTA_BYTEORDER_OP: nft_byteorder_attributes = 3; +pub const NFTA_BYTEORDER_LEN: nft_byteorder_attributes = 4; +pub const NFTA_BYTEORDER_SIZE: nft_byteorder_attributes = 5; +pub const __NFTA_BYTEORDER_MAX: nft_byteorder_attributes = 6; +pub type nft_byteorder_attributes = u16; +pub const NFT_CMP_EQ: nft_cmp_ops = 0; +pub const NFT_CMP_NEQ: nft_cmp_ops = 1; +pub const NFT_CMP_LT: nft_cmp_ops = 2; +pub const NFT_CMP_LTE: nft_cmp_ops = 3; +pub const NFT_CMP_GT: nft_cmp_ops = 4; +pub const NFT_CMP_GTE: nft_cmp_ops = 5; +pub type nft_cmp_ops = ::std::os::raw::c_uint; +pub const NFTA_CMP_UNSPEC: nft_cmp_attributes = 0; +pub const NFTA_CMP_SREG: nft_cmp_attributes = 1; +pub const NFTA_CMP_OP: nft_cmp_attributes = 2; +pub const NFTA_CMP_DATA: nft_cmp_attributes = 3; +pub const __NFTA_CMP_MAX: nft_cmp_attributes = 4; +pub type nft_cmp_attributes = u16; +pub const NFT_RANGE_EQ: nft_range_ops = 0; +pub const NFT_RANGE_NEQ: nft_range_ops = 1; +pub type nft_range_ops = ::std::os::raw::c_uint; +pub const NFTA_RANGE_UNSPEC: nft_range_attributes = 0; +pub const NFTA_RANGE_SREG: nft_range_attributes = 1; +pub const NFTA_RANGE_OP: nft_range_attributes = 2; +pub const NFTA_RANGE_FROM_DATA: nft_range_attributes = 3; +pub const NFTA_RANGE_TO_DATA: nft_range_attributes = 4; +pub const __NFTA_RANGE_MAX: nft_range_attributes = 5; +pub type nft_range_attributes = u16; +pub const NFT_LOOKUP_F_INV: nft_lookup_flags = 1; +pub type nft_lookup_flags = ::std::os::raw::c_uint; +pub const NFTA_LOOKUP_UNSPEC: nft_lookup_attributes = 0; +pub const NFTA_LOOKUP_SET: nft_lookup_attributes = 1; +pub const NFTA_LOOKUP_SREG: nft_lookup_attributes = 2; +pub const NFTA_LOOKUP_DREG: nft_lookup_attributes = 3; +pub const NFTA_LOOKUP_SET_ID: nft_lookup_attributes = 4; +pub const NFTA_LOOKUP_FLAGS: nft_lookup_attributes = 5; +pub const __NFTA_LOOKUP_MAX: nft_lookup_attributes = 6; +pub type nft_lookup_attributes = u16; +pub const NFT_DYNSET_OP_ADD: nft_dynset_ops = 0; +pub const NFT_DYNSET_OP_UPDATE: nft_dynset_ops = 1; +pub const NFT_DYNSET_OP_DELETE: nft_dynset_ops = 2; +pub type nft_dynset_ops = ::std::os::raw::c_uint; +pub const NFT_DYNSET_F_INV: nft_dynset_flags = 1; +pub const NFT_DYNSET_F_EXPR: nft_dynset_flags = 2; +pub type nft_dynset_flags = ::std::os::raw::c_uint; +pub const NFTA_DYNSET_UNSPEC: nft_dynset_attributes = 0; +pub const NFTA_DYNSET_SET_NAME: nft_dynset_attributes = 1; +pub const NFTA_DYNSET_SET_ID: nft_dynset_attributes = 2; +pub const NFTA_DYNSET_OP: nft_dynset_attributes = 3; +pub const NFTA_DYNSET_SREG_KEY: nft_dynset_attributes = 4; +pub const NFTA_DYNSET_SREG_DATA: nft_dynset_attributes = 5; +pub const NFTA_DYNSET_TIMEOUT: nft_dynset_attributes = 6; +pub const NFTA_DYNSET_EXPR: nft_dynset_attributes = 7; +pub const NFTA_DYNSET_PAD: nft_dynset_attributes = 8; +pub const NFTA_DYNSET_FLAGS: nft_dynset_attributes = 9; +pub const NFTA_DYNSET_EXPRESSIONS: nft_dynset_attributes = 10; +pub const __NFTA_DYNSET_MAX: nft_dynset_attributes = 11; +pub type nft_dynset_attributes = u16; +pub const NFT_PAYLOAD_LL_HEADER: nft_payload_bases = 0; +pub const NFT_PAYLOAD_NETWORK_HEADER: nft_payload_bases = 1; +pub const NFT_PAYLOAD_TRANSPORT_HEADER: nft_payload_bases = 2; +pub type nft_payload_bases = ::std::os::raw::c_uint; +pub const NFT_PAYLOAD_CSUM_NONE: nft_payload_csum_types = 0; +pub const NFT_PAYLOAD_CSUM_INET: nft_payload_csum_types = 1; +pub const NFT_PAYLOAD_CSUM_SCTP: nft_payload_csum_types = 2; +pub type nft_payload_csum_types = ::std::os::raw::c_uint; +pub const NFT_PAYLOAD_L4CSUM_PSEUDOHDR: nft_payload_csum_flags = 1; +pub type nft_payload_csum_flags = ::std::os::raw::c_uint; +pub const NFTA_PAYLOAD_UNSPEC: nft_payload_attributes = 0; +pub const NFTA_PAYLOAD_DREG: nft_payload_attributes = 1; +pub const NFTA_PAYLOAD_BASE: nft_payload_attributes = 2; +pub const NFTA_PAYLOAD_OFFSET: nft_payload_attributes = 3; +pub const NFTA_PAYLOAD_LEN: nft_payload_attributes = 4; +pub const NFTA_PAYLOAD_SREG: nft_payload_attributes = 5; +pub const NFTA_PAYLOAD_CSUM_TYPE: nft_payload_attributes = 6; +pub const NFTA_PAYLOAD_CSUM_OFFSET: nft_payload_attributes = 7; +pub const NFTA_PAYLOAD_CSUM_FLAGS: nft_payload_attributes = 8; +pub const __NFTA_PAYLOAD_MAX: nft_payload_attributes = 9; +pub type nft_payload_attributes = u16; +pub const NFT_EXTHDR_F_PRESENT: nft_exthdr_flags = 1; +pub type nft_exthdr_flags = ::std::os::raw::c_uint; +pub const NFT_EXTHDR_OP_IPV6: nft_exthdr_op = 0; +pub const NFT_EXTHDR_OP_TCPOPT: nft_exthdr_op = 1; +pub const NFT_EXTHDR_OP_IPV4: nft_exthdr_op = 2; +pub const NFT_EXTHDR_OP_SCTP: nft_exthdr_op = 3; +pub const __NFT_EXTHDR_OP_MAX: nft_exthdr_op = 4; +pub type nft_exthdr_op = ::std::os::raw::c_uint; +pub const NFTA_EXTHDR_UNSPEC: nft_exthdr_attributes = 0; +pub const NFTA_EXTHDR_DREG: nft_exthdr_attributes = 1; +pub const NFTA_EXTHDR_TYPE: nft_exthdr_attributes = 2; +pub const NFTA_EXTHDR_OFFSET: nft_exthdr_attributes = 3; +pub const NFTA_EXTHDR_LEN: nft_exthdr_attributes = 4; +pub const NFTA_EXTHDR_FLAGS: nft_exthdr_attributes = 5; +pub const NFTA_EXTHDR_OP: nft_exthdr_attributes = 6; +pub const NFTA_EXTHDR_SREG: nft_exthdr_attributes = 7; +pub const __NFTA_EXTHDR_MAX: nft_exthdr_attributes = 8; +pub type nft_exthdr_attributes = u16; +pub const NFT_META_LEN: nft_meta_keys = 0; +pub const NFT_META_PROTOCOL: nft_meta_keys = 1; +pub const NFT_META_PRIORITY: nft_meta_keys = 2; +pub const NFT_META_MARK: nft_meta_keys = 3; +pub const NFT_META_IIF: nft_meta_keys = 4; +pub const NFT_META_OIF: nft_meta_keys = 5; +pub const NFT_META_IIFNAME: nft_meta_keys = 6; +pub const NFT_META_OIFNAME: nft_meta_keys = 7; +pub const NFT_META_IIFTYPE: nft_meta_keys = 8; +pub const NFT_META_OIFTYPE: nft_meta_keys = 9; +pub const NFT_META_SKUID: nft_meta_keys = 10; +pub const NFT_META_SKGID: nft_meta_keys = 11; +pub const NFT_META_NFTRACE: nft_meta_keys = 12; +pub const NFT_META_RTCLASSID: nft_meta_keys = 13; +pub const NFT_META_SECMARK: nft_meta_keys = 14; +pub const NFT_META_NFPROTO: nft_meta_keys = 15; +pub const NFT_META_L4PROTO: nft_meta_keys = 16; +pub const NFT_META_BRI_IIFNAME: nft_meta_keys = 17; +pub const NFT_META_BRI_OIFNAME: nft_meta_keys = 18; +pub const NFT_META_PKTTYPE: nft_meta_keys = 19; +pub const NFT_META_CPU: nft_meta_keys = 20; +pub const NFT_META_IIFGROUP: nft_meta_keys = 21; +pub const NFT_META_OIFGROUP: nft_meta_keys = 22; +pub const NFT_META_CGROUP: nft_meta_keys = 23; +pub const NFT_META_PRANDOM: nft_meta_keys = 24; +pub const NFT_META_SECPATH: nft_meta_keys = 25; +pub const NFT_META_IIFKIND: nft_meta_keys = 26; +pub const NFT_META_OIFKIND: nft_meta_keys = 27; +pub const NFT_META_BRI_IIFPVID: nft_meta_keys = 28; +pub const NFT_META_BRI_IIFVPROTO: nft_meta_keys = 29; +pub const NFT_META_TIME_NS: nft_meta_keys = 30; +pub const NFT_META_TIME_DAY: nft_meta_keys = 31; +pub const NFT_META_TIME_HOUR: nft_meta_keys = 32; +pub const NFT_META_SDIF: nft_meta_keys = 33; +pub const NFT_META_SDIFNAME: nft_meta_keys = 34; +pub type nft_meta_keys = ::std::os::raw::c_uint; +pub const NFT_RT_CLASSID: nft_rt_keys = 0; +pub const NFT_RT_NEXTHOP4: nft_rt_keys = 1; +pub const NFT_RT_NEXTHOP6: nft_rt_keys = 2; +pub const NFT_RT_TCPMSS: nft_rt_keys = 3; +pub const NFT_RT_XFRM: nft_rt_keys = 4; +pub const __NFT_RT_MAX: nft_rt_keys = 5; +pub type nft_rt_keys = ::std::os::raw::c_uint; +pub const NFT_HASH_JENKINS: nft_hash_types = 0; +pub const NFT_HASH_SYM: nft_hash_types = 1; +pub type nft_hash_types = ::std::os::raw::c_uint; +pub const NFTA_HASH_UNSPEC: nft_hash_attributes = 0; +pub const NFTA_HASH_SREG: nft_hash_attributes = 1; +pub const NFTA_HASH_DREG: nft_hash_attributes = 2; +pub const NFTA_HASH_LEN: nft_hash_attributes = 3; +pub const NFTA_HASH_MODULUS: nft_hash_attributes = 4; +pub const NFTA_HASH_SEED: nft_hash_attributes = 5; +pub const NFTA_HASH_OFFSET: nft_hash_attributes = 6; +pub const NFTA_HASH_TYPE: nft_hash_attributes = 7; +pub const NFTA_HASH_SET_NAME: nft_hash_attributes = 8; +pub const NFTA_HASH_SET_ID: nft_hash_attributes = 9; +pub const __NFTA_HASH_MAX: nft_hash_attributes = 10; +pub type nft_hash_attributes = u16; +pub const NFTA_META_UNSPEC: nft_meta_attributes = 0; +pub const NFTA_META_DREG: nft_meta_attributes = 1; +pub const NFTA_META_KEY: nft_meta_attributes = 2; +pub const NFTA_META_SREG: nft_meta_attributes = 3; +pub const __NFTA_META_MAX: nft_meta_attributes = 4; +pub type nft_meta_attributes = u16; +pub const NFTA_RT_UNSPEC: nft_rt_attributes = 0; +pub const NFTA_RT_DREG: nft_rt_attributes = 1; +pub const NFTA_RT_KEY: nft_rt_attributes = 2; +pub const __NFTA_RT_MAX: nft_rt_attributes = 3; +pub type nft_rt_attributes = u16; +pub const NFTA_SOCKET_UNSPEC: nft_socket_attributes = 0; +pub const NFTA_SOCKET_KEY: nft_socket_attributes = 1; +pub const NFTA_SOCKET_DREG: nft_socket_attributes = 2; +pub const NFTA_SOCKET_LEVEL: nft_socket_attributes = 3; +pub const __NFTA_SOCKET_MAX: nft_socket_attributes = 4; +pub type nft_socket_attributes = u16; +pub const NFT_SOCKET_TRANSPARENT: nft_socket_keys = 0; +pub const NFT_SOCKET_MARK: nft_socket_keys = 1; +pub const NFT_SOCKET_WILDCARD: nft_socket_keys = 2; +pub const NFT_SOCKET_CGROUPV2: nft_socket_keys = 3; +pub const __NFT_SOCKET_MAX: nft_socket_keys = 4; +pub type nft_socket_keys = ::std::os::raw::c_uint; +pub const NFT_CT_STATE: nft_ct_keys = 0; +pub const NFT_CT_DIRECTION: nft_ct_keys = 1; +pub const NFT_CT_STATUS: nft_ct_keys = 2; +pub const NFT_CT_MARK: nft_ct_keys = 3; +pub const NFT_CT_SECMARK: nft_ct_keys = 4; +pub const NFT_CT_EXPIRATION: nft_ct_keys = 5; +pub const NFT_CT_HELPER: nft_ct_keys = 6; +pub const NFT_CT_L3PROTOCOL: nft_ct_keys = 7; +pub const NFT_CT_SRC: nft_ct_keys = 8; +pub const NFT_CT_DST: nft_ct_keys = 9; +pub const NFT_CT_PROTOCOL: nft_ct_keys = 10; +pub const NFT_CT_PROTO_SRC: nft_ct_keys = 11; +pub const NFT_CT_PROTO_DST: nft_ct_keys = 12; +pub const NFT_CT_LABELS: nft_ct_keys = 13; +pub const NFT_CT_PKTS: nft_ct_keys = 14; +pub const NFT_CT_BYTES: nft_ct_keys = 15; +pub const NFT_CT_AVGPKT: nft_ct_keys = 16; +pub const NFT_CT_ZONE: nft_ct_keys = 17; +pub const NFT_CT_EVENTMASK: nft_ct_keys = 18; +pub const NFT_CT_SRC_IP: nft_ct_keys = 19; +pub const NFT_CT_DST_IP: nft_ct_keys = 20; +pub const NFT_CT_SRC_IP6: nft_ct_keys = 21; +pub const NFT_CT_DST_IP6: nft_ct_keys = 22; +pub const NFT_CT_ID: nft_ct_keys = 23; +pub const __NFT_CT_MAX: nft_ct_keys = 24; +pub type nft_ct_keys = ::std::os::raw::c_uint; +pub const NFTA_CT_UNSPEC: nft_ct_attributes = 0; +pub const NFTA_CT_DREG: nft_ct_attributes = 1; +pub const NFTA_CT_KEY: nft_ct_attributes = 2; +pub const NFTA_CT_DIRECTION: nft_ct_attributes = 3; +pub const NFTA_CT_SREG: nft_ct_attributes = 4; +pub const __NFTA_CT_MAX: nft_ct_attributes = 5; +pub type nft_ct_attributes = u16; +pub const NFTA_FLOW_UNSPEC: nft_offload_attributes = 0; +pub const NFTA_FLOW_TABLE_NAME: nft_offload_attributes = 1; +pub const __NFTA_FLOW_MAX: nft_offload_attributes = 2; +pub type nft_offload_attributes = u16; +pub const NFT_LIMIT_PKTS: nft_limit_type = 0; +pub const NFT_LIMIT_PKT_BYTES: nft_limit_type = 1; +pub type nft_limit_type = ::std::os::raw::c_uint; +pub const NFT_LIMIT_F_INV: nft_limit_flags = 1; +pub type nft_limit_flags = ::std::os::raw::c_uint; +pub const NFTA_LIMIT_UNSPEC: nft_limit_attributes = 0; +pub const NFTA_LIMIT_RATE: nft_limit_attributes = 1; +pub const NFTA_LIMIT_UNIT: nft_limit_attributes = 2; +pub const NFTA_LIMIT_BURST: nft_limit_attributes = 3; +pub const NFTA_LIMIT_TYPE: nft_limit_attributes = 4; +pub const NFTA_LIMIT_FLAGS: nft_limit_attributes = 5; +pub const NFTA_LIMIT_PAD: nft_limit_attributes = 6; +pub const __NFTA_LIMIT_MAX: nft_limit_attributes = 7; +pub type nft_limit_attributes = u16; +pub const NFT_CONNLIMIT_F_INV: nft_connlimit_flags = 1; +pub type nft_connlimit_flags = ::std::os::raw::c_uint; +pub const NFTA_CONNLIMIT_UNSPEC: nft_connlimit_attributes = 0; +pub const NFTA_CONNLIMIT_COUNT: nft_connlimit_attributes = 1; +pub const NFTA_CONNLIMIT_FLAGS: nft_connlimit_attributes = 2; +pub const __NFTA_CONNLIMIT_MAX: nft_connlimit_attributes = 3; +pub type nft_connlimit_attributes = u16; +pub const NFTA_COUNTER_UNSPEC: nft_counter_attributes = 0; +pub const NFTA_COUNTER_BYTES: nft_counter_attributes = 1; +pub const NFTA_COUNTER_PACKETS: nft_counter_attributes = 2; +pub const NFTA_COUNTER_PAD: nft_counter_attributes = 3; +pub const __NFTA_COUNTER_MAX: nft_counter_attributes = 4; +pub type nft_counter_attributes = u16; +pub const NFTA_LAST_UNSPEC: nft_last_attributes = 0; +pub const NFTA_LAST_SET: nft_last_attributes = 1; +pub const NFTA_LAST_MSECS: nft_last_attributes = 2; +pub const NFTA_LAST_PAD: nft_last_attributes = 3; +pub const __NFTA_LAST_MAX: nft_last_attributes = 4; +pub type nft_last_attributes = u16; +pub const NFTA_LOG_UNSPEC: nft_log_attributes = 0; +pub const NFTA_LOG_GROUP: nft_log_attributes = 1; +pub const NFTA_LOG_PREFIX: nft_log_attributes = 2; +pub const NFTA_LOG_SNAPLEN: nft_log_attributes = 3; +pub const NFTA_LOG_QTHRESHOLD: nft_log_attributes = 4; +pub const NFTA_LOG_LEVEL: nft_log_attributes = 5; +pub const NFTA_LOG_FLAGS: nft_log_attributes = 6; +pub const __NFTA_LOG_MAX: nft_log_attributes = 7; +pub type nft_log_attributes = u16; +pub const NFT_LOGLEVEL_EMERG: nft_log_level = 0; +pub const NFT_LOGLEVEL_ALERT: nft_log_level = 1; +pub const NFT_LOGLEVEL_CRIT: nft_log_level = 2; +pub const NFT_LOGLEVEL_ERR: nft_log_level = 3; +pub const NFT_LOGLEVEL_WARNING: nft_log_level = 4; +pub const NFT_LOGLEVEL_NOTICE: nft_log_level = 5; +pub const NFT_LOGLEVEL_INFO: nft_log_level = 6; +pub const NFT_LOGLEVEL_DEBUG: nft_log_level = 7; +pub const NFT_LOGLEVEL_AUDIT: nft_log_level = 8; +pub const __NFT_LOGLEVEL_MAX: nft_log_level = 9; +pub type nft_log_level = ::std::os::raw::c_uint; +pub const NFTA_QUEUE_UNSPEC: nft_queue_attributes = 0; +pub const NFTA_QUEUE_NUM: nft_queue_attributes = 1; +pub const NFTA_QUEUE_TOTAL: nft_queue_attributes = 2; +pub const NFTA_QUEUE_FLAGS: nft_queue_attributes = 3; +pub const NFTA_QUEUE_SREG_QNUM: nft_queue_attributes = 4; +pub const __NFTA_QUEUE_MAX: nft_queue_attributes = 5; +pub type nft_queue_attributes = u16; +pub const NFT_QUOTA_F_INV: nft_quota_flags = 1; +pub const NFT_QUOTA_F_DEPLETED: nft_quota_flags = 2; +pub type nft_quota_flags = ::std::os::raw::c_uint; +pub const NFTA_QUOTA_UNSPEC: nft_quota_attributes = 0; +pub const NFTA_QUOTA_BYTES: nft_quota_attributes = 1; +pub const NFTA_QUOTA_FLAGS: nft_quota_attributes = 2; +pub const NFTA_QUOTA_PAD: nft_quota_attributes = 3; +pub const NFTA_QUOTA_CONSUMED: nft_quota_attributes = 4; +pub const __NFTA_QUOTA_MAX: nft_quota_attributes = 5; +pub type nft_quota_attributes = u16; +pub const NFTA_SECMARK_UNSPEC: nft_secmark_attributes = 0; +pub const NFTA_SECMARK_CTX: nft_secmark_attributes = 1; +pub const __NFTA_SECMARK_MAX: nft_secmark_attributes = 2; +pub type nft_secmark_attributes = u16; +pub const NFT_REJECT_ICMP_UNREACH: nft_reject_types = 0; +pub const NFT_REJECT_TCP_RST: nft_reject_types = 1; +pub const NFT_REJECT_ICMPX_UNREACH: nft_reject_types = 2; +pub type nft_reject_types = ::std::os::raw::c_uint; +pub const NFT_REJECT_ICMPX_NO_ROUTE: nft_reject_inet_code = 0; +pub const NFT_REJECT_ICMPX_PORT_UNREACH: nft_reject_inet_code = 1; +pub const NFT_REJECT_ICMPX_HOST_UNREACH: nft_reject_inet_code = 2; +pub const NFT_REJECT_ICMPX_ADMIN_PROHIBITED: nft_reject_inet_code = 3; +pub const __NFT_REJECT_ICMPX_MAX: nft_reject_inet_code = 4; +pub type nft_reject_inet_code = ::std::os::raw::c_uint; +pub const NFTA_REJECT_UNSPEC: nft_reject_attributes = 0; +pub const NFTA_REJECT_TYPE: nft_reject_attributes = 1; +pub const NFTA_REJECT_ICMP_CODE: nft_reject_attributes = 2; +pub const __NFTA_REJECT_MAX: nft_reject_attributes = 3; +pub type nft_reject_attributes = u16; +pub const NFT_NAT_SNAT: nft_nat_types = 0; +pub const NFT_NAT_DNAT: nft_nat_types = 1; +pub type nft_nat_types = ::std::os::raw::c_uint; +pub const NFTA_NAT_UNSPEC: nft_nat_attributes = 0; +pub const NFTA_NAT_TYPE: nft_nat_attributes = 1; +pub const NFTA_NAT_FAMILY: nft_nat_attributes = 2; +pub const NFTA_NAT_REG_ADDR_MIN: nft_nat_attributes = 3; +pub const NFTA_NAT_REG_ADDR_MAX: nft_nat_attributes = 4; +pub const NFTA_NAT_REG_PROTO_MIN: nft_nat_attributes = 5; +pub const NFTA_NAT_REG_PROTO_MAX: nft_nat_attributes = 6; +pub const NFTA_NAT_FLAGS: nft_nat_attributes = 7; +pub const __NFTA_NAT_MAX: nft_nat_attributes = 8; +pub type nft_nat_attributes = u16; +pub const NFTA_TPROXY_UNSPEC: nft_tproxy_attributes = 0; +pub const NFTA_TPROXY_FAMILY: nft_tproxy_attributes = 1; +pub const NFTA_TPROXY_REG_ADDR: nft_tproxy_attributes = 2; +pub const NFTA_TPROXY_REG_PORT: nft_tproxy_attributes = 3; +pub const __NFTA_TPROXY_MAX: nft_tproxy_attributes = 4; +pub type nft_tproxy_attributes = u16; +pub const NFTA_MASQ_UNSPEC: nft_masq_attributes = 0; +pub const NFTA_MASQ_FLAGS: nft_masq_attributes = 1; +pub const NFTA_MASQ_REG_PROTO_MIN: nft_masq_attributes = 2; +pub const NFTA_MASQ_REG_PROTO_MAX: nft_masq_attributes = 3; +pub const __NFTA_MASQ_MAX: nft_masq_attributes = 4; +pub type nft_masq_attributes = u16; +pub const NFTA_REDIR_UNSPEC: nft_redir_attributes = 0; +pub const NFTA_REDIR_REG_PROTO_MIN: nft_redir_attributes = 1; +pub const NFTA_REDIR_REG_PROTO_MAX: nft_redir_attributes = 2; +pub const NFTA_REDIR_FLAGS: nft_redir_attributes = 3; +pub const __NFTA_REDIR_MAX: nft_redir_attributes = 4; +pub type nft_redir_attributes = u16; +pub const NFTA_DUP_UNSPEC: nft_dup_attributes = 0; +pub const NFTA_DUP_SREG_ADDR: nft_dup_attributes = 1; +pub const NFTA_DUP_SREG_DEV: nft_dup_attributes = 2; +pub const __NFTA_DUP_MAX: nft_dup_attributes = 3; +pub type nft_dup_attributes = u16; +pub const NFTA_FWD_UNSPEC: nft_fwd_attributes = 0; +pub const NFTA_FWD_SREG_DEV: nft_fwd_attributes = 1; +pub const NFTA_FWD_SREG_ADDR: nft_fwd_attributes = 2; +pub const NFTA_FWD_NFPROTO: nft_fwd_attributes = 3; +pub const __NFTA_FWD_MAX: nft_fwd_attributes = 4; +pub type nft_fwd_attributes = u16; +pub const NFTA_OBJREF_UNSPEC: nft_objref_attributes = 0; +pub const NFTA_OBJREF_IMM_TYPE: nft_objref_attributes = 1; +pub const NFTA_OBJREF_IMM_NAME: nft_objref_attributes = 2; +pub const NFTA_OBJREF_SET_SREG: nft_objref_attributes = 3; +pub const NFTA_OBJREF_SET_NAME: nft_objref_attributes = 4; +pub const NFTA_OBJREF_SET_ID: nft_objref_attributes = 5; +pub const __NFTA_OBJREF_MAX: nft_objref_attributes = 6; +pub type nft_objref_attributes = u16; +pub const NFTA_GEN_UNSPEC: nft_gen_attributes = 0; +pub const NFTA_GEN_ID: nft_gen_attributes = 1; +pub const NFTA_GEN_PROC_PID: nft_gen_attributes = 2; +pub const NFTA_GEN_PROC_NAME: nft_gen_attributes = 3; +pub const __NFTA_GEN_MAX: nft_gen_attributes = 4; +pub type nft_gen_attributes = u16; +pub const NFTA_FIB_UNSPEC: nft_fib_attributes = 0; +pub const NFTA_FIB_DREG: nft_fib_attributes = 1; +pub const NFTA_FIB_RESULT: nft_fib_attributes = 2; +pub const NFTA_FIB_FLAGS: nft_fib_attributes = 3; +pub const __NFTA_FIB_MAX: nft_fib_attributes = 4; +pub type nft_fib_attributes = u16; +pub const NFT_FIB_RESULT_UNSPEC: nft_fib_result = 0; +pub const NFT_FIB_RESULT_OIF: nft_fib_result = 1; +pub const NFT_FIB_RESULT_OIFNAME: nft_fib_result = 2; +pub const NFT_FIB_RESULT_ADDRTYPE: nft_fib_result = 3; +pub const __NFT_FIB_RESULT_MAX: nft_fib_result = 4; +pub type nft_fib_result = ::std::os::raw::c_uint; +pub const NFTA_FIB_F_SADDR: nft_fib_flags = 1; +pub const NFTA_FIB_F_DADDR: nft_fib_flags = 2; +pub const NFTA_FIB_F_MARK: nft_fib_flags = 4; +pub const NFTA_FIB_F_IIF: nft_fib_flags = 8; +pub const NFTA_FIB_F_OIF: nft_fib_flags = 16; +pub const NFTA_FIB_F_PRESENT: nft_fib_flags = 32; +pub type nft_fib_flags = ::std::os::raw::c_uint; +pub const NFTA_CT_HELPER_UNSPEC: nft_ct_helper_attributes = 0; +pub const NFTA_CT_HELPER_NAME: nft_ct_helper_attributes = 1; +pub const NFTA_CT_HELPER_L3PROTO: nft_ct_helper_attributes = 2; +pub const NFTA_CT_HELPER_L4PROTO: nft_ct_helper_attributes = 3; +pub const __NFTA_CT_HELPER_MAX: nft_ct_helper_attributes = 4; +pub type nft_ct_helper_attributes = u16; +pub const NFTA_CT_TIMEOUT_UNSPEC: nft_ct_timeout_timeout_attributes = 0; +pub const NFTA_CT_TIMEOUT_L3PROTO: nft_ct_timeout_timeout_attributes = 1; +pub const NFTA_CT_TIMEOUT_L4PROTO: nft_ct_timeout_timeout_attributes = 2; +pub const NFTA_CT_TIMEOUT_DATA: nft_ct_timeout_timeout_attributes = 3; +pub const __NFTA_CT_TIMEOUT_MAX: nft_ct_timeout_timeout_attributes = 4; +pub type nft_ct_timeout_timeout_attributes = u16; +pub const NFTA_CT_EXPECT_UNSPEC: nft_ct_expectation_attributes = 0; +pub const NFTA_CT_EXPECT_L3PROTO: nft_ct_expectation_attributes = 1; +pub const NFTA_CT_EXPECT_L4PROTO: nft_ct_expectation_attributes = 2; +pub const NFTA_CT_EXPECT_DPORT: nft_ct_expectation_attributes = 3; +pub const NFTA_CT_EXPECT_TIMEOUT: nft_ct_expectation_attributes = 4; +pub const NFTA_CT_EXPECT_SIZE: nft_ct_expectation_attributes = 5; +pub const __NFTA_CT_EXPECT_MAX: nft_ct_expectation_attributes = 6; +pub type nft_ct_expectation_attributes = u16; +pub const NFTA_OBJ_UNSPEC: nft_object_attributes = 0; +pub const NFTA_OBJ_TABLE: nft_object_attributes = 1; +pub const NFTA_OBJ_NAME: nft_object_attributes = 2; +pub const NFTA_OBJ_TYPE: nft_object_attributes = 3; +pub const NFTA_OBJ_DATA: nft_object_attributes = 4; +pub const NFTA_OBJ_USE: nft_object_attributes = 5; +pub const NFTA_OBJ_HANDLE: nft_object_attributes = 6; +pub const NFTA_OBJ_PAD: nft_object_attributes = 7; +pub const NFTA_OBJ_USERDATA: nft_object_attributes = 8; +pub const __NFTA_OBJ_MAX: nft_object_attributes = 9; +pub type nft_object_attributes = u16; +pub const NFT_FLOWTABLE_HW_OFFLOAD: nft_flowtable_flags = 1; +pub const NFT_FLOWTABLE_COUNTER: nft_flowtable_flags = 2; +pub const NFT_FLOWTABLE_MASK: nft_flowtable_flags = 3; +pub type nft_flowtable_flags = ::std::os::raw::c_uint; +pub const NFTA_FLOWTABLE_UNSPEC: nft_flowtable_attributes = 0; +pub const NFTA_FLOWTABLE_TABLE: nft_flowtable_attributes = 1; +pub const NFTA_FLOWTABLE_NAME: nft_flowtable_attributes = 2; +pub const NFTA_FLOWTABLE_HOOK: nft_flowtable_attributes = 3; +pub const NFTA_FLOWTABLE_USE: nft_flowtable_attributes = 4; +pub const NFTA_FLOWTABLE_HANDLE: nft_flowtable_attributes = 5; +pub const NFTA_FLOWTABLE_PAD: nft_flowtable_attributes = 6; +pub const NFTA_FLOWTABLE_FLAGS: nft_flowtable_attributes = 7; +pub const __NFTA_FLOWTABLE_MAX: nft_flowtable_attributes = 8; +pub type nft_flowtable_attributes = u16; +pub const NFTA_FLOWTABLE_HOOK_UNSPEC: nft_flowtable_hook_attributes = 0; +pub const NFTA_FLOWTABLE_HOOK_NUM: nft_flowtable_hook_attributes = 1; +pub const NFTA_FLOWTABLE_HOOK_PRIORITY: nft_flowtable_hook_attributes = 2; +pub const NFTA_FLOWTABLE_HOOK_DEVS: nft_flowtable_hook_attributes = 3; +pub const __NFTA_FLOWTABLE_HOOK_MAX: nft_flowtable_hook_attributes = 4; +pub type nft_flowtable_hook_attributes = u16; +pub const NFTA_OSF_UNSPEC: nft_osf_attributes = 0; +pub const NFTA_OSF_DREG: nft_osf_attributes = 1; +pub const NFTA_OSF_TTL: nft_osf_attributes = 2; +pub const NFTA_OSF_FLAGS: nft_osf_attributes = 3; +pub const __NFTA_OSF_MAX: nft_osf_attributes = 4; +pub type nft_osf_attributes = u16; +pub const NFT_OSF_F_VERSION: nft_osf_flags = 1; +pub type nft_osf_flags = ::std::os::raw::c_uint; +pub const NFTA_SYNPROXY_UNSPEC: nft_synproxy_attributes = 0; +pub const NFTA_SYNPROXY_MSS: nft_synproxy_attributes = 1; +pub const NFTA_SYNPROXY_WSCALE: nft_synproxy_attributes = 2; +pub const NFTA_SYNPROXY_FLAGS: nft_synproxy_attributes = 3; +pub const __NFTA_SYNPROXY_MAX: nft_synproxy_attributes = 4; +pub type nft_synproxy_attributes = u16; +pub const NFTA_DEVICE_UNSPEC: nft_devices_attributes = 0; +pub const NFTA_DEVICE_NAME: nft_devices_attributes = 1; +pub const __NFTA_DEVICE_MAX: nft_devices_attributes = 2; +pub type nft_devices_attributes = u16; +pub const NFTA_XFRM_UNSPEC: nft_xfrm_attributes = 0; +pub const NFTA_XFRM_DREG: nft_xfrm_attributes = 1; +pub const NFTA_XFRM_KEY: nft_xfrm_attributes = 2; +pub const NFTA_XFRM_DIR: nft_xfrm_attributes = 3; +pub const NFTA_XFRM_SPNUM: nft_xfrm_attributes = 4; +pub const __NFTA_XFRM_MAX: nft_xfrm_attributes = 5; +pub type nft_xfrm_attributes = u16; +pub const NFT_XFRM_KEY_UNSPEC: nft_xfrm_keys = 0; +pub const NFT_XFRM_KEY_DADDR_IP4: nft_xfrm_keys = 1; +pub const NFT_XFRM_KEY_DADDR_IP6: nft_xfrm_keys = 2; +pub const NFT_XFRM_KEY_SADDR_IP4: nft_xfrm_keys = 3; +pub const NFT_XFRM_KEY_SADDR_IP6: nft_xfrm_keys = 4; +pub const NFT_XFRM_KEY_REQID: nft_xfrm_keys = 5; +pub const NFT_XFRM_KEY_SPI: nft_xfrm_keys = 6; +pub const __NFT_XFRM_KEY_MAX: nft_xfrm_keys = 7; +pub type nft_xfrm_keys = ::std::os::raw::c_uint; +pub const NFTA_TRACE_UNSPEC: nft_trace_attributes = 0; +pub const NFTA_TRACE_TABLE: nft_trace_attributes = 1; +pub const NFTA_TRACE_CHAIN: nft_trace_attributes = 2; +pub const NFTA_TRACE_RULE_HANDLE: nft_trace_attributes = 3; +pub const NFTA_TRACE_TYPE: nft_trace_attributes = 4; +pub const NFTA_TRACE_VERDICT: nft_trace_attributes = 5; +pub const NFTA_TRACE_ID: nft_trace_attributes = 6; +pub const NFTA_TRACE_LL_HEADER: nft_trace_attributes = 7; +pub const NFTA_TRACE_NETWORK_HEADER: nft_trace_attributes = 8; +pub const NFTA_TRACE_TRANSPORT_HEADER: nft_trace_attributes = 9; +pub const NFTA_TRACE_IIF: nft_trace_attributes = 10; +pub const NFTA_TRACE_IIFTYPE: nft_trace_attributes = 11; +pub const NFTA_TRACE_OIF: nft_trace_attributes = 12; +pub const NFTA_TRACE_OIFTYPE: nft_trace_attributes = 13; +pub const NFTA_TRACE_MARK: nft_trace_attributes = 14; +pub const NFTA_TRACE_NFPROTO: nft_trace_attributes = 15; +pub const NFTA_TRACE_POLICY: nft_trace_attributes = 16; +pub const NFTA_TRACE_PAD: nft_trace_attributes = 17; +pub const __NFTA_TRACE_MAX: nft_trace_attributes = 18; +pub type nft_trace_attributes = u16; +pub const NFT_TRACETYPE_UNSPEC: nft_trace_types = 0; +pub const NFT_TRACETYPE_POLICY: nft_trace_types = 1; +pub const NFT_TRACETYPE_RETURN: nft_trace_types = 2; +pub const NFT_TRACETYPE_RULE: nft_trace_types = 3; +pub const __NFT_TRACETYPE_MAX: nft_trace_types = 4; +pub type nft_trace_types = ::std::os::raw::c_uint; +pub const NFTA_NG_UNSPEC: nft_ng_attributes = 0; +pub const NFTA_NG_DREG: nft_ng_attributes = 1; +pub const NFTA_NG_MODULUS: nft_ng_attributes = 2; +pub const NFTA_NG_TYPE: nft_ng_attributes = 3; +pub const NFTA_NG_OFFSET: nft_ng_attributes = 4; +pub const NFTA_NG_SET_NAME: nft_ng_attributes = 5; +pub const NFTA_NG_SET_ID: nft_ng_attributes = 6; +pub const __NFTA_NG_MAX: nft_ng_attributes = 7; +pub type nft_ng_attributes = u16; +pub const NFT_NG_INCREMENTAL: nft_ng_types = 0; +pub const NFT_NG_RANDOM: nft_ng_types = 1; +pub const __NFT_NG_MAX: nft_ng_types = 2; +pub type nft_ng_types = ::std::os::raw::c_uint; +pub const NFTA_TUNNEL_KEY_IP_UNSPEC: nft_tunnel_key_ip_attributes = 0; +pub const NFTA_TUNNEL_KEY_IP_SRC: nft_tunnel_key_ip_attributes = 1; +pub const NFTA_TUNNEL_KEY_IP_DST: nft_tunnel_key_ip_attributes = 2; +pub const __NFTA_TUNNEL_KEY_IP_MAX: nft_tunnel_key_ip_attributes = 3; +pub type nft_tunnel_key_ip_attributes = u16; +pub const NFTA_TUNNEL_KEY_IP6_UNSPEC: nft_tunnel_ip6_attributes = 0; +pub const NFTA_TUNNEL_KEY_IP6_SRC: nft_tunnel_ip6_attributes = 1; +pub const NFTA_TUNNEL_KEY_IP6_DST: nft_tunnel_ip6_attributes = 2; +pub const NFTA_TUNNEL_KEY_IP6_FLOWLABEL: nft_tunnel_ip6_attributes = 3; +pub const __NFTA_TUNNEL_KEY_IP6_MAX: nft_tunnel_ip6_attributes = 4; +pub type nft_tunnel_ip6_attributes = ::std::os::raw::c_uint; +pub const NFTA_TUNNEL_KEY_OPTS_UNSPEC: nft_tunnel_opts_attributes = 0; +pub const NFTA_TUNNEL_KEY_OPTS_VXLAN: nft_tunnel_opts_attributes = 1; +pub const NFTA_TUNNEL_KEY_OPTS_ERSPAN: nft_tunnel_opts_attributes = 2; +pub const NFTA_TUNNEL_KEY_OPTS_GENEVE: nft_tunnel_opts_attributes = 3; +pub const __NFTA_TUNNEL_KEY_OPTS_MAX: nft_tunnel_opts_attributes = 4; +pub type nft_tunnel_opts_attributes = u16; +pub const NFTA_TUNNEL_KEY_VXLAN_UNSPEC: nft_tunnel_opts_vxlan_attributes = 0; +pub const NFTA_TUNNEL_KEY_VXLAN_GBP: nft_tunnel_opts_vxlan_attributes = 1; +pub const __NFTA_TUNNEL_KEY_VXLAN_MAX: nft_tunnel_opts_vxlan_attributes = 2; +pub type nft_tunnel_opts_vxlan_attributes = u16; +pub const NFTA_TUNNEL_KEY_ERSPAN_UNSPEC: nft_tunnel_opts_erspan_attributes = 0; +pub const NFTA_TUNNEL_KEY_ERSPAN_VERSION: nft_tunnel_opts_erspan_attributes = 1; +pub const NFTA_TUNNEL_KEY_ERSPAN_V1_INDEX: nft_tunnel_opts_erspan_attributes = 2; +pub const NFTA_TUNNEL_KEY_ERSPAN_V2_HWID: nft_tunnel_opts_erspan_attributes = 3; +pub const NFTA_TUNNEL_KEY_ERSPAN_V2_DIR: nft_tunnel_opts_erspan_attributes = 4; +pub const __NFTA_TUNNEL_KEY_ERSPAN_MAX: nft_tunnel_opts_erspan_attributes = 5; +pub type nft_tunnel_opts_erspan_attributes = u16; +pub const NFTA_TUNNEL_KEY_GENEVE_UNSPEC: nft_tunnel_opts_geneve_attributes = 0; +pub const NFTA_TUNNEL_KEY_GENEVE_CLASS: nft_tunnel_opts_geneve_attributes = 1; +pub const NFTA_TUNNEL_KEY_GENEVE_TYPE: nft_tunnel_opts_geneve_attributes = 2; +pub const NFTA_TUNNEL_KEY_GENEVE_DATA: nft_tunnel_opts_geneve_attributes = 3; +pub const __NFTA_TUNNEL_KEY_GENEVE_MAX: nft_tunnel_opts_geneve_attributes = 4; +pub type nft_tunnel_opts_geneve_attributes = u16; +pub const NFT_TUNNEL_F_ZERO_CSUM_TX: nft_tunnel_flags = 1; +pub const NFT_TUNNEL_F_DONT_FRAGMENT: nft_tunnel_flags = 2; +pub const NFT_TUNNEL_F_SEQ_NUMBER: nft_tunnel_flags = 4; +pub type nft_tunnel_flags = ::std::os::raw::c_uint; +pub const NFTA_TUNNEL_KEY_UNSPEC: nft_tunnel_key_attributes = 0; +pub const NFTA_TUNNEL_KEY_ID: nft_tunnel_key_attributes = 1; +pub const NFTA_TUNNEL_KEY_IP: nft_tunnel_key_attributes = 2; +pub const NFTA_TUNNEL_KEY_IP6: nft_tunnel_key_attributes = 3; +pub const NFTA_TUNNEL_KEY_FLAGS: nft_tunnel_key_attributes = 4; +pub const NFTA_TUNNEL_KEY_TOS: nft_tunnel_key_attributes = 5; +pub const NFTA_TUNNEL_KEY_TTL: nft_tunnel_key_attributes = 6; +pub const NFTA_TUNNEL_KEY_SPORT: nft_tunnel_key_attributes = 7; +pub const NFTA_TUNNEL_KEY_DPORT: nft_tunnel_key_attributes = 8; +pub const NFTA_TUNNEL_KEY_OPTS: nft_tunnel_key_attributes = 9; +pub const __NFTA_TUNNEL_KEY_MAX: nft_tunnel_key_attributes = 10; +pub type nft_tunnel_key_attributes = u16; +pub const NFT_TUNNEL_PATH: nft_tunnel_keys = 0; +pub const NFT_TUNNEL_ID: nft_tunnel_keys = 1; +pub const __NFT_TUNNEL_MAX: nft_tunnel_keys = 2; +pub type nft_tunnel_keys = ::std::os::raw::c_uint; +pub const NFT_TUNNEL_MODE_NONE: nft_tunnel_mode = 0; +pub const NFT_TUNNEL_MODE_RX: nft_tunnel_mode = 1; +pub const NFT_TUNNEL_MODE_TX: nft_tunnel_mode = 2; +pub const __NFT_TUNNEL_MODE_MAX: nft_tunnel_mode = 3; +pub type nft_tunnel_mode = ::std::os::raw::c_uint; +pub const NFTA_TUNNEL_UNSPEC: nft_tunnel_attributes = 0; +pub const NFTA_TUNNEL_KEY: nft_tunnel_attributes = 1; +pub const NFTA_TUNNEL_DREG: nft_tunnel_attributes = 2; +pub const NFTA_TUNNEL_MODE: nft_tunnel_attributes = 3; +pub const __NFTA_TUNNEL_MAX: nft_tunnel_attributes = 4; +pub type nft_tunnel_attributes = u16; |