58 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */3#include <test_progs.h>4#include <sys/mman.h>5#include "mmap_inner_array.skel.h"6 7void test_mmap_inner_array(void)8{9 const long page_size = sysconf(_SC_PAGE_SIZE);10 struct mmap_inner_array *skel;11 int inner_array_fd, err;12 void *tmp;13 __u64 *val;14 15 skel = mmap_inner_array__open_and_load();16 17 if (!ASSERT_OK_PTR(skel, "open_and_load"))18 return;19 20 inner_array_fd = bpf_map__fd(skel->maps.inner_array);21 tmp = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, inner_array_fd, 0);22 if (!ASSERT_OK_PTR(tmp, "inner array mmap"))23 goto out;24 val = (void *)tmp;25 26 err = mmap_inner_array__attach(skel);27 if (!ASSERT_OK(err, "attach"))28 goto out_unmap;29 30 skel->bss->pid = getpid();31 usleep(1);32 33 /* pid is set, pid_match == true and outer_map_match == false */34 ASSERT_TRUE(skel->bss->pid_match, "pid match 1");35 ASSERT_FALSE(skel->bss->outer_map_match, "outer map match 1");36 ASSERT_FALSE(skel->bss->done, "done 1");37 ASSERT_EQ(*val, 0, "value match 1");38 39 err = bpf_map__update_elem(skel->maps.outer_map,40 &skel->bss->pid, sizeof(skel->bss->pid),41 &inner_array_fd, sizeof(inner_array_fd),42 BPF_ANY);43 if (!ASSERT_OK(err, "update elem"))44 goto out_unmap;45 usleep(1);46 47 /* outer map key is set, outer_map_match == true */48 ASSERT_TRUE(skel->bss->pid_match, "pid match 2");49 ASSERT_TRUE(skel->bss->outer_map_match, "outer map match 2");50 ASSERT_TRUE(skel->bss->done, "done 2");51 ASSERT_EQ(*val, skel->data->match_value, "value match 2");52 53out_unmap:54 munmap(tmp, page_size);55out:56 mmap_inner_array__destroy(skel);57}58