linux/tools/testing/selftests/net
David Ahern 40867d74c3 net: Add l3mdev index to flow struct and avoid oif reset for port devices
The fundamental premise of VRF and l3mdev core code is binding a socket
to a device (l3mdev or netdev with an L3 domain) to indicate L3 scope.
Legacy code resets flowi_oif to the l3mdev losing any original port
device binding. Ben (among others) has demonstrated use cases where the
original port device binding is important and needs to be retained.
This patch handles that by adding a new entry to the common flow struct
that can indicate the l3mdev index for later rule and table matching
avoiding the need to reset flowi_oif.

In addition to allowing more use cases that require port device binds,
this patch brings a few datapath simplications:

1. l3mdev_fib_rule_match is only called when walking fib rules and
   always after l3mdev_update_flow. That allows an optimization to bail
   early for non-VRF type uses cases when flowi_l3mdev is not set. Also,
   only that index needs to be checked for the FIB table id.

2. l3mdev_update_flow can be called with flowi_oif set to a l3mdev
   (e.g., VRF) device. By resetting flowi_oif only for this case the
   FLOWI_FLAG_SKIP_NH_OIF flag is not longer needed and can be removed,
   removing several checks in the datapath. The flowi_iif path can be
   simplified to only be called if the it is not loopback (loopback can
   not be assigned to an L3 domain) and the l3mdev index is not already
   set.

3. Avoid another device lookup in the output path when the fib lookup
   returns a reject failure.

Note: 2 functional tests for local traffic with reject fib rules are
updated to reflect the new direct failure at FIB lookup time for ping
rather than the failure on packet path. The current code fails like this:

    HINT: Fails since address on vrf device is out of device scope
    COMMAND: ip netns exec ns-A ping -c1 -w1 -I eth1 172.16.3.1
    ping: Warning: source address might be selected on device other than: eth1
    PING 172.16.3.1 (172.16.3.1) from 172.16.3.1 eth1: 56(84) bytes of data.

    --- 172.16.3.1 ping statistics ---
    1 packets transmitted, 0 received, 100% packet loss, time 0ms

where the test now directly fails:

    HINT: Fails since address on vrf device is out of device scope
    COMMAND: ip netns exec ns-A ping -c1 -w1 -I eth1 172.16.3.1
    ping: connect: No route to host

