@@ -229,25 +229,27 @@ static int make_server(int sotype, const char *ip, int port,
return -1;
}
-static int make_client(int sotype, const char *ip, int port)
+static int make_client(int sotype, const char *ip, int port,
+ const int expect_errno)
{
- struct sockaddr_storage addr = {0};
+ int family = is_ipv6(ip) ? AF_INET6 : AF_INET;
+ struct network_helper_opts opts = {
+ .timeout_ms = IO_TIMEOUT_SEC,
+ .expect_errno = expect_errno,
+ };
+ struct sockaddr_storage addr;
+ socklen_t len;
int err, fd;
- fd = make_socket(sotype, ip, port, &addr);
- if (fd < 0)
+ err = make_sockaddr(family, ip, port, &addr, &len);
+ if (!ASSERT_OK(err, "make_sockaddr"))
return -1;
- err = connect(fd, (void *)&addr, inetaddr_len(&addr));
- if (CHECK(err, "make_client", "connect")) {
- log_err("failed to connect client socket");
- goto fail;
- }
+ fd = connect_to_addr(sotype, &addr, len, &opts);
+ if (!ASSERT_GE(fd, 0, "connect_to_addr"))
+ return -1;
return fd;
-fail:
- close(fd);
- return -1;
}
static __u64 socket_cookie(int fd)
@@ -651,7 +653,7 @@ static void run_lookup_prog(const struct test *t)
goto close;
}
- client_fd = make_client(t->sotype, t->connect_to.ip, t->connect_to.port);
+ client_fd = make_client(t->sotype, t->connect_to.ip, t->connect_to.port, 0);
if (client_fd < 0)
goto close;
@@ -867,7 +869,6 @@ static void test_redirect_lookup(struct test_sk_lookup *skel)
static void drop_on_lookup(const struct test *t)
{
- struct sockaddr_storage dst = {};
int client_fd, server_fd, err;
struct bpf_link *lookup_link;
ssize_t n;
@@ -881,12 +882,12 @@ static void drop_on_lookup(const struct test *t)
if (server_fd < 0)
goto detach;
- client_fd = make_socket(t->sotype, t->connect_to.ip,
- t->connect_to.port, &dst);
+ client_fd = make_client(t->sotype, t->connect_to.ip,
+ t->connect_to.port, ECONNREFUSED);
if (client_fd < 0)
goto close_srv;
- err = connect(client_fd, (void *)&dst, inetaddr_len(&dst));
+ err = -errno;
if (t->sotype == SOCK_DGRAM) {
err = send_byte(client_fd);
if (err)
@@ -981,7 +982,6 @@ static void test_drop_on_lookup(struct test_sk_lookup *skel)
static void drop_on_reuseport(const struct test *t)
{
- struct sockaddr_storage dst = { 0 };
int client, server1, server2, err;
struct bpf_link *lookup_link;
ssize_t n;
@@ -1005,12 +1005,12 @@ static void drop_on_reuseport(const struct test *t)
if (server2 < 0)
goto close_srv1;
- client = make_socket(t->sotype, t->connect_to.ip,
- t->connect_to.port, &dst);
+ client = make_client(t->sotype, t->connect_to.ip,
+ t->connect_to.port, ECONNREFUSED);
if (client < 0)
goto close_srv2;
- err = connect(client, (void *)&dst, inetaddr_len(&dst));
+ err = -errno;
if (t->sotype == SOCK_DGRAM) {
err = send_byte(client);
if (err)
@@ -1157,7 +1157,7 @@ static void run_sk_assign_connected(struct test_sk_lookup *skel,
if (server_fd < 0)
return;
- connected_fd = make_client(sotype, EXT_IP4, EXT_PORT);
+ connected_fd = make_client(sotype, EXT_IP4, EXT_PORT, 0);
if (connected_fd < 0)
goto out_close_server;
@@ -1171,7 +1171,7 @@ static void run_sk_assign_connected(struct test_sk_lookup *skel,
goto out_close_connected;
/* Try to redirect TCP SYN / UDP packet to a connected socket */
- client_fd = make_client(sotype, EXT_IP4, EXT_PORT);
+ client_fd = make_client(sotype, EXT_IP4, EXT_PORT, 0);
if (client_fd < 0)
goto out_unlink_prog;
if (sotype == SOCK_DGRAM) {