This patch adds a fastopen_connect() helper which will
be used in a latter test.

Signed-off-by: Martin KaFai Lau <ka...@fb.com>
---
 tools/testing/selftests/bpf/network_helpers.c | 37 +++++++++++++++++++
 tools/testing/selftests/bpf/network_helpers.h |  2 +
 2 files changed, 39 insertions(+)

diff --git a/tools/testing/selftests/bpf/network_helpers.c 
b/tools/testing/selftests/bpf/network_helpers.c
index 1a371d3eca7d..93028f0d4081 100644
--- a/tools/testing/selftests/bpf/network_helpers.c
+++ b/tools/testing/selftests/bpf/network_helpers.c
@@ -125,6 +125,43 @@ int start_server(int family, int type, const char 
*addr_str, __u16 port,
        return -1;
 }
 
+int fastopen_connect(int server_fd, const char *data, unsigned int data_len,
+                    int timeout_ms)
+{
+       struct sockaddr_storage addr;
+       socklen_t addrlen = sizeof(addr);
+       struct sockaddr_in *addr_in;
+       int fd, ret;
+
+       if (getsockname(server_fd, (struct sockaddr *)&addr, &addrlen)) {
+               log_err("Failed to get server addr");
+               return -1;
+       }
+
+       addr_in = (struct sockaddr_in *)&addr;
+       fd = socket(addr_in->sin_family, SOCK_STREAM, 0);
+       if (fd < 0) {
+               log_err("Failed to create client socket");
+               return -1;
+       }
+
+       if (settimeo(fd, timeout_ms))
+               goto error_close;
+
+       ret = sendto(fd, data, data_len, MSG_FASTOPEN, (struct sockaddr *)&addr,
+                    addrlen);
+       if (ret != data_len) {
+               log_err("sendto(data, %u) != %d\n", data_len, ret);
+               goto error_close;
+       }
+
+       return fd;
+
+error_close:
+       save_errno_close(fd);
+       return -1;
+}
+
 static int connect_fd_to_addr(int fd,
                              const struct sockaddr_storage *addr,
                              socklen_t addrlen)
diff --git a/tools/testing/selftests/bpf/network_helpers.h 
b/tools/testing/selftests/bpf/network_helpers.h
index f580e82fda58..c4827941327a 100644
--- a/tools/testing/selftests/bpf/network_helpers.h
+++ b/tools/testing/selftests/bpf/network_helpers.h
@@ -37,5 +37,7 @@ int start_server(int family, int type, const char *addr, 
__u16 port,
                 int timeout_ms);
 int connect_to_fd(int server_fd, int timeout_ms);
 int connect_fd_to_fd(int client_fd, int server_fd, int timeout_ms);
+int fastopen_connect(int server_fd, const char *data, unsigned int data_len,
+                    int timeout_ms);
 
 #endif
-- 
2.24.1

Reply via email to