Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.8-rc3 49 lines 1.4 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2#include <test_progs.h> 3#include <network_helpers.h> 4 5static void sigalrm_handler(int s) {} 6static struct sigaction sigalrm_action = { 7 .sa_handler = sigalrm_handler, 8}; 9 10static void test_signal_pending_by_type(enum bpf_prog_type prog_type) 11{ 12 struct bpf_insn prog[4096]; 13 struct itimerval timeo = { 14 .it_value.tv_usec = 100000, /* 100ms */ 15 }; 16 __u32 duration = 0, retval; 17 int prog_fd; 18 int err; 19 int i; 20 21 for (i = 0; i < ARRAY_SIZE(prog); i++) 22 prog[i] = BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0); 23 prog[ARRAY_SIZE(prog) - 1] = BPF_EXIT_INSN(); 24 25 prog_fd = bpf_load_program(prog_type, prog, ARRAY_SIZE(prog), 26 "GPL", 0, NULL, 0); 27 CHECK(prog_fd < 0, "test-run", "errno %d\n", errno); 28 29 err = sigaction(SIGALRM, &sigalrm_action, NULL); 30 CHECK(err, "test-run-signal-sigaction", "errno %d\n", errno); 31 32 err = setitimer(ITIMER_REAL, &timeo, NULL); 33 CHECK(err, "test-run-signal-timer", "errno %d\n", errno); 34 35 err = bpf_prog_test_run(prog_fd, 0xffffffff, &pkt_v4, sizeof(pkt_v4), 36 NULL, NULL, &retval, &duration); 37 CHECK(duration > 500000000, /* 500ms */ 38 "test-run-signal-duration", 39 "duration %dns > 500ms\n", 40 duration); 41 42 signal(SIGALRM, SIG_DFL); 43} 44 45void test_signal_pending(enum bpf_prog_type prog_type) 46{ 47 test_signal_pending_by_type(BPF_PROG_TYPE_SOCKET_FILTER); 48 test_signal_pending_by_type(BPF_PROG_TYPE_FLOW_DISSECTOR); 49}