Commit cf5eafbf authored by Davide Caratti's avatar Davide Caratti Committed by David S. Miller
Browse files

tc-testing: fix build of eBPF programs



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>
parent 4a84810e
Loading
Loading
Loading
Loading
+29 −0
Original line number Original line 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 Original line 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 Original line Diff line number Diff line
@@ -55,7 +55,7 @@
            "bpf"
            "bpf"
        ],
        ],
        "setup": [
        "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",
                "$TC action flush action bpf",
                0,
                0,
@@ -63,14 +63,14 @@
                255
                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",
        "expExitCode": "0",
        "verifyCmd": "$TC action get action bpf index 667",
        "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",
        "matchCount": "1",
        "teardown": [
        "teardown": [
            "$TC action flush action bpf",
            "$TC action flush action bpf",
            "rm -f _b.o"
            "make -C bpf clean"
        ]
        ]
    },
    },
    {
    {
@@ -81,7 +81,7 @@
            "bpf"
            "bpf"
        ],
        ],
        "setup": [
        "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",
                "$TC action flush action bpf",
                0,
                0,
@@ -89,10 +89,10 @@
                255
                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",
        "expExitCode": "255",
        "verifyCmd": "$TC action get action bpf index 667",
        "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",
        "matchCount": "0",
        "teardown": [
        "teardown": [
            [
            [
@@ -101,7 +101,7 @@
                1,
                1,
                255
                255
            ],
            ],
            "rm -f _c.o"
            "make -C bpf clean"
        ]
        ]
    },
    },
    {
    {
+3 −1
Original line number Original line Diff line number Diff line
@@ -16,7 +16,9 @@ NAMES = {
          'DEV2': '',
          'DEV2': '',
          'BATCH_FILE': './batch.txt',
          'BATCH_FILE': './batch.txt',
          # Name of the namespace to use
          # Name of the namespace to use
          'NS': 'tcut'
          'NS': 'tcut',
          # Directory containing eBPF test programs
          'EBPFDIR': './bpf'
        }
        }