From: "D. Wythe" <alibuda@linux.alibaba.com>
To: pablo@netfilter.org, kadlec@netfilter.org, fw@strlen.de
Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org, coreteam@netfilter.org,
netfilter-devel@vger.kernel.org, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
ast@kernel.org
Subject: [RFC nf-next v5 2/2] selftests/bpf: Add netfilter link prog update test
Date: Tue, 2 Jan 2024 14:11:17 +0800 [thread overview]
Message-ID: <1704175877-28298-3-git-send-email-alibuda@linux.alibaba.com> (raw)
In-Reply-To: <1704175877-28298-1-git-send-email-alibuda@linux.alibaba.com>
From: "D. Wythe" <alibuda@linux.alibaba.com>
Update prog for active links and verify whether
the prog has been successfully replaced.
Expected output:
./test_progs -t netfilter_link_update_prog
Summary: 1/0 PASSED, 0 SKIPPED, 0 FAILED
Signed-off-by: D. Wythe <alibuda@linux.alibaba.com>
---
.../bpf/prog_tests/netfilter_link_update_prog.c | 83 ++++++++++++++++++++++
.../bpf/progs/test_netfilter_link_update_prog.c | 24 +++++++
2 files changed, 107 insertions(+)
create mode 100644 tools/testing/selftests/bpf/prog_tests/netfilter_link_update_prog.c
create mode 100644 tools/testing/selftests/bpf/progs/test_netfilter_link_update_prog.c
diff --git a/tools/testing/selftests/bpf/prog_tests/netfilter_link_update_prog.c b/tools/testing/selftests/bpf/prog_tests/netfilter_link_update_prog.c
new file mode 100644
index 00000000..d23b544
--- /dev/null
+++ b/tools/testing/selftests/bpf/prog_tests/netfilter_link_update_prog.c
@@ -0,0 +1,83 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <test_progs.h>
+#include <linux/netfilter.h>
+#include <network_helpers.h>
+#include "test_netfilter_link_update_prog.skel.h"
+
+#define SERVER_ADDR "127.0.0.1"
+#define SERVER_PORT 12345
+
+static const char dummy_message[] = "A dummy message";
+
+static int send_dummy(int client_fd)
+{
+ struct sockaddr_storage saddr;
+ struct sockaddr *saddr_p;
+ socklen_t saddr_len;
+ int err;
+
+ saddr_p = (struct sockaddr *)&saddr;
+ err = make_sockaddr(AF_INET, SERVER_ADDR, SERVER_PORT, &saddr, &saddr_len);
+ if (!ASSERT_OK(err, "make_sockaddr"))
+ return -1;
+
+ err = sendto(client_fd, dummy_message, sizeof(dummy_message) - 1, 0, saddr_p, saddr_len);
+ if (!ASSERT_GE(err, 0, "sendto"))
+ return -1;
+
+ return 0;
+}
+
+void test_netfilter_link_update_prog(void)
+{
+ LIBBPF_OPTS(bpf_netfilter_opts, opts,
+ .pf = NFPROTO_IPV4,
+ .hooknum = NF_INET_LOCAL_OUT,
+ .priority = 100);
+ struct test_netfilter_link_update_prog *skel;
+ struct bpf_program *prog;
+ int server_fd, client_fd;
+ int err;
+
+ skel = test_netfilter_link_update_prog__open_and_load();
+ if (!ASSERT_OK_PTR(skel, "test_netfilter_link_update_prog__open_and_load"))
+ goto out;
+
+ prog = skel->progs.nf_link_prog;
+
+ if (!ASSERT_OK_PTR(prog, "load program"))
+ goto out;
+
+ skel->links.nf_link_prog = bpf_program__attach_netfilter(prog, &opts);
+ if (!ASSERT_OK_PTR(skel->links.nf_link_prog, "attach netfilter program"))
+ goto out;
+
+ server_fd = start_server(AF_INET, SOCK_DGRAM, SERVER_ADDR, SERVER_PORT, 0);
+ if (!ASSERT_GE(server_fd, 0, "start_server"))
+ goto out;
+
+ client_fd = connect_to_fd(server_fd, 0);
+ if (!ASSERT_GE(client_fd, 0, "connect_to_fd"))
+ goto out;
+
+ send_dummy(client_fd);
+
+ ASSERT_EQ(skel->bss->counter, 0, "counter should be zero");
+
+ err = bpf_link__update_program(skel->links.nf_link_prog, skel->progs.nf_link_prog_new);
+ if (!ASSERT_OK(err, "bpf_link__update_program"))
+ goto out;
+
+ send_dummy(client_fd);
+ ASSERT_GE(skel->bss->counter, 0, "counter should be greater than zero");
+out:
+ if (client_fd > 0)
+ close(client_fd);
+ if (server_fd > 0)
+ close(server_fd);
+
+ test_netfilter_link_update_prog__destroy(skel);
+}
+
+
diff --git a/tools/testing/selftests/bpf/progs/test_netfilter_link_update_prog.c b/tools/testing/selftests/bpf/progs/test_netfilter_link_update_prog.c
new file mode 100644
index 00000000..42ae332
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/test_netfilter_link_update_prog.c
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "vmlinux.h"
+#include <bpf/bpf_helpers.h>
+
+#define NF_ACCEPT 1
+
+SEC("netfilter")
+int nf_link_prog(struct bpf_nf_ctx *ctx)
+{
+ return NF_ACCEPT;
+}
+
+u64 counter = 0;
+
+SEC("netfilter")
+int nf_link_prog_new(struct bpf_nf_ctx *ctx)
+{
+ counter++;
+ return NF_ACCEPT;
+}
+
+char _license[] SEC("license") = "GPL";
+
--
1.8.3.1
next prev parent reply other threads:[~2024-01-02 6:11 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-02 6:11 [RFC nf-next v5 0/2] netfilter: bpf: support prog update D. Wythe
2024-01-02 6:11 ` [RFC nf-next v5 1/2] " D. Wythe
2024-01-02 6:11 ` D. Wythe [this message]
2024-01-16 13:46 ` [RFC nf-next v5 0/2] " D. Wythe
2024-02-14 16:10 ` Quentin Deslandes
2024-02-14 16:41 ` Pablo Neira Ayuso
2024-02-20 7:16 ` D. Wythe
2024-02-20 7:19 ` D. Wythe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1704175877-28298-3-git-send-email-alibuda@linux.alibaba.com \
--to=alibuda@linux.alibaba.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=coreteam@netfilter.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=fw@strlen.de \
--cc=kadlec@netfilter.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=pablo@netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.