brintos

brintos / linux-shallow public Read only

0
0
Text · 1.3 KiB · 70b49da Raw
51 lines · c
1// SPDX-License-Identifier: GPL-2.02#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	int prog_fd;17	int err;18	int i;19	LIBBPF_OPTS(bpf_test_run_opts, topts,20		.data_in = &pkt_v4,21		.data_size_in = sizeof(pkt_v4),22		.repeat = 0xffffffff,23	);24 25	for (i = 0; i < ARRAY_SIZE(prog); i++)26		prog[i] = BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0);27	prog[ARRAY_SIZE(prog) - 1] = BPF_EXIT_INSN();28 29	prog_fd = bpf_test_load_program(prog_type, prog, ARRAY_SIZE(prog),30				   "GPL", 0, NULL, 0);31	ASSERT_GE(prog_fd, 0, "test-run load");32 33	err = sigaction(SIGALRM, &sigalrm_action, NULL);34	ASSERT_OK(err, "test-run-signal-sigaction");35 36	err = setitimer(ITIMER_REAL, &timeo, NULL);37	ASSERT_OK(err, "test-run-signal-timer");38 39	err = bpf_prog_test_run_opts(prog_fd, &topts);40	ASSERT_LE(topts.duration, 500000000 /* 500ms */,41		  "test-run-signal-duration");42 43	signal(SIGALRM, SIG_DFL);44}45 46void test_signal_pending(void)47{48	test_signal_pending_by_type(BPF_PROG_TYPE_SOCKET_FILTER);49	test_signal_pending_by_type(BPF_PROG_TYPE_FLOW_DISSECTOR);50}51