# SPDX-License-Identifier: GPL-2.0 ## -- Config -- DEV := lo PREFIX := sudo -E unshare -n RESULTS_DIR := results ## -- End Config -- HAVE_UNSHARED_UTIL := $(shell unshare --version 2> /dev/null) rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2)) TESTS := $(patsubst tests/%,%,$(call rwildcard,tests/,*.t)) TESTS_DIR := $(dir $(TESTS)) IPVERS := $(filter-out iproute2/Makefile,$(wildcard iproute2/*)) KENVFN := $(shell mktemp /tmp/tc_testkenv.XXXXXX) ifneq (,$(wildcard /proc/config.gz)) KCPATH := /proc/config.gz else KVER := $(shell uname -r) KCPATHS := /lib/modules/$(KVER)/config /boot/config-$(KVER) KCPATH := $(firstword $(wildcard $(KCPATHS))) endif .PHONY: compile listtests alltests configure $(TESTS) configure: $(MAKE) -C iproute2 configure compile: configure generate_nlmsg $(MAKE) -C iproute2 listtests: @for t in $(TESTS); do \ echo "$$t"; \ done generate_nlmsg: $(MAKE) -C tools alltests: generate_nlmsg $(TESTS) testclean: @echo "Removing $(RESULTS_DIR) dir ..." @rm -rf $(RESULTS_DIR) clean: testclean @rm -f iproute2/iproute2-this @rm -f tests/ip/link/dev_wo_vf_rate.nl $(MAKE) -C tools clean distclean: clean $(MAKE) -C iproute2 distclean $(TESTS): generate_nlmsg testclean ifeq (,$(IPVERS)) $(error Please run make first) endif ifeq (,$(HAVE_UNSHARED_UTIL)) $(error Please install util-linux tools to run tests in separated network namespace) endif @./tools/generate_nlmsg @mkdir -p $(RESULTS_DIR) @for d in $(TESTS_DIR); do \ mkdir -p $(RESULTS_DIR)/$$d; \ done @if [ "$(KCPATH)" = "/proc/config.gz" ]; then \ gunzip -c $(KCPATH) >$(KENVFN); \ elif [ "$(KCPATH)" != "" ]; then \ cat $(KCPATH) >$(KENVFN); \ fi @sed -i -e 's/^CONFIG_/export CONFIG_/' $(KENVFN) @for i in $(IPVERS); do \ o=`echo $$i | sed -e 's/iproute2\///'`; \ echo -n "Running $@ [$$o/`uname -r`]: "; \ TMP_ERR=`mktemp /tmp/tc_testsuite.XXXXXX`; \ TMP_OUT=`mktemp /tmp/tc_testsuite.XXXXXX`; \ . $(KENVFN); \ STD_ERR="$$TMP_ERR" STD_OUT="$$TMP_OUT" \ TC="$$i/tc/tc" IP="$$i/ip/ip" SS=$$i/misc/ss BRIDGE="$$i/bridge/bridge" \ DEV="$(DEV)" IPVER="$@" SNAME="$$i" \ ERRF="$(RESULTS_DIR)/$@.$$o.err" $(PREFIX) tests/$@ > $(RESULTS_DIR)/$@.$$o.out; \ if [ "$$?" = "127" ]; then \ printf "\033[1;35mSKIPPED\033[0m\n"; \ elif [ -e "$(RESULTS_DIR)/$@.$$o.err" ]; then \ printf "\033[0;31mFAILED\033[0m\n"; \ else \ printf "\033[0;32mPASS\033[0m\n"; \ fi; \ rm "$$TMP_ERR" "$$TMP_OUT"; \ sudo dmesg > $(RESULTS_DIR)/$@.$$o.dmesg; \ done