test/vsock: refactor vsock_accept
authorFilippo Storniolo <f.storniolo95@gmail.com>
Fri, 3 Nov 2023 17:55:50 +0000 (18:55 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 7 Nov 2023 22:27:07 +0000 (22:27 +0000)
This is a preliminary patch to introduce SOCK_STREAM bind connect test.
vsock_accept() is split into vsock_listen() and vsock_accept().

Co-developed-by: Luigi Leonardi <luigi.leonardi@outlook.com>
Signed-off-by: Luigi Leonardi <luigi.leonardi@outlook.com>
Signed-off-by: Filippo Storniolo <f.storniolo95@gmail.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/vsock/util.c

index 698b0b44a2eeaff8ffff154eb2a75bc1d72c273c..2fc96f29bdf26cdf5f7b2be0577035b46c260fb7 100644 (file)
@@ -136,11 +136,8 @@ int vsock_seqpacket_connect(unsigned int cid, unsigned int port)
        return vsock_connect(cid, port, SOCK_SEQPACKET);
 }
 
-/* Listen on <cid, port> and return the first incoming connection.  The remote
- * address is stored to clientaddrp.  clientaddrp may be NULL.
- */
-static int vsock_accept(unsigned int cid, unsigned int port,
-                       struct sockaddr_vm *clientaddrp, int type)
+/* Listen on <cid, port> and return the file descriptor. */
+static int vsock_listen(unsigned int cid, unsigned int port, int type)
 {
        union {
                struct sockaddr sa;
@@ -152,14 +149,7 @@ static int vsock_accept(unsigned int cid, unsigned int port,
                        .svm_cid = cid,
                },
        };
-       union {
-               struct sockaddr sa;
-               struct sockaddr_vm svm;
-       } clientaddr;
-       socklen_t clientaddr_len = sizeof(clientaddr.svm);
        int fd;
-       int client_fd;
-       int old_errno;
 
        fd = socket(AF_VSOCK, type, 0);
        if (fd < 0) {
@@ -177,6 +167,24 @@ static int vsock_accept(unsigned int cid, unsigned int port,
                exit(EXIT_FAILURE);
        }
 
+       return fd;
+}
+
+/* Listen on <cid, port> and return the first incoming connection.  The remote
+ * address is stored to clientaddrp.  clientaddrp may be NULL.
+ */
+static int vsock_accept(unsigned int cid, unsigned int port,
+                       struct sockaddr_vm *clientaddrp, int type)
+{
+       union {
+               struct sockaddr sa;
+               struct sockaddr_vm svm;
+       } clientaddr;
+       socklen_t clientaddr_len = sizeof(clientaddr.svm);
+       int fd, client_fd, old_errno;
+
+       fd = vsock_listen(cid, port, type);
+
        control_writeln("LISTENING");
 
        timeout_begin(TIMEOUT);