Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* Copyright (c) 2021 Hengqi Chen */
0003 
0004 #include <test_progs.h>
0005 #include <sys/un.h>
0006 #include "test_skc_to_unix_sock.skel.h"
0007 
0008 static const char *sock_path = "@skc_to_unix_sock";
0009 
0010 void test_skc_to_unix_sock(void)
0011 {
0012     struct test_skc_to_unix_sock *skel;
0013     struct sockaddr_un sockaddr;
0014     int err, sockfd = 0;
0015 
0016     skel = test_skc_to_unix_sock__open();
0017     if (!ASSERT_OK_PTR(skel, "could not open BPF object"))
0018         return;
0019 
0020     skel->rodata->my_pid = getpid();
0021 
0022     err = test_skc_to_unix_sock__load(skel);
0023     if (!ASSERT_OK(err, "could not load BPF object"))
0024         goto cleanup;
0025 
0026     err = test_skc_to_unix_sock__attach(skel);
0027     if (!ASSERT_OK(err, "could not attach BPF object"))
0028         goto cleanup;
0029 
0030     /* trigger unix_listen */
0031     sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
0032     if (!ASSERT_GT(sockfd, 0, "socket failed"))
0033         goto cleanup;
0034 
0035     memset(&sockaddr, 0, sizeof(sockaddr));
0036     sockaddr.sun_family = AF_UNIX;
0037     strncpy(sockaddr.sun_path, sock_path, strlen(sock_path));
0038     sockaddr.sun_path[0] = '\0';
0039 
0040     err = bind(sockfd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
0041     if (!ASSERT_OK(err, "bind failed"))
0042         goto cleanup;
0043 
0044     err = listen(sockfd, 1);
0045     if (!ASSERT_OK(err, "listen failed"))
0046         goto cleanup;
0047 
0048     ASSERT_EQ(strcmp(skel->bss->path, sock_path), 0, "bpf_skc_to_unix_sock failed");
0049 
0050 cleanup:
0051     if (sockfd)
0052         close(sockfd);
0053     test_skc_to_unix_sock__destroy(skel);
0054 }