Merge branch 'selftests-net-extract-bpf-building-logic-from-the-makefile'
Jakub Kicinski says: ==================== selftests: net: extract BPF building logic from the Makefile This has been sitting in my tree for a while. I will soon add YNL/libynl support for networking selftests. This prompted a small cleanup of the selftest makefile for net/. We don't want to be piling logic for each library in there. YNL will get its own .mk file which can be included. Do the same for the BPF building section, already. No funcional changes here, just a code move and small rename. ==================== Link: https://lore.kernel.org/r/20240423183542.3807234-1-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -82,10 +82,6 @@ TEST_GEN_PROGS += so_incoming_cpu
|
||||
TEST_PROGS += sctp_vrf.sh
|
||||
TEST_GEN_FILES += sctp_hello
|
||||
TEST_GEN_FILES += csum
|
||||
TEST_GEN_FILES += nat6to4.o
|
||||
TEST_GEN_FILES += xdp_dummy.o
|
||||
TEST_GEN_FILES += sample_ret0.bpf.o
|
||||
TEST_GEN_FILES += sample_map_ret0.bpf.o
|
||||
TEST_GEN_FILES += ip_local_port_range
|
||||
TEST_GEN_FILES += bind_wildcard
|
||||
TEST_PROGS += test_vxlan_mdb.sh
|
||||
@@ -100,6 +96,8 @@ TEST_PROGS += bpf_offload.py
|
||||
TEST_FILES := settings
|
||||
TEST_FILES += in_netns.sh lib.sh net_helper.sh setup_loopback.sh setup_veth.sh
|
||||
|
||||
TEST_GEN_FILES += $(patsubst %.c,%.o,$(wildcard *.bpf.c))
|
||||
|
||||
TEST_INCLUDES := forwarding/lib.sh
|
||||
|
||||
include ../lib.mk
|
||||
@@ -110,56 +108,4 @@ $(OUTPUT)/tcp_inq: LDLIBS += -lpthread
|
||||
$(OUTPUT)/bind_bhash: LDLIBS += -lpthread
|
||||
$(OUTPUT)/io_uring_zerocopy_tx: CFLAGS += -I../../../include/
|
||||
|
||||
# Rules to generate bpf objs
|
||||
CLANG ?= clang
|
||||
SCRATCH_DIR := $(OUTPUT)/tools
|
||||
BUILD_DIR := $(SCRATCH_DIR)/build
|
||||
BPFDIR := $(abspath ../../../lib/bpf)
|
||||
APIDIR := $(abspath ../../../include/uapi)
|
||||
|
||||
CCINCLUDE += -I../bpf
|
||||
CCINCLUDE += -I../../../../usr/include/
|
||||
CCINCLUDE += -I$(SCRATCH_DIR)/include
|
||||
|
||||
BPFOBJ := $(BUILD_DIR)/libbpf/libbpf.a
|
||||
|
||||
MAKE_DIRS := $(BUILD_DIR)/libbpf
|
||||
$(MAKE_DIRS):
|
||||
$(call msg,MKDIR,,$@)
|
||||
$(Q)mkdir -p $@
|
||||
|
||||
# Get Clang's default includes on this system, as opposed to those seen by
|
||||
# '--target=bpf'. This fixes "missing" files on some architectures/distros,
|
||||
# such as asm/byteorder.h, asm/socket.h, asm/sockios.h, sys/cdefs.h etc.
|
||||
#
|
||||
# Use '-idirafter': Don't interfere with include mechanics except where the
|
||||
# build would have failed anyways.
|
||||
define get_sys_includes
|
||||
$(shell $(1) $(2) -v -E - </dev/null 2>&1 \
|
||||
| sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \
|
||||
$(shell $(1) $(2) -dM -E - </dev/null | grep '__riscv_xlen ' | awk '{printf("-D__riscv_xlen=%d -D__BITS_PER_LONG=%d", $$3, $$3)}')
|
||||
endef
|
||||
|
||||
ifneq ($(CROSS_COMPILE),)
|
||||
CLANG_TARGET_ARCH = --target=$(notdir $(CROSS_COMPILE:%-=%))
|
||||
endif
|
||||
|
||||
CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG),$(CLANG_TARGET_ARCH))
|
||||
|
||||
BPF_PROG_OBJS := $(OUTPUT)/nat6to4.o $(OUTPUT)/xdp_dummy.o \
|
||||
$(OUTPUT)/sample_map_ret0.bpf.o $(OUTPUT)/sample_ret0.bpf.o
|
||||
|
||||
$(BPF_PROG_OBJS): $(OUTPUT)/%.o : %.c $(BPFOBJ) | $(MAKE_DIRS)
|
||||
$(call msg,BPF_PROG,,$@)
|
||||
$(Q)$(CLANG) -O2 -g --target=bpf $(CCINCLUDE) $(CLANG_SYS_INCLUDES) \
|
||||
-c $< -o $@
|
||||
|
||||
$(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
|
||||
$(APIDIR)/linux/bpf.h \
|
||||
| $(BUILD_DIR)/libbpf
|
||||
$(call msg,MAKE,,$@)
|
||||
$(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \
|
||||
EXTRA_CFLAGS='-g -O0' \
|
||||
DESTDIR=$(SCRATCH_DIR) prefix= all install_headers
|
||||
|
||||
EXTRA_CLEAN := $(SCRATCH_DIR)
|
||||
include bpf.mk
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Rules to generate bpf objs
|
||||
CLANG ?= clang
|
||||
SCRATCH_DIR := $(OUTPUT)/tools
|
||||
BUILD_DIR := $(SCRATCH_DIR)/build
|
||||
BPFDIR := $(top_srcdir)/tools/lib/bpf
|
||||
APIDIR := $(top_srcdir)/tools/include/uapi
|
||||
|
||||
CCINCLUDE += -I$(selfdir)/bpf
|
||||
CCINCLUDE += -I$(top_srcdir)/usr/include/
|
||||
CCINCLUDE += -I$(SCRATCH_DIR)/include
|
||||
|
||||
BPFOBJ := $(BUILD_DIR)/libbpf/libbpf.a
|
||||
|
||||
MAKE_DIRS := $(BUILD_DIR)/libbpf
|
||||
$(MAKE_DIRS):
|
||||
$(call msg,MKDIR,,$@)
|
||||
$(Q)mkdir -p $@
|
||||
|
||||
# Get Clang's default includes on this system, as opposed to those seen by
|
||||
# '--target=bpf'. This fixes "missing" files on some architectures/distros,
|
||||
# such as asm/byteorder.h, asm/socket.h, asm/sockios.h, sys/cdefs.h etc.
|
||||
#
|
||||
# Use '-idirafter': Don't interfere with include mechanics except where the
|
||||
# build would have failed anyways.
|
||||
define get_sys_includes
|
||||
$(shell $(1) $(2) -v -E - </dev/null 2>&1 \
|
||||
| sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \
|
||||
$(shell $(1) $(2) -dM -E - </dev/null | grep '__riscv_xlen ' | awk '{printf("-D__riscv_xlen=%d -D__BITS_PER_LONG=%d", $$3, $$3)}')
|
||||
endef
|
||||
|
||||
ifneq ($(CROSS_COMPILE),)
|
||||
CLANG_TARGET_ARCH = --target=$(notdir $(CROSS_COMPILE:%-=%))
|
||||
endif
|
||||
|
||||
CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG),$(CLANG_TARGET_ARCH))
|
||||
|
||||
BPF_PROG_OBJS := $(patsubst %.c,$(OUTPUT)/%.o,$(wildcard *.bpf.c))
|
||||
|
||||
$(BPF_PROG_OBJS): $(OUTPUT)/%.o : %.c $(BPFOBJ) | $(MAKE_DIRS)
|
||||
$(call msg,BPF_PROG,,$@)
|
||||
$(Q)$(CLANG) -O2 -g --target=bpf $(CCINCLUDE) $(CLANG_SYS_INCLUDES) \
|
||||
-c $< -o $@
|
||||
|
||||
$(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
|
||||
$(APIDIR)/linux/bpf.h \
|
||||
| $(BUILD_DIR)/libbpf
|
||||
$(call msg,MAKE,,$@)
|
||||
$(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \
|
||||
EXTRA_CFLAGS='-g -O0' \
|
||||
DESTDIR=$(SCRATCH_DIR) prefix= all install_headers
|
||||
|
||||
EXTRA_CLEAN += $(SCRATCH_DIR)
|
||||
@@ -7,7 +7,7 @@ source net_helper.sh
|
||||
|
||||
readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)"
|
||||
|
||||
BPF_FILE="xdp_dummy.o"
|
||||
BPF_FILE="xdp_dummy.bpf.o"
|
||||
|
||||
# set global exit status, but never reset nonzero one.
|
||||
check_err()
|
||||
|
||||
@@ -7,7 +7,7 @@ source net_helper.sh
|
||||
|
||||
readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)"
|
||||
|
||||
BPF_FILE="xdp_dummy.o"
|
||||
BPF_FILE="xdp_dummy.bpf.o"
|
||||
|
||||
cleanup() {
|
||||
local -r jobs="$(jobs -p)"
|
||||
|
||||
@@ -7,7 +7,7 @@ source net_helper.sh
|
||||
|
||||
readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)"
|
||||
|
||||
BPF_FILE="xdp_dummy.o"
|
||||
BPF_FILE="xdp_dummy.bpf.o"
|
||||
|
||||
cleanup() {
|
||||
local -r jobs="$(jobs -p)"
|
||||
@@ -42,8 +42,8 @@ run_one() {
|
||||
|
||||
ip -n "${PEER_NS}" link set veth1 xdp object ${BPF_FILE} section xdp
|
||||
tc -n "${PEER_NS}" qdisc add dev veth1 clsact
|
||||
tc -n "${PEER_NS}" filter add dev veth1 ingress prio 4 protocol ipv6 bpf object-file nat6to4.o section schedcls/ingress6/nat_6 direct-action
|
||||
tc -n "${PEER_NS}" filter add dev veth1 egress prio 4 protocol ip bpf object-file nat6to4.o section schedcls/egress4/snat4 direct-action
|
||||
tc -n "${PEER_NS}" filter add dev veth1 ingress prio 4 protocol ipv6 bpf object-file nat6to4.bpf.o section schedcls/ingress6/nat_6 direct-action
|
||||
tc -n "${PEER_NS}" filter add dev veth1 egress prio 4 protocol ip bpf object-file nat6to4.bpf.o section schedcls/egress4/snat4 direct-action
|
||||
echo ${rx_args}
|
||||
ip netns exec "${PEER_NS}" ./udpgso_bench_rx ${rx_args} -r &
|
||||
|
||||
@@ -89,7 +89,7 @@ if [ ! -f ${BPF_FILE} ]; then
|
||||
exit -1
|
||||
fi
|
||||
|
||||
if [ ! -f nat6to4.o ]; then
|
||||
if [ ! -f nat6to4.bpf.o ]; then
|
||||
echo "Missing nat6to4 helper. Run 'make' first"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
source net_helper.sh
|
||||
|
||||
BPF_FILE="xdp_dummy.o"
|
||||
BPF_FILE="xdp_dummy.bpf.o"
|
||||
readonly BASE="ns-$(mktemp -u XXXXXX)"
|
||||
readonly SRC=2
|
||||
readonly DST=1
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
BPF_FILE="xdp_dummy.o"
|
||||
BPF_FILE="xdp_dummy.bpf.o"
|
||||
readonly STATS="$(mktemp -p /tmp ns-XXXXXX)"
|
||||
readonly BASE=`basename $STATS`
|
||||
readonly SRC=2
|
||||
|
||||
Reference in New Issue
Block a user