mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-30 13:06:29 -04:00
Commit 29f834aa32 ("net_sched: sch_fq: add 3 bands and WRR
scheduling") introduces multiple traffic bands, and per-band maximum
packet count.
Per-band limits ensures that packets in one class cannot fill the
entire qdisc and so cause DoS to the traffic in the other classes.
Verify this behavior:
1. set the limit to 10 per band
2. send 20 pkts on band A: verify that 10 are queued, 10 dropped
3. send 20 pkts on band A: verify that 0 are queued, 20 dropped
4. send 20 pkts on band B: verify that 10 are queued, 10 dropped
Packets must remain queued for a period to trigger this behavior.
Use SO_TXTIME to store packets for 100 msec.
The test reuses existing upstream test infra. The script is a fork of
cmsg_time.sh. The scripts call cmsg_sender.
The test extends cmsg_sender with two arguments:
* '-P' SO_PRIORITY
There is a subtle difference between IPv4 and IPv6 stack behavior:
PF_INET/IP_TOS sets IP header bits and sk_priority
PF_INET6/IPV6_TCLASS sets IP header bits BUT NOT sk_priority
* '-n' num pkts
Send multiple packets in quick succession.
I first attempted a for loop in the script, but this is too slow in
virtualized environments, causing flakiness as the 100ms timeout is
reached and packets are dequeued.
Also do not wait for timestamps to be queued unless timestamps are
requested.
Signed-off-by: Willem de Bruijn <willemb@google.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/20231116203449.2627525-1-willemdebruijn.kernel@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
152 lines
5.7 KiB
Makefile
152 lines
5.7 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
# Makefile for net selftests
|
|
|
|
CFLAGS = -Wall -Wl,--no-as-needed -O2 -g
|
|
CFLAGS += -I../../../../usr/include/ $(KHDR_INCLUDES)
|
|
# Additional include paths needed by kselftest.h
|
|
CFLAGS += -I../
|
|
|
|
TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh netdevice.sh \
|
|
rtnetlink.sh xfrm_policy.sh test_blackhole_dev.sh
|
|
TEST_PROGS += fib_tests.sh fib-onlink-tests.sh pmtu.sh udpgso.sh ip_defrag.sh
|
|
TEST_PROGS += udpgso_bench.sh fib_rule_tests.sh msg_zerocopy.sh psock_snd.sh
|
|
TEST_PROGS += udpgro_bench.sh udpgro.sh test_vxlan_under_vrf.sh reuseport_addr_any.sh
|
|
TEST_PROGS += test_vxlan_fdb_changelink.sh so_txtime.sh ipv6_flowlabel.sh
|
|
TEST_PROGS += tcp_fastopen_backup_key.sh fcnal-test.sh l2tp.sh traceroute.sh
|
|
TEST_PROGS += fin_ack_lat.sh fib_nexthop_multiprefix.sh fib_nexthops.sh fib_nexthop_nongw.sh
|
|
TEST_PROGS += altnames.sh icmp.sh icmp_redirect.sh ip6_gre_headroom.sh
|
|
TEST_PROGS += route_localnet.sh
|
|
TEST_PROGS += reuseaddr_ports_exhausted.sh
|
|
TEST_PROGS += txtimestamp.sh
|
|
TEST_PROGS += vrf-xfrm-tests.sh
|
|
TEST_PROGS += rxtimestamp.sh
|
|
TEST_PROGS += devlink_port_split.py
|
|
TEST_PROGS += drop_monitor_tests.sh
|
|
TEST_PROGS += vrf_route_leaking.sh
|
|
TEST_PROGS += bareudp.sh
|
|
TEST_PROGS += amt.sh
|
|
TEST_PROGS += unicast_extensions.sh
|
|
TEST_PROGS += udpgro_fwd.sh
|
|
TEST_PROGS += udpgro_frglist.sh
|
|
TEST_PROGS += veth.sh
|
|
TEST_PROGS += ioam6.sh
|
|
TEST_PROGS += gro.sh
|
|
TEST_PROGS += gre_gso.sh
|
|
TEST_PROGS += cmsg_so_mark.sh
|
|
TEST_PROGS += cmsg_time.sh cmsg_ipv6.sh
|
|
TEST_PROGS += netns-name.sh
|
|
TEST_PROGS += srv6_end_dt46_l3vpn_test.sh
|
|
TEST_PROGS += srv6_end_dt4_l3vpn_test.sh
|
|
TEST_PROGS += srv6_end_dt6_l3vpn_test.sh
|
|
TEST_PROGS += srv6_hencap_red_l3vpn_test.sh
|
|
TEST_PROGS += srv6_hl2encap_red_l2vpn_test.sh
|
|
TEST_PROGS += srv6_end_next_csid_l3vpn_test.sh
|
|
TEST_PROGS += srv6_end_x_next_csid_l3vpn_test.sh
|
|
TEST_PROGS += srv6_end_flavors_test.sh
|
|
TEST_PROGS += vrf_strict_mode_test.sh
|
|
TEST_PROGS += arp_ndisc_evict_nocarrier.sh
|
|
TEST_PROGS += ndisc_unsolicited_na_test.sh
|
|
TEST_PROGS += arp_ndisc_untracked_subnets.sh
|
|
TEST_PROGS += stress_reuseport_listen.sh
|
|
TEST_PROGS += l2_tos_ttl_inherit.sh
|
|
TEST_PROGS += bind_bhash.sh
|
|
TEST_PROGS += ip_local_port_range.sh
|
|
TEST_PROGS += rps_default_mask.sh
|
|
TEST_PROGS += big_tcp.sh
|
|
TEST_PROGS_EXTENDED := in_netns.sh setup_loopback.sh setup_veth.sh
|
|
TEST_PROGS_EXTENDED += toeplitz_client.sh toeplitz.sh
|
|
TEST_GEN_FILES = socket nettest
|
|
TEST_GEN_FILES += psock_fanout psock_tpacket msg_zerocopy reuseport_addr_any
|
|
TEST_GEN_FILES += tcp_mmap tcp_inq psock_snd txring_overwrite
|
|
TEST_GEN_FILES += udpgso udpgso_bench_tx udpgso_bench_rx ip_defrag
|
|
TEST_GEN_FILES += so_txtime ipv6_flowlabel ipv6_flowlabel_mgr so_netns_cookie
|
|
TEST_GEN_FILES += tcp_fastopen_backup_key
|
|
TEST_GEN_FILES += fin_ack_lat
|
|
TEST_GEN_FILES += reuseaddr_ports_exhausted
|
|
TEST_GEN_FILES += hwtstamp_config rxtimestamp timestamping txtimestamp
|
|
TEST_GEN_FILES += ipsec
|
|
TEST_GEN_FILES += ioam6_parser
|
|
TEST_GEN_FILES += gro
|
|
TEST_GEN_PROGS = reuseport_bpf reuseport_bpf_cpu reuseport_bpf_numa
|
|
TEST_GEN_PROGS += reuseport_dualstack reuseaddr_conflict tls tun tap
|
|
TEST_GEN_FILES += toeplitz
|
|
TEST_GEN_FILES += cmsg_sender
|
|
TEST_GEN_FILES += stress_reuseport_listen
|
|
TEST_PROGS += test_vxlan_vnifiltering.sh
|
|
TEST_GEN_FILES += io_uring_zerocopy_tx
|
|
TEST_PROGS += io_uring_zerocopy_tx.sh
|
|
TEST_GEN_FILES += bind_bhash
|
|
TEST_GEN_PROGS += sk_bind_sendto_listen
|
|
TEST_GEN_PROGS += sk_connect_zero_addr
|
|
TEST_PROGS += test_ingress_egress_chaining.sh
|
|
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 += ip_local_port_range
|
|
TEST_GEN_FILES += bind_wildcard
|
|
TEST_PROGS += test_vxlan_mdb.sh
|
|
TEST_PROGS += test_bridge_neigh_suppress.sh
|
|
TEST_PROGS += test_vxlan_nolocalbypass.sh
|
|
TEST_PROGS += test_bridge_backup_port.sh
|
|
TEST_PROGS += fdb_flush.sh
|
|
TEST_PROGS += fq_band_pktlimit.sh
|
|
|
|
TEST_FILES := settings
|
|
|
|
include ../lib.mk
|
|
|
|
$(OUTPUT)/reuseport_bpf_numa: LDLIBS += -lnuma
|
|
$(OUTPUT)/tcp_mmap: LDLIBS += -lpthread -lcrypto
|
|
$(OUTPUT)/tcp_inq: LDLIBS += -lpthread
|
|
$(OUTPUT)/bind_bhash: LDLIBS += -lpthread
|
|
$(OUTPUT)/io_uring_zerocopy_tx: CFLAGS += -I../../../include/
|
|
|
|
# Rules to generate bpf obj nat6to4.o
|
|
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):
|
|
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))
|
|
|
|
$(OUTPUT)/nat6to4.o: nat6to4.c $(BPFOBJ) | $(MAKE_DIRS)
|
|
$(CLANG) -O2 --target=bpf -c $< $(CCINCLUDE) $(CLANG_SYS_INCLUDES) -o $@
|
|
|
|
$(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
|
|
$(APIDIR)/linux/bpf.h \
|
|
| $(BUILD_DIR)/libbpf
|
|
$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \
|
|
EXTRA_CFLAGS='-g -O0' \
|
|
DESTDIR=$(SCRATCH_DIR) prefix= all install_headers
|
|
|
|
EXTRA_CLEAN := $(SCRATCH_DIR)
|