14#include <netinet/in.h>
15#include <linux/netfilter/nf_tables.h>
16#include <libnftnl/chain.h>
18static int test_ok = 1;
20static void print_err(
const char *msg)
23 printf(
"\033[31mERROR:\e[0m %s\n", msg);
29 if (strcmp(nftnl_chain_get_str(a, NFTNL_CHAIN_NAME),
30 nftnl_chain_get_str(b, NFTNL_CHAIN_NAME)) != 0)
31 print_err(
"Chain name mismatches");
32 if (strcmp(nftnl_chain_get_str(a, NFTNL_CHAIN_TABLE),
33 nftnl_chain_get_str(b, NFTNL_CHAIN_TABLE)) != 0)
34 print_err(
"Chain table mismatches");
35 if (nftnl_chain_get_u32(a, NFTNL_CHAIN_FAMILY) !=
36 nftnl_chain_get_u32(b, NFTNL_CHAIN_FAMILY))
37 print_err(
"Chain family mismatches");
38 if (nftnl_chain_get_u32(a, NFTNL_CHAIN_POLICY) !=
39 nftnl_chain_get_u32(b, NFTNL_CHAIN_POLICY))
40 print_err(
"Chain policy mismatches");
41 if (nftnl_chain_get_u32(a, NFTNL_CHAIN_HOOKNUM) !=
42 nftnl_chain_get_u32(b, NFTNL_CHAIN_HOOKNUM))
43 print_err(
"Chain hooknum mismatches");
44 if (nftnl_chain_get_s32(a, NFTNL_CHAIN_PRIO) !=
45 nftnl_chain_get_s32(b, NFTNL_CHAIN_PRIO))
46 print_err(
"Chain Prio mismatches");
47 if (nftnl_chain_get_u32(a, NFTNL_CHAIN_USE) !=
48 nftnl_chain_get_u32(b, NFTNL_CHAIN_USE))
49 print_err(
"Chain use mismatches");
50 if (nftnl_chain_get_u64(a, NFTNL_CHAIN_PACKETS) !=
51 nftnl_chain_get_u64(b, NFTNL_CHAIN_PACKETS))
52 print_err(
"Chain packets mismatches");
53 if (nftnl_chain_get_u64(a, NFTNL_CHAIN_BYTES) !=
54 nftnl_chain_get_u64(b, NFTNL_CHAIN_BYTES))
55 print_err(
"Chain bytes mismatches");
56 if (nftnl_chain_get_u64(a, NFTNL_CHAIN_HANDLE) !=
57 nftnl_chain_get_u64(b, NFTNL_CHAIN_HANDLE))
58 print_err(
"Chain handle mismatches");
59 if (strcmp(nftnl_chain_get_str(a, NFTNL_CHAIN_TYPE),
60 nftnl_chain_get_str(b, NFTNL_CHAIN_TYPE)) != 0)
61 print_err(
"Chain type mismatches");
62 if (strcmp(nftnl_chain_get_str(a, NFTNL_CHAIN_DEV),
63 nftnl_chain_get_str(b, NFTNL_CHAIN_DEV)) != 0)
64 print_err(
"Chain device mismatches");
67int main(
int argc,
char *argv[])
73 a = nftnl_chain_alloc();
74 b = nftnl_chain_alloc();
75 if (a == NULL || b == NULL)
78 nftnl_chain_set_str(a, NFTNL_CHAIN_NAME,
"test");
79 nftnl_chain_set_u32(a, NFTNL_CHAIN_FAMILY, AF_INET);
80 nftnl_chain_set_str(a, NFTNL_CHAIN_TABLE,
"Table");
81 nftnl_chain_set_u32(a, NFTNL_CHAIN_POLICY,0x12345678);
82 nftnl_chain_set_u32(a, NFTNL_CHAIN_HOOKNUM, 0x34567812);
83 nftnl_chain_set_s32(a, NFTNL_CHAIN_PRIO, 0x56781234);
84 nftnl_chain_set_u32(a, NFTNL_CHAIN_USE, 0x78123456);
85 nftnl_chain_set_u64(a, NFTNL_CHAIN_PACKETS, 0x1234567812345678);
86 nftnl_chain_set_u64(a, NFTNL_CHAIN_BYTES, 0x7812345678123456);
87 nftnl_chain_set_u64(a, NFTNL_CHAIN_HANDLE, 0x5678123456781234);
88 nftnl_chain_set_str(a, NFTNL_CHAIN_TYPE,
"Prueba");
89 nftnl_chain_set_str(a, NFTNL_CHAIN_DEV,
"eth0");
92 nlh = nftnl_nlmsg_build_hdr(buf, NFT_MSG_NEWCHAIN, AF_INET, 0, 1234);
93 nftnl_chain_nlmsg_build_payload(nlh, a);
95 if (nftnl_chain_nlmsg_parse(nlh, b) < 0)
96 print_err(
"parsing problems");
98 cmp_nftnl_chain(a, b);
106 printf(
"%s: \033[32mOK\e[0m\n", argv[0]);