Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e4aecc15 authored by Davide Caratti's avatar Davide Caratti Committed by Greg Kroah-Hartman
Browse files

tc-testing: fix build of eBPF programs



[ Upstream commit cf5eafbfa586d030f9321cee516b91d089e38280 ]

rely on uAPI headers in the current kernel tree, rather than requiring the
correct version installed on the test system. While at it, group all
sections in a single binary and test the 'section' parameter.

Reported-by: default avatarLucas Bates <lucasb@mojatatu.com>
Signed-off-by: default avatarDavide Caratti <dcaratti@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent d653bd93
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0

APIDIR := ../../../../include/uapi
TEST_GEN_FILES = action.o

top_srcdir = ../../../../..
include ../../lib.mk

CLANG ?= clang
LLC   ?= llc
PROBE := $(shell $(LLC) -march=bpf -mcpu=probe -filetype=null /dev/null 2>&1)

ifeq ($(PROBE),)
  CPU ?= probe
else
  CPU ?= generic
endif

CLANG_SYS_INCLUDES := $(shell $(CLANG) -v -E - </dev/null 2>&1 \
	| sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }')

CLANG_FLAGS = -I. -I$(APIDIR) \
	      $(CLANG_SYS_INCLUDES) \
	      -Wno-compare-distinct-pointer-types

$(OUTPUT)/%.o: %.c
	$(CLANG) $(CLANG_FLAGS) \
		 -O2 -target bpf -emit-llvm -c $< -o - |      \
	$(LLC) -march=bpf -mcpu=$(CPU) $(LLC_FLAGS) -filetype=obj -o $@
+23 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0
 * Copyright (c) 2018 Davide Caratti, Red Hat inc.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of version 2 of the GNU General Public
 * License as published by the Free Software Foundation.
 */

#include <linux/bpf.h>
#include <linux/pkt_cls.h>

__attribute__((section("action-ok"),used)) int action_ok(struct __sk_buff *s)
{
	return TC_ACT_OK;
}

__attribute__((section("action-ko"),used)) int action_ko(struct __sk_buff *s)
{
	s->data = 0x0;
	return TC_ACT_OK;
}

char _license[] __attribute__((section("license"),used)) = "GPL";
+8 −8
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@
            "bpf"
        ],
        "setup": [
            "printf '#include <linux/bpf.h>\nchar l[] __attribute__((section(\"license\"),used))=\"GPL\"; __attribute__((section(\"action\"),used)) int m(struct __sk_buff *s) { return 2; }' | clang -O2 -x c -c - -target bpf -o _b.o",
            "make -C bpf",
            [
                "$TC action flush action bpf",
                0,
@@ -63,14 +63,14 @@
                255
            ]
        ],
        "cmdUnderTest": "$TC action add action bpf object-file _b.o index 667",
        "cmdUnderTest": "$TC action add action bpf object-file $EBPFDIR/action.o section action-ok index 667",
        "expExitCode": "0",
        "verifyCmd": "$TC action get action bpf index 667",
        "matchPattern": "action order [0-9]*: bpf _b.o:\\[action\\] id [0-9]* tag 3b185187f1855c4c( jited)? default-action pipe.*index 667 ref",
        "matchPattern": "action order [0-9]*: bpf action.o:\\[action-ok\\] id [0-9]* tag [0-9a-f]{16}( jited)? default-action pipe.*index 667 ref",
        "matchCount": "1",
        "teardown": [
            "$TC action flush action bpf",
            "rm -f _b.o"
            "make -C bpf clean"
        ]
    },
    {
@@ -81,7 +81,7 @@
            "bpf"
        ],
        "setup": [
            "printf '#include <linux/bpf.h>\nchar l[] __attribute__((section(\"license\"),used))=\"GPL\"; __attribute__((section(\"action\"),used)) int m(struct __sk_buff *s) { s->data = 0x0; return 2; }' | clang -O2 -x c -c - -target bpf -o _c.o",
            "make -C bpf",
            [
                "$TC action flush action bpf",
                0,
@@ -89,10 +89,10 @@
                255
            ]
        ],
        "cmdUnderTest": "$TC action add action bpf object-file _c.o index 667",
        "cmdUnderTest": "$TC action add action bpf object-file $EBPFDIR/action.o section action-ko index 667",
        "expExitCode": "255",
        "verifyCmd": "$TC action get action bpf index 667",
        "matchPattern": "action order [0-9]*: bpf _c.o:\\[action\\] id [0-9].*index 667 ref",
        "matchPattern": "action order [0-9]*: bpf action.o:\\[action-ko\\] id [0-9].*index 667 ref",
        "matchCount": "0",
        "teardown": [
            [
@@ -101,7 +101,7 @@
                1,
                255
            ],
            "rm -f _c.o"
            "make -C bpf clean"
        ]
    },
    {
+3 −1
Original line number Diff line number Diff line
@@ -16,7 +16,9 @@ NAMES = {
          'DEV2': '',
          'BATCH_FILE': './batch.txt',
          # Name of the namespace to use
          'NS': 'tcut'
          'NS': 'tcut',
          # Directory containing eBPF test programs
          'EBPFDIR': './bpf'
        }