Commit c22bdd28 authored by Andrii Nakryiko's avatar Andrii Nakryiko Committed by Alexei Starovoitov
Browse files

selftests/bpf: Switch SEC("classifier*") usage to a strict SEC("tc")



Convert all SEC("classifier*") uses to a new and strict SEC("tc")
section name. In reference_tracking selftests switch from ambiguous
searching by program title (section name) to non-ambiguous searching by
name in some selftests, getting closer to completely removing
bpf_object__find_program_by_title().

Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20210928161946.2512801-4-andrii@kernel.org
parent 8fffa0e3
Loading
Loading
Loading
Loading
+10 −13
Original line number Diff line number Diff line
@@ -2,14 +2,14 @@
#include <test_progs.h>

static void toggle_object_autoload_progs(const struct bpf_object *obj,
					 const char *title_load)
					 const char *name_load)
{
	struct bpf_program *prog;

	bpf_object__for_each_program(prog, obj) {
		const char *title = bpf_program__section_name(prog);
		const char *name = bpf_program__name(prog);

		if (!strcmp(title_load, title))
		if (!strcmp(name_load, name))
			bpf_program__set_autoload(prog, true);
		else
			bpf_program__set_autoload(prog, false);
@@ -39,23 +39,19 @@ void test_reference_tracking(void)
		goto cleanup;

	bpf_object__for_each_program(prog, obj_iter) {
		const char *title;
		const char *name;

		/* Ignore .text sections */
		title = bpf_program__section_name(prog);
		if (strstr(title, ".text") != NULL)
			continue;

		if (!test__start_subtest(title))
		name = bpf_program__name(prog);
		if (!test__start_subtest(name))
			continue;

		obj = bpf_object__open_file(file, &open_opts);
		if (!ASSERT_OK_PTR(obj, "obj_open_file"))
			goto cleanup;

		toggle_object_autoload_progs(obj, title);
		toggle_object_autoload_progs(obj, name);
		/* Expect verifier failure if test name has 'err' */
		if (strstr(title, "err_") != NULL) {
		if (strncmp(name, "err_", sizeof("err_") - 1) == 0) {
			libbpf_print_fn_t old_print_fn;

			old_print_fn = libbpf_set_print(NULL);
@@ -64,7 +60,8 @@ void test_reference_tracking(void)
		} else {
			err = bpf_object__load(obj);
		}
		CHECK(err, title, "\n");
		ASSERT_OK(err, name);

		bpf_object__close(obj);
		obj = NULL;
	}
+1 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ configure_stack(void)
		return false;
	sprintf(tc_cmd, "%s %s %s %s", "tc filter add dev lo ingress bpf",
		       "direct-action object-file ./test_sk_assign.o",
		       "section classifier/sk_assign_test",
		       "section tc",
		       (env.verbosity < VERBOSE_VERY) ? " 2>/dev/null" : "verbose");
	if (CHECK(system(tc_cmd), "BPF load failed;",
		  "run with -vv for more info\n"))
+29 −29
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ static void test_tailcall_1(void)
	if (CHECK_FAIL(err))
		return;

	prog = bpf_object__find_program_by_title(obj, "classifier");
	prog = bpf_object__find_program_by_name(obj, "entry");
	if (CHECK_FAIL(!prog))
		goto out;

@@ -38,9 +38,9 @@ static void test_tailcall_1(void)
		goto out;

	for (i = 0; i < bpf_map__def(prog_array)->max_entries; i++) {
		snprintf(prog_name, sizeof(prog_name), "classifier/%i", i);
		snprintf(prog_name, sizeof(prog_name), "classifier_%d", i);

		prog = bpf_object__find_program_by_title(obj, prog_name);
		prog = bpf_object__find_program_by_name(obj, prog_name);
		if (CHECK_FAIL(!prog))
			goto out;

@@ -70,9 +70,9 @@ static void test_tailcall_1(void)
	      err, errno, retval);

	for (i = 0; i < bpf_map__def(prog_array)->max_entries; i++) {
		snprintf(prog_name, sizeof(prog_name), "classifier/%i", i);
		snprintf(prog_name, sizeof(prog_name), "classifier_%d", i);

		prog = bpf_object__find_program_by_title(obj, prog_name);
		prog = bpf_object__find_program_by_name(obj, prog_name);
		if (CHECK_FAIL(!prog))
			goto out;

@@ -92,9 +92,9 @@ static void test_tailcall_1(void)

	for (i = 0; i < bpf_map__def(prog_array)->max_entries; i++) {
		j = bpf_map__def(prog_array)->max_entries - 1 - i;
		snprintf(prog_name, sizeof(prog_name), "classifier/%i", j);
		snprintf(prog_name, sizeof(prog_name), "classifier_%d", j);

		prog = bpf_object__find_program_by_title(obj, prog_name);
		prog = bpf_object__find_program_by_name(obj, prog_name);
		if (CHECK_FAIL(!prog))
			goto out;

@@ -159,7 +159,7 @@ static void test_tailcall_2(void)
	if (CHECK_FAIL(err))
		return;

	prog = bpf_object__find_program_by_title(obj, "classifier");
	prog = bpf_object__find_program_by_name(obj, "entry");
	if (CHECK_FAIL(!prog))
		goto out;

@@ -176,9 +176,9 @@ static void test_tailcall_2(void)
		goto out;

	for (i = 0; i < bpf_map__def(prog_array)->max_entries; i++) {
		snprintf(prog_name, sizeof(prog_name), "classifier/%i", i);
		snprintf(prog_name, sizeof(prog_name), "classifier_%d", i);

		prog = bpf_object__find_program_by_title(obj, prog_name);
		prog = bpf_object__find_program_by_name(obj, prog_name);
		if (CHECK_FAIL(!prog))
			goto out;

@@ -233,7 +233,7 @@ static void test_tailcall_count(const char *which)
	if (CHECK_FAIL(err))
		return;

	prog = bpf_object__find_program_by_title(obj, "classifier");
	prog = bpf_object__find_program_by_name(obj, "entry");
	if (CHECK_FAIL(!prog))
		goto out;

@@ -249,7 +249,7 @@ static void test_tailcall_count(const char *which)
	if (CHECK_FAIL(map_fd < 0))
		goto out;

	prog = bpf_object__find_program_by_title(obj, "classifier/0");
	prog = bpf_object__find_program_by_name(obj, "classifier_0");
	if (CHECK_FAIL(!prog))
		goto out;

@@ -329,7 +329,7 @@ static void test_tailcall_4(void)
	if (CHECK_FAIL(err))
		return;

	prog = bpf_object__find_program_by_title(obj, "classifier");
	prog = bpf_object__find_program_by_name(obj, "entry");
	if (CHECK_FAIL(!prog))
		goto out;

@@ -354,9 +354,9 @@ static void test_tailcall_4(void)
		return;

	for (i = 0; i < bpf_map__def(prog_array)->max_entries; i++) {
		snprintf(prog_name, sizeof(prog_name), "classifier/%i", i);
		snprintf(prog_name, sizeof(prog_name), "classifier_%d", i);

		prog = bpf_object__find_program_by_title(obj, prog_name);
		prog = bpf_object__find_program_by_name(obj, prog_name);
		if (CHECK_FAIL(!prog))
			goto out;

@@ -417,7 +417,7 @@ static void test_tailcall_5(void)
	if (CHECK_FAIL(err))
		return;

	prog = bpf_object__find_program_by_title(obj, "classifier");
	prog = bpf_object__find_program_by_name(obj, "entry");
	if (CHECK_FAIL(!prog))
		goto out;

@@ -442,9 +442,9 @@ static void test_tailcall_5(void)
		return;

	for (i = 0; i < bpf_map__def(prog_array)->max_entries; i++) {
		snprintf(prog_name, sizeof(prog_name), "classifier/%i", i);
		snprintf(prog_name, sizeof(prog_name), "classifier_%d", i);

		prog = bpf_object__find_program_by_title(obj, prog_name);
		prog = bpf_object__find_program_by_name(obj, prog_name);
		if (CHECK_FAIL(!prog))
			goto out;

@@ -503,7 +503,7 @@ static void test_tailcall_bpf2bpf_1(void)
	if (CHECK_FAIL(err))
		return;

	prog = bpf_object__find_program_by_title(obj, "classifier");
	prog = bpf_object__find_program_by_name(obj, "entry");
	if (CHECK_FAIL(!prog))
		goto out;

@@ -521,9 +521,9 @@ static void test_tailcall_bpf2bpf_1(void)

	/* nop -> jmp */
	for (i = 0; i < bpf_map__def(prog_array)->max_entries; i++) {
		snprintf(prog_name, sizeof(prog_name), "classifier/%i", i);
		snprintf(prog_name, sizeof(prog_name), "classifier_%d", i);

		prog = bpf_object__find_program_by_title(obj, prog_name);
		prog = bpf_object__find_program_by_name(obj, prog_name);
		if (CHECK_FAIL(!prog))
			goto out;

@@ -587,7 +587,7 @@ static void test_tailcall_bpf2bpf_2(void)
	if (CHECK_FAIL(err))
		return;

	prog = bpf_object__find_program_by_title(obj, "classifier");
	prog = bpf_object__find_program_by_name(obj, "entry");
	if (CHECK_FAIL(!prog))
		goto out;

@@ -603,7 +603,7 @@ static void test_tailcall_bpf2bpf_2(void)
	if (CHECK_FAIL(map_fd < 0))
		goto out;

	prog = bpf_object__find_program_by_title(obj, "classifier/0");
	prog = bpf_object__find_program_by_name(obj, "classifier_0");
	if (CHECK_FAIL(!prog))
		goto out;

@@ -665,7 +665,7 @@ static void test_tailcall_bpf2bpf_3(void)
	if (CHECK_FAIL(err))
		return;

	prog = bpf_object__find_program_by_title(obj, "classifier");
	prog = bpf_object__find_program_by_name(obj, "entry");
	if (CHECK_FAIL(!prog))
		goto out;

@@ -682,9 +682,9 @@ static void test_tailcall_bpf2bpf_3(void)
		goto out;

	for (i = 0; i < bpf_map__def(prog_array)->max_entries; i++) {
		snprintf(prog_name, sizeof(prog_name), "classifier/%i", i);
		snprintf(prog_name, sizeof(prog_name), "classifier_%d", i);

		prog = bpf_object__find_program_by_title(obj, prog_name);
		prog = bpf_object__find_program_by_name(obj, prog_name);
		if (CHECK_FAIL(!prog))
			goto out;

@@ -762,7 +762,7 @@ static void test_tailcall_bpf2bpf_4(bool noise)
	if (CHECK_FAIL(err))
		return;

	prog = bpf_object__find_program_by_title(obj, "classifier");
	prog = bpf_object__find_program_by_name(obj, "entry");
	if (CHECK_FAIL(!prog))
		goto out;

@@ -779,9 +779,9 @@ static void test_tailcall_bpf2bpf_4(bool noise)
		goto out;

	for (i = 0; i < bpf_map__def(prog_array)->max_entries; i++) {
		snprintf(prog_name, sizeof(prog_name), "classifier/%i", i);
		snprintf(prog_name, sizeof(prog_name), "classifier_%d", i);

		prog = bpf_object__find_program_by_title(obj, prog_name);
		prog = bpf_object__find_program_by_name(obj, prog_name);
		if (CHECK_FAIL(!prog))
			goto out;

+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ check_percpu_elem(struct bpf_map *map, __u32 *key, __u64 *val,

u32 arraymap_output = 0;

SEC("classifier")
SEC("tc")
int test_pkt_access(struct __sk_buff *skb)
{
	struct callback_ctx data;
+1 −1
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ int hashmap_output = 0;
int hashmap_elems = 0;
int percpu_map_elems = 0;

SEC("classifier")
SEC("tc")
int test_pkt_access(struct __sk_buff *skb)
{
	struct callback_ctx data;
Loading