diff options
author | Phil Sutter <phil@nwl.cc> | 2019-03-09 11:56:05 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2019-03-11 13:34:51 +0100 |
commit | 9c0ed46f68cada9f3455be91adb553d020012596 (patch) | |
tree | 249499eb5b3b977a29088b4bff905a82ce546a14 /tests/ct_events_reliable.c | |
parent | e0d8a7cec8ba5ca8fed95eacb5c9f1166f386490 (diff) |
Rename 'qa' directory to 'tests'
When searching for library tests, 'qa' is easily overlooked. Use a more
common name instead.
Suggested-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'tests/ct_events_reliable.c')
-rw-r--r-- | tests/ct_events_reliable.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/ct_events_reliable.c b/tests/ct_events_reliable.c new file mode 100644 index 0000000..b51d0e5 --- /dev/null +++ b/tests/ct_events_reliable.c @@ -0,0 +1,71 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <signal.h> +#include <errno.h> + +#include <libnetfilter_conntrack/libnetfilter_conntrack.h> + +static int events = 0; +static int new, update, destroy; + +static int event_cb(enum nf_conntrack_msg_type type, + struct nf_conntrack *ct, + void *data) +{ + if (type == NFCT_T_NEW) + new++; + else if (type == NFCT_T_UPDATE) + update++; + else if (type == NFCT_T_DESTROY) + destroy++; + + if ((++events % 10000) == 0) + printf("%d events received (%d new, %d update, %d destroy)\n", + events, new, update, destroy); + + return NFCT_CB_CONTINUE; +} + +static void sighandler(int foo) +{ + printf("%d events received (%d new, %d update, %d destroy)\n", + events, new, update, destroy); + exit(EXIT_SUCCESS); +} + +int main(void) +{ + int ret; + struct nfct_handle *h; + int on = 1; + + signal(SIGINT, sighandler); + + h = nfct_open(CONNTRACK, NFCT_ALL_CT_GROUPS); + if (!h) { + perror("nfct_open"); + return 0; + } + + setsockopt(nfct_fd(h), SOL_NETLINK, + NETLINK_BROADCAST_SEND_ERROR, &on, sizeof(int)); + setsockopt(nfct_fd(h), SOL_NETLINK, + NETLINK_NO_ENOBUFS, &on, sizeof(int)); + + nfct_callback_register(h, NFCT_T_ALL, event_cb, NULL); + + printf("TEST: waiting for events...\n"); + + ret = nfct_catch(h); + + printf("TEST: conntrack events "); + if (ret == -1) + printf("(%d)(%s)\n", ret, strerror(errno)); + else + printf("(OK)\n"); + + nfct_close(h); + + ret == -1 ? exit(EXIT_FAILURE) : exit(EXIT_SUCCESS); +} |