Current wrapper function create_pair() is used to create a pair of
connected links and returns two fds, but it does not support unix sockets.

Here we introduce socketpair() into create_pair(), which supports creating
a pair of unix sockets, since the semantics of the two are the same.

Signed-off-by: Jiayuan Chen <jiayuan.c...@linux.dev>
---
 .../selftests/bpf/prog_tests/socket_helpers.h       | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/socket_helpers.h 
b/tools/testing/selftests/bpf/prog_tests/socket_helpers.h
index 1bdfb79ef009..a805143dd84f 100644
--- a/tools/testing/selftests/bpf/prog_tests/socket_helpers.h
+++ b/tools/testing/selftests/bpf/prog_tests/socket_helpers.h
@@ -313,11 +313,22 @@ static inline int recv_timeout(int fd, void *buf, size_t 
len, int flags,
 
 static inline int create_pair(int family, int sotype, int *p0, int *p1)
 {
-       __close_fd int s, c = -1, p = -1;
+       __close_fd int s = -1, c = -1, p = -1;
        struct sockaddr_storage addr;
        socklen_t len = sizeof(addr);
        int err;
 
+       if (family == AF_UNIX) {
+               int fds[2];
+
+               err = socketpair(family, sotype, 0, fds);
+               if (!err) {
+                       *p0 = fds[0];
+                       *p1 = fds[1];
+               }
+               return err;
+       }
+
        s = socket_loopback(family, sotype);
        if (s < 0)
                return s;
-- 
2.47.1


Reply via email to