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

selftests/bpf: Merge test_stub.c into testing_helpers.c

Move testing prog and object load wrappers (bpf_prog_test_load and
bpf_test_load_program) into testing_helpers.{c,h} and get rid of
otherwise useless test_stub.c. Make testing_helpers.c available to
non-test_progs binaries as well.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Dave Marchevsky <davemarchevsky@fb.com>
Link: https://lore.kernel.org/bpf/20211103220845.2676888-11-andrii@kernel.org

authored by

Andrii Nakryiko and committed by
Alexei Starovoitov
f87c1930 d8e86407

+77 -59
+16 -15
tools/testing/selftests/bpf/Makefile
··· 178 178 $(Q)$(MAKE) $(submake_extras) -C bpf_testmod 179 179 $(Q)cp bpf_testmod/bpf_testmod.ko $@ 180 180 181 - $(OUTPUT)/test_stub.o: test_stub.c $(BPFOBJ) 182 - $(call msg,CC,,$@) 183 - $(Q)$(CC) -c $(CFLAGS) -o $@ $< 184 - 185 181 DEFAULT_BPFTOOL := $(HOST_SCRATCH_DIR)/sbin/bpftool 186 182 187 183 $(OUTPUT)/runqslower: $(BPFOBJ) | $(DEFAULT_BPFTOOL) $(RUNQSLOWER_OUTPUT) ··· 190 194 191 195 TEST_GEN_PROGS_EXTENDED += $(DEFAULT_BPFTOOL) 192 196 193 - $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED): $(OUTPUT)/test_stub.o $(BPFOBJ) 197 + $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED): $(BPFOBJ) 194 198 195 - $(OUTPUT)/test_dev_cgroup: cgroup_helpers.c 196 - $(OUTPUT)/test_skb_cgroup_id_user: cgroup_helpers.c 197 - $(OUTPUT)/test_sock: cgroup_helpers.c 198 - $(OUTPUT)/test_sock_addr: cgroup_helpers.c 199 - $(OUTPUT)/test_sockmap: cgroup_helpers.c 200 - $(OUTPUT)/test_tcpnotify_user: cgroup_helpers.c trace_helpers.c 201 - $(OUTPUT)/get_cgroup_id_user: cgroup_helpers.c 202 - $(OUTPUT)/test_cgroup_storage: cgroup_helpers.c 203 - $(OUTPUT)/test_sock_fields: cgroup_helpers.c 204 - $(OUTPUT)/test_sysctl: cgroup_helpers.c 199 + $(OUTPUT)/test_dev_cgroup: cgroup_helpers.c testing_helpers.o 200 + $(OUTPUT)/test_skb_cgroup_id_user: cgroup_helpers.c testing_helpers.o 201 + $(OUTPUT)/test_sock: cgroup_helpers.c testing_helpers.o 202 + $(OUTPUT)/test_sock_addr: cgroup_helpers.c testing_helpers.o 203 + $(OUTPUT)/test_sockmap: cgroup_helpers.c testing_helpers.o 204 + $(OUTPUT)/test_tcpnotify_user: cgroup_helpers.c trace_helpers.c testing_helpers.o 205 + $(OUTPUT)/get_cgroup_id_user: cgroup_helpers.c testing_helpers.o 206 + $(OUTPUT)/test_cgroup_storage: cgroup_helpers.c testing_helpers.o 207 + $(OUTPUT)/test_sock_fields: cgroup_helpers.c testing_helpers.o 208 + $(OUTPUT)/test_sysctl: cgroup_helpers.c testing_helpers.o 209 + $(OUTPUT)/test_tag: testing_helpers.o 210 + $(OUTPUT)/test_lirc_mode2_user: testing_helpers.o 211 + $(OUTPUT)/xdping: testing_helpers.o 212 + $(OUTPUT)/flow_dissector_load: testing_helpers.o 213 + $(OUTPUT)/test_maps: testing_helpers.o 205 214 206 215 BPFTOOL ?= $(DEFAULT_BPFTOOL) 207 216 $(DEFAULT_BPFTOOL): $(wildcard $(BPFTOOLDIR)/*.[ch] $(BPFTOOLDIR)/Makefile) \
-44
tools/testing/selftests/bpf/test_stub.c
··· 1 - // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 - /* Copyright (C) 2019 Netronome Systems, Inc. */ 3 - 4 - #include <bpf/bpf.h> 5 - #include <bpf/libbpf.h> 6 - #include <string.h> 7 - 8 - int extra_prog_load_log_flags = 0; 9 - 10 - int bpf_prog_test_load(const char *file, enum bpf_prog_type type, 11 - struct bpf_object **pobj, int *prog_fd) 12 - { 13 - struct bpf_prog_load_attr attr; 14 - 15 - memset(&attr, 0, sizeof(struct bpf_prog_load_attr)); 16 - attr.file = file; 17 - attr.prog_type = type; 18 - attr.expected_attach_type = 0; 19 - attr.prog_flags = BPF_F_TEST_RND_HI32; 20 - attr.log_level = extra_prog_load_log_flags; 21 - 22 - return bpf_prog_load_xattr(&attr, pobj, prog_fd); 23 - } 24 - 25 - int bpf_test_load_program(enum bpf_prog_type type, const struct bpf_insn *insns, 26 - size_t insns_cnt, const char *license, 27 - __u32 kern_version, char *log_buf, 28 - size_t log_buf_sz) 29 - { 30 - struct bpf_load_program_attr load_attr; 31 - 32 - memset(&load_attr, 0, sizeof(struct bpf_load_program_attr)); 33 - load_attr.prog_type = type; 34 - load_attr.expected_attach_type = 0; 35 - load_attr.name = NULL; 36 - load_attr.insns = insns; 37 - load_attr.insns_cnt = insns_cnt; 38 - load_attr.license = license; 39 - load_attr.kern_version = kern_version; 40 - load_attr.prog_flags = BPF_F_TEST_RND_HI32; 41 - load_attr.log_level = extra_prog_load_log_flags; 42 - 43 - return bpf_load_program_xattr(&load_attr, log_buf, log_buf_sz); 44 - }
+55
tools/testing/selftests/bpf/testing_helpers.c
··· 1 1 // SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) 2 + /* Copyright (C) 2019 Netronome Systems, Inc. */ 2 3 /* Copyright (C) 2020 Facebook, Inc. */ 3 4 #include <stdlib.h> 5 + #include <string.h> 4 6 #include <errno.h> 7 + #include <bpf/bpf.h> 8 + #include <bpf/libbpf.h> 5 9 #include "testing_helpers.h" 6 10 7 11 int parse_num_list(const char *s, bool **num_set, int *num_set_len) ··· 81 77 return 0; 82 78 } 83 79 return info->prog_id; 80 + } 81 + 82 + int extra_prog_load_log_flags = 0; 83 + 84 + int bpf_prog_test_load(const char *file, enum bpf_prog_type type, 85 + struct bpf_object **pobj, int *prog_fd) 86 + { 87 + struct bpf_object *obj; 88 + struct bpf_program *prog; 89 + int err; 90 + 91 + obj = bpf_object__open(file); 92 + if (!obj) 93 + return -errno; 94 + 95 + prog = bpf_object__next_program(obj, NULL); 96 + if (!prog) { 97 + err = -ENOENT; 98 + goto err_out; 99 + } 100 + 101 + if (type != BPF_PROG_TYPE_UNSPEC) 102 + bpf_program__set_type(prog, type); 103 + 104 + err = bpf_object__load(obj); 105 + if (err) 106 + goto err_out; 107 + 108 + *pobj = obj; 109 + *prog_fd = bpf_program__fd(prog); 110 + 111 + return 0; 112 + err_out: 113 + bpf_object__close(obj); 114 + return err; 115 + } 116 + 117 + int bpf_test_load_program(enum bpf_prog_type type, const struct bpf_insn *insns, 118 + size_t insns_cnt, const char *license, 119 + __u32 kern_version, char *log_buf, 120 + size_t log_buf_sz) 121 + { 122 + LIBBPF_OPTS(bpf_prog_load_opts, opts, 123 + .kern_version = kern_version, 124 + .prog_flags = BPF_F_TEST_RND_HI32, 125 + .log_level = extra_prog_load_log_flags, 126 + .log_buf = log_buf, 127 + .log_size = log_buf_sz, 128 + ); 129 + 130 + return bpf_prog_load(type, NULL, license, insns, insns_cnt, &opts); 84 131 }
+6
tools/testing/selftests/bpf/testing_helpers.h
··· 6 6 7 7 int parse_num_list(const char *s, bool **set, int *set_len); 8 8 __u32 link_info_prog_id(const struct bpf_link *link, struct bpf_link_info *info); 9 + int bpf_prog_test_load(const char *file, enum bpf_prog_type type, 10 + struct bpf_object **pobj, int *prog_fd); 11 + int bpf_test_load_program(enum bpf_prog_type type, const struct bpf_insn *insns, 12 + size_t insns_cnt, const char *license, 13 + __u32 kern_version, char *log_buf, 14 + size_t log_buf_sz);