Path: blob/master/tools/testing/selftests/drivers/net/mlxsw/blackhole_routes.sh
26292 views
#!/bin/bash1# SPDX-License-Identifier: GPL-2.02#3# Test that blackhole routes are marked as offloaded and that packets hitting4# them are dropped by the ASIC and not by the kernel.5#6# +---------------------------------+7# | H1 (vrf) |8# | + $h1 |9# | | 192.0.2.1/24 |10# | | 2001:db8:1::1/64 |11# | | |12# | | default via 192.0.2.2 |13# | | default via 2001:db8:1::2 |14# +----|----------------------------+15# |16# +----|----------------------------------------------------------------------+17# | SW | |18# | + $rp1 |19# | 192.0.2.2/24 |20# | 2001:db8:1::2/64 |21# | |22# | 2001:db8:2::2/64 |23# | 198.51.100.2/24 |24# | + $rp2 |25# | | |26# +----|----------------------------------------------------------------------+27# |28# +----|----------------------------+29# | | default via 198.51.100.2 |30# | | default via 2001:db8:2::2 |31# | | |32# | | 2001:db8:2::1/64 |33# | | 198.51.100.1/24 |34# | + $h2 |35# | H2 (vrf) |36# +---------------------------------+3738lib_dir=$(dirname $0)/../../../net/forwarding3940ALL_TESTS="41ping_ipv442ping_ipv643blackhole_ipv444blackhole_ipv645"46NUM_NETIFS=447: ${TIMEOUT:=20000} # ms48source $lib_dir/tc_common.sh49source $lib_dir/lib.sh5051h1_create()52{53simple_if_init $h1 192.0.2.1/24 2001:db8:1::1/645455ip -4 route add default vrf v$h1 nexthop via 192.0.2.256ip -6 route add default vrf v$h1 nexthop via 2001:db8:1::257}5859h1_destroy()60{61ip -6 route del default vrf v$h1 nexthop via 2001:db8:1::262ip -4 route del default vrf v$h1 nexthop via 192.0.2.26364simple_if_fini $h1 192.0.2.1/24 2001:db8:1::1/6465}6667h2_create()68{69simple_if_init $h2 198.51.100.1/24 2001:db8:2::1/647071ip -4 route add default vrf v$h2 nexthop via 198.51.100.272ip -6 route add default vrf v$h2 nexthop via 2001:db8:2::273}7475h2_destroy()76{77ip -6 route del default vrf v$h2 nexthop via 2001:db8:2::278ip -4 route del default vrf v$h2 nexthop via 198.51.100.27980simple_if_fini $h2 198.51.100.1/24 2001:db8:2::1/6481}8283router_create()84{85ip link set dev $rp1 up86ip link set dev $rp2 up8788tc qdisc add dev $rp1 clsact8990__addr_add_del $rp1 add 192.0.2.2/24 2001:db8:1::2/6491__addr_add_del $rp2 add 198.51.100.2/24 2001:db8:2::2/6492}9394router_destroy()95{96__addr_add_del $rp2 del 198.51.100.2/24 2001:db8:2::2/6497__addr_add_del $rp1 del 192.0.2.2/24 2001:db8:1::2/649899tc qdisc del dev $rp1 clsact100101ip link set dev $rp2 down102ip link set dev $rp1 down103}104105ping_ipv4()106{107ping_test $h1 198.51.100.1 ": h1->h2"108}109110ping_ipv6()111{112ping6_test $h1 2001:db8:2::1 ": h1->h2"113}114115blackhole_ipv4()116{117# Transmit packets from H1 to H2 and make sure they are dropped by the118# ASIC and not by the kernel119RET=0120121ip -4 route add blackhole 198.51.100.0/30122tc filter add dev $rp1 ingress protocol ip pref 1 handle 101 flower \123skip_hw dst_ip 198.51.100.1 src_ip 192.0.2.1 ip_proto icmp \124action pass125126busywait "$TIMEOUT" wait_for_offload ip -4 route show 198.51.100.0/30127check_err $? "route not marked as offloaded when should"128129ping_do $h1 198.51.100.1130check_fail $? "ping passed when should not"131132tc_check_packets "dev $rp1 ingress" 101 0133check_err $? "packets trapped and not dropped by ASIC"134135log_test "IPv4 blackhole route"136137tc filter del dev $rp1 ingress protocol ip pref 1 handle 101 flower138ip -4 route del blackhole 198.51.100.0/30139}140141blackhole_ipv6()142{143RET=0144145ip -6 route add blackhole 2001:db8:2::/120146tc filter add dev $rp1 ingress protocol ipv6 pref 1 handle 101 flower \147skip_hw dst_ip 2001:db8:2::1 src_ip 2001:db8:1::1 \148ip_proto icmpv6 action pass149150busywait "$TIMEOUT" wait_for_offload ip -6 route show 2001:db8:2::/120151check_err $? "route not marked as offloaded when should"152153ping6_do $h1 2001:db8:2::1154check_fail $? "ping passed when should not"155156tc_check_packets "dev $rp1 ingress" 101 0157check_err $? "packets trapped and not dropped by ASIC"158159log_test "IPv6 blackhole route"160161tc filter del dev $rp1 ingress protocol ipv6 pref 1 handle 101 flower162ip -6 route del blackhole 2001:db8:2::/120163}164165setup_prepare()166{167h1=${NETIFS[p1]}168rp1=${NETIFS[p2]}169170rp2=${NETIFS[p3]}171h2=${NETIFS[p4]}172173vrf_prepare174forwarding_enable175176h1_create177h2_create178router_create179}180181cleanup()182{183pre_cleanup184185router_destroy186h2_destroy187h1_destroy188189forwarding_restore190vrf_cleanup191}192193trap cleanup EXIT194195setup_prepare196setup_wait197198tests_run199200exit $EXIT_STATUS201202203