Signed-off-by: David Ahern <dsahern@kernel.org>
Tested-by: Ben Greear <greearb@candelatech.com>
Link: https://lore.kernel.org/r/20220314204551.16369-1-dsahern@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2022-03-15 20:20:02 -07:00
..
af_unix selftests: net: af_unix: Fix makefile to use TEST_GEN_PROGS 2021-09-19 13:22:18 +01:00
forwarding selftests: netdevsim: hw_stats_l3: Add a new test 2022-03-15 14:00:51 +01:00
mptcp selftests: mptcp: join: make it shellcheck compliant 2022-03-10 12:29:59 -08:00
.gitignore selftests: net: rename cmsg_so_mark 2022-02-10 15:04:51 +00:00
Makefile selftests: net: test standard socket cmsgs across UDP and ICMP sockets 2022-02-10 15:04:52 +00:00
altnames.sh selftest: net: fix typo in altname test 2021-09-12 10:48:26 +01:00
amt.sh selftests: set amt.sh executable 2022-01-05 10:27:19 -08:00
arp_ndisc_evict_nocarrier.sh selftests: net: add arp_ndisc_evict_nocarrier 2021-11-01 19:57:15 -07:00
bareudp.sh selftests: set conf.all.rp_filter=0 in bareudp.sh 2020-11-12 16:14:38 -08:00
cmsg_ipv6.sh selftests: net: basic test for IPV6_2292* 2022-02-17 14:22:09 +00:00
cmsg_sender.c selftests: net: basic test for IPV6_2292* 2022-02-17 14:22:09 +00:00
cmsg_so_mark.sh selftests: net: cmsg_so_mark: test with SO_MARK set by setsockopt 2022-02-10 15:04:51 +00:00
cmsg_time.sh selftests: net: test standard socket cmsgs across UDP and ICMP sockets 2022-02-10 15:04:52 +00:00
config selftests: add amt interface selftest script 2021-11-01 13:36:09 +00:00
devlink_port_split.py selftests: net: devlink_port_split: check devlink returned an element before dereferencing it 2021-06-28 16:14:38 -07:00
drop_monitor_tests.sh selftests: net: Add drop monitor test 2020-09-30 18:01:26 -07:00
fcnal-test.sh net: Add l3mdev index to flow struct and avoid oif reset for port devices 2022-03-15 20:20:02 -07:00
fib-onlink-tests.sh
fib_nexthop_multiprefix.sh selftests: fib_nexthop_multiprefix: fix cleanup() netns deletion 2020-07-14 15:06:12 -07:00
fib_nexthops.sh selftests: net: fib_nexthops: add test for group refcount imbalance bug 2021-11-22 15:44:49 +00:00
fib_rule_tests.sh ipv4: Stop taking ECN bits into account in fib4-rules 2022-02-07 20:12:46 -08:00
fib_tests.sh selftests: fib_test: Add a test case for IPv4 broadcast neighbours 2022-02-21 11:44:30 +00:00
fin_ack_lat.c selftests: net: Add FIN_ACK processing order related latency spike test 2020-02-02 13:33:21 -08:00
fin_ack_lat.sh selftests: net: Add FIN_ACK processing order related latency spike test 2020-02-02 13:33:21 -08:00
gre_gso.sh selftests: net: switch to socat in the GSO GRE test 2021-11-12 19:59:01 -08:00
gro.c Networking changes for 5.17. 2022-01-10 19:06:09 -08:00
gro.sh selftests/net: allow GRO coalesce test on veth 2021-08-26 12:03:49 +01:00
hwtstamp_config.c selftests: move timestamping selftests to net folder 2020-03-29 21:48:30 -07:00
icmp.sh selftests/net: Add icmp.sh for testing ICMP dummy address responses 2021-06-18 12:13:24 -07:00
icmp_redirect.sh selftests: icmp_redirect: pass xfail=0 to log_test() 2021-12-12 12:56:41 +00:00
in_netns.sh
ioam6.sh Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2021-10-14 16:50:14 -07:00
ioam6_parser.c selftests: net: ioam: expect support for Queue depth data 2022-01-21 19:26:39 -08:00
ip6_gre_headroom.sh
ip_defrag.c selftests: net: ip_defrag: ignore EPERM 2020-06-02 15:54:20 -07:00
ip_defrag.sh selftests: net: ip_defrag: modprobe missing nf_defrag_ipv6 support 2020-07-17 12:49:18 -07:00
ipsec.c selftests/net: remove ARRAY_SIZE define from individual tests 2021-12-10 17:50:57 -07:00
ipv6_flowlabel.c
ipv6_flowlabel.sh
ipv6_flowlabel_mgr.c
l2tp.sh selftests: Make l2tp.sh executable 2019-10-22 14:01:35 -07:00
msg_zerocopy.c selftests/net: relax cpu affinity requirement in msg_zerocopy test 2020-08-05 12:25:35 -07:00
msg_zerocopy.sh
netdevice.sh
nettest.c ipv4/raw: support binding to nonlocal addresses 2021-11-17 20:21:52 -08:00
pmtu.sh selftests: pmtu.sh: Kill nettest processes launched in subshell. 2022-03-09 20:23:32 -08:00
psock_fanout.c tools/net: Use bitwise instead of arithmetic operator for flags 2021-08-20 14:55:53 +01:00
psock_lib.h
psock_snd.c
psock_snd.sh selftests/net: remove min gso test in packet_snd 2021-08-02 10:34:04 +01:00
psock_tpacket.c
reuseaddr_conflict.c
reuseaddr_ports_exhausted.c selftests/net: fix warnings on reuseaddr_ports_exhausted 2021-03-16 15:01:21 -07:00
reuseaddr_ports_exhausted.sh selftests: net: Add SO_REUSEADDR test to check if 4-tuples are fully utilized. 2020-03-12 12:08:09 -07:00
reuseport_addr_any.c selftests/net: add definition for SOL_DCCP to fix compilation errors for old libc 2020-03-21 20:23:10 -07:00
reuseport_addr_any.sh
reuseport_bpf.c selftests/net: remove ARRAY_SIZE define from individual tests 2021-12-10 17:50:57 -07:00
reuseport_bpf_cpu.c
reuseport_bpf_numa.c selftests: net: fix array_size.cocci warning 2022-03-07 12:23:27 +00:00
reuseport_dualstack.c selftests: net: reuseport_dualstack: fix uninitalized parameter 2019-11-01 15:11:02 -07:00
route_localnet.sh
rtnetlink.sh selftests: rtnetlink: Use more sensible tos values 2022-02-03 19:11:21 -08:00
run_afpackettests selftests/net: Use kselftest skip code for skipped tests 2021-08-24 16:49:09 -07:00
run_netsocktests
rxtimestamp.c selftests/net: remove ARRAY_SIZE define from individual tests 2021-12-10 17:50:57 -07:00
rxtimestamp.sh selftests/net: plug rxtimestamp test into kselftest framework 2020-06-23 20:36:46 -07:00
settings kselftests/net: adapt the timeout to the largest runtime 2022-01-13 12:53:22 +00:00
setup_loopback.sh selftests/net: allow GRO coalesce test on veth 2021-08-26 12:03:49 +01:00
setup_veth.sh selftests/net: allow GRO coalesce test on veth 2021-08-26 12:03:49 +01:00
so_netns_cookie.c tools/testing: add a selftest for SO_NETNS_COOKIE 2021-06-24 11:13:05 -07:00
so_txtime.c selftests/net: so_txtime multi-host support 2021-03-31 17:48:21 -07:00
so_txtime.sh selftests/net: so_txtime multi-host support 2021-03-31 17:48:21 -07:00
socket.c selftests/net: remove ARRAY_SIZE define from individual tests 2021-12-10 17:50:57 -07:00
srv6_end_dt4_l3vpn_test.sh selftests/net: Use kselftest skip code for skipped tests 2021-08-24 16:49:09 -07:00
srv6_end_dt6_l3vpn_test.sh selftests/net: Use kselftest skip code for skipped tests 2021-08-24 16:49:09 -07:00
srv6_end_dt46_l3vpn_test.sh selftests/net: Use kselftest skip code for skipped tests 2021-08-24 16:49:09 -07:00
tcp_fastopen_backup_key.c selftests/net: remove ARRAY_SIZE define from individual tests 2021-12-10 17:50:57 -07:00
tcp_fastopen_backup_key.sh
tcp_inq.c
tcp_mmap.c selftests: net: tcp_mmap: Use huge pages in receive path 2020-08-20 16:14:53 -07:00
test_blackhole_dev.sh
test_bpf.sh
test_vxlan_fdb_changelink.sh
test_vxlan_under_vrf.sh selftests: net: test_vxlan_under_vrf: fix HV connectivity test 2021-11-10 14:31:02 +00:00
test_vxlan_vnifiltering.sh selftests: add new tests for vxlan vnifiltering 2022-03-01 08:38:02 +00:00
timestamping.c selftests/net: timestamping: Fix bind_phc check 2022-01-31 11:44:04 +00:00
tls.c selftests: tls: add missing AES256-GCM cipher 2021-12-07 20:18:07 -08:00
toeplitz.c selftests/net: toeplitz: fix udp option 2021-12-13 14:37:15 +00:00
toeplitz.sh selftests/net: toeplitz test 2021-08-05 13:14:09 +01:00
toeplitz_client.sh selftests/net: toeplitz test 2021-08-05 13:14:09 +01:00
traceroute.sh selftest: net: add some traceroute tests 2019-11-06 17:35:49 -08:00
txring_overwrite.c
txtimestamp.c selftests: txtimestamp: fix compilation issue 2021-02-04 20:22:30 -08:00
txtimestamp.sh selftest: txtimestamp: fix net ns entry logic 2020-07-21 16:11:07 -07:00
udpgro.sh selftests: fix the return value for UDP GRO test 2021-01-05 16:59:21 -08:00
udpgro_bench.sh
udpgro_fwd.sh selftests: net: udpgro_fwd.sh: explicitly checking the available ping feature 2021-12-31 18:36:41 -08:00
udpgso.c selftests: Calculate udpgso segment count without header adjustment 2021-12-23 19:20:06 -08:00
udpgso.sh
udpgso_bench.sh
udpgso_bench_rx.c selftests/net: udpgso_bench_rx: fix port argument 2021-11-11 12:24:26 +00:00
udpgso_bench_tx.c selftests/net: udpgso_bench_tx: fix dst ip argument 2021-12-29 17:29:50 -08:00
unicast_extensions.sh selftests/net: Use kselftest skip code for skipped tests 2021-08-24 16:49:09 -07:00
veth.sh selftests: net: veth: add tests for set_channel 2021-07-20 06:11:18 -07:00
vrf-xfrm-tests.sh selftests: Add tests for vrf and xfrms 2020-04-22 19:31:40 -07:00
vrf_route_leaking.sh selftests: Add VRF route leaking tests 2020-10-14 17:14:28 -07:00
vrf_strict_mode_test.sh selftests/net: Use kselftest skip code for skipped tests 2021-08-24 16:49:09 -07:00
xfrm_policy.sh xfrm: Fix wraparound in xfrm_policy_addr_delta() 2021-01-04 10:35:09 +01:00