Commit 5166b3e3 authored by Geliang Tang's avatar Geliang Tang Committed by Martin KaFai Lau

selftests/bpf: Use start_server_addr in sockopt_inherit

Include network_helpers.h in prog_tests/sockopt_inherit.c, use public
helper start_server_addr() instead of the local defined function
start_server(). This can avoid duplicate code.

Add a helper custom_cb() to set SOL_CUSTOM sockopt looply, set it to
post_socket_cb pointer of struct network_helper_opts, and pass it to
start_server_addr().
Signed-off-by: default avatarGeliang Tang <tanggeliang@kylinos.cn>
Link: https://lore.kernel.org/r/687af66f743a0bf15cdba372c5f71fe64863219e.1714907662.git.tanggeliang@kylinos.cnSigned-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
parent 20434d2d
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0
#include <test_progs.h> #include <test_progs.h>
#include "cgroup_helpers.h" #include "cgroup_helpers.h"
#include "network_helpers.h"
#include "sockopt_inherit.skel.h" #include "sockopt_inherit.skel.h"
...@@ -98,47 +99,36 @@ static void *server_thread(void *arg) ...@@ -98,47 +99,36 @@ static void *server_thread(void *arg)
return (void *)(long)err; return (void *)(long)err;
} }
static int start_server(void) static int custom_cb(int fd, const struct post_socket_opts *opts)
{ {
struct sockaddr_in addr = {
.sin_family = AF_INET,
.sin_addr.s_addr = htonl(INADDR_LOOPBACK),
};
char buf; char buf;
int err; int err;
int fd;
int i; int i;
fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0) {
log_err("Failed to create server socket");
return -1;
}
for (i = CUSTOM_INHERIT1; i <= CUSTOM_LISTENER; i++) { for (i = CUSTOM_INHERIT1; i <= CUSTOM_LISTENER; i++) {
buf = 0x01; buf = 0x01;
err = setsockopt(fd, SOL_CUSTOM, i, &buf, 1); err = setsockopt(fd, SOL_CUSTOM, i, &buf, 1);
if (err) { if (err) {
log_err("Failed to call setsockopt(%d)", i); log_err("Failed to call setsockopt(%d)", i);
close(fd);
return -1; return -1;
} }
} }
if (bind(fd, (const struct sockaddr *)&addr, sizeof(addr)) < 0) { return 0;
log_err("Failed to bind socket");
close(fd);
return -1;
}
return fd;
} }
static void run_test(int cgroup_fd) static void run_test(int cgroup_fd)
{ {
struct bpf_link *link_getsockopt = NULL; struct bpf_link *link_getsockopt = NULL;
struct bpf_link *link_setsockopt = NULL; struct bpf_link *link_setsockopt = NULL;
struct network_helper_opts opts = {
.post_socket_cb = custom_cb,
};
int server_fd = -1, client_fd; int server_fd = -1, client_fd;
struct sockaddr_in addr = {
.sin_family = AF_INET,
.sin_addr.s_addr = htonl(INADDR_LOOPBACK),
};
struct sockopt_inherit *obj; struct sockopt_inherit *obj;
void *server_err; void *server_err;
pthread_t tid; pthread_t tid;
...@@ -160,7 +150,8 @@ static void run_test(int cgroup_fd) ...@@ -160,7 +150,8 @@ static void run_test(int cgroup_fd)
if (!ASSERT_OK_PTR(link_setsockopt, "cg-attach-setsockopt")) if (!ASSERT_OK_PTR(link_setsockopt, "cg-attach-setsockopt"))
goto close_bpf_object; goto close_bpf_object;
server_fd = start_server(); server_fd = start_server_addr(SOCK_STREAM, (struct sockaddr_storage *)&addr,
sizeof(addr), &opts);
if (!ASSERT_GE(server_fd, 0, "start_server")) if (!ASSERT_GE(server_fd, 0, "start_server"))
goto close_bpf_object; goto close_bpf_object;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment