summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2022-02-14 12:31:48 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2022-02-17 18:23:05 +0100
commitcaf2a6ad2d2229da9881733c6a5f061dbce9b45b (patch)
treecf9ea3e7e457e7d070498cc03424999e14e2c937 /examples
parentda6cb40177dae41fb7b4a3418dd728fd6f894f2d (diff)
examples: add libnftables example program
Create an example folder to add example source code files to show how to use libnftables. Add first example program using the buffer API. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'examples')
-rw-r--r--examples/Makefile.am3
-rw-r--r--examples/nft-buffer.c34
2 files changed, 37 insertions, 0 deletions
diff --git a/examples/Makefile.am b/examples/Makefile.am
new file mode 100644
index 00000000..dd637fe3
--- /dev/null
+++ b/examples/Makefile.am
@@ -0,0 +1,3 @@
+noinst_PROGRAMS = nft-buffer
+
+LDADD = $(top_builddir)/src/libnftables.la
diff --git a/examples/nft-buffer.c b/examples/nft-buffer.c
new file mode 100644
index 00000000..1c4b1e04
--- /dev/null
+++ b/examples/nft-buffer.c
@@ -0,0 +1,34 @@
+/* gcc nft-buffer.c -o nft-buffer -lnftables */
+#include <stdlib.h>
+#include <nftables/libnftables.h>
+
+const char ruleset[] =
+ "flush ruleset;"
+ "add table x;"
+ "add chain x y { type filter hook input priority 0; };"
+ "add rule x y counter;";
+
+int main(void)
+{
+ struct nft_ctx *ctx;
+ int err;
+
+ ctx = nft_ctx_new(0);
+ if (!ctx) {
+ perror("cannot allocate nft context");
+ return EXIT_FAILURE;
+ }
+
+ /* create ruleset: all commands in the buffer are atomically applied */
+ err = nft_run_cmd_from_buffer(ctx, ruleset);
+ if (err < 0)
+ fprintf(stderr, "failed to run nftables command\n");
+
+ err = nft_run_cmd_from_buffer(ctx, "list ruleset");
+ if (err < 0)
+ fprintf(stderr, "failed to run nftables command\n");
+
+ nft_ctx_free(ctx);
+
+ return EXIT_SUCCESS;
+}