brintos

brintos / linux-shallow public Read only

0
0
Text · 5.0 KiB · bdffe69 Raw
202 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03#4# Test that blackhole routes are marked as offloaded and that packets hitting5# them are dropped by the ASIC and not by the kernel.6#7# +---------------------------------+8# | H1 (vrf)                        |9# |    + $h1                        |10# |    | 192.0.2.1/24               |11# |    | 2001:db8:1::1/64           |12# |    |                            |13# |    |  default via 192.0.2.2     |14# |    |  default via 2001:db8:1::2 |15# +----|----------------------------+16#      |17# +----|----------------------------------------------------------------------+18# | SW |                                                                      |19# |    + $rp1                                                                 |20# |        192.0.2.2/24                                                       |21# |        2001:db8:1::2/64                                                   |22# |                                                                           |23# |        2001:db8:2::2/64                                                   |24# |        198.51.100.2/24                                                    |25# |    + $rp2                                                                 |26# |    |                                                                      |27# +----|----------------------------------------------------------------------+28#      |29# +----|----------------------------+30# |    |  default via 198.51.100.2  |31# |    |  default via 2001:db8:2::2 |32# |    |                            |33# |    | 2001:db8:2::1/64           |34# |    | 198.51.100.1/24            |35# |    + $h2                        |36# | H2 (vrf)                        |37# +---------------------------------+38 39lib_dir=$(dirname $0)/../../../net/forwarding40 41ALL_TESTS="42	ping_ipv443	ping_ipv644	blackhole_ipv445	blackhole_ipv646"47NUM_NETIFS=448: ${TIMEOUT:=20000} # ms49source $lib_dir/tc_common.sh50source $lib_dir/lib.sh51 52h1_create()53{54	simple_if_init $h1 192.0.2.1/24 2001:db8:1::1/6455 56	ip -4 route add default vrf v$h1 nexthop via 192.0.2.257	ip -6 route add default vrf v$h1 nexthop via 2001:db8:1::258}59 60h1_destroy()61{62	ip -6 route del default vrf v$h1 nexthop via 2001:db8:1::263	ip -4 route del default vrf v$h1 nexthop via 192.0.2.264 65	simple_if_fini $h1 192.0.2.1/24 2001:db8:1::1/6466}67 68h2_create()69{70	simple_if_init $h2 198.51.100.1/24 2001:db8:2::1/6471 72	ip -4 route add default vrf v$h2 nexthop via 198.51.100.273	ip -6 route add default vrf v$h2 nexthop via 2001:db8:2::274}75 76h2_destroy()77{78	ip -6 route del default vrf v$h2 nexthop via 2001:db8:2::279	ip -4 route del default vrf v$h2 nexthop via 198.51.100.280 81	simple_if_fini $h2 198.51.100.1/24 2001:db8:2::1/6482}83 84router_create()85{86	ip link set dev $rp1 up87	ip link set dev $rp2 up88 89	tc qdisc add dev $rp1 clsact90 91	__addr_add_del $rp1 add 192.0.2.2/24 2001:db8:1::2/6492	__addr_add_del $rp2 add 198.51.100.2/24 2001:db8:2::2/6493}94 95router_destroy()96{97	__addr_add_del $rp2 del 198.51.100.2/24 2001:db8:2::2/6498	__addr_add_del $rp1 del 192.0.2.2/24 2001:db8:1::2/6499 100	tc qdisc del dev $rp1 clsact101 102	ip link set dev $rp2 down103	ip link set dev $rp1 down104}105 106ping_ipv4()107{108	ping_test $h1 198.51.100.1 ": h1->h2"109}110 111ping_ipv6()112{113	ping6_test $h1 2001:db8:2::1 ": h1->h2"114}115 116blackhole_ipv4()117{118	# Transmit packets from H1 to H2 and make sure they are dropped by the119	# ASIC and not by the kernel120	RET=0121 122	ip -4 route add blackhole 198.51.100.0/30123	tc filter add dev $rp1 ingress protocol ip pref 1 handle 101 flower \124		skip_hw dst_ip 198.51.100.1 src_ip 192.0.2.1 ip_proto icmp \125		action pass126 127	busywait "$TIMEOUT" wait_for_offload ip -4 route show 198.51.100.0/30128	check_err $? "route not marked as offloaded when should"129 130	ping_do $h1 198.51.100.1131	check_fail $? "ping passed when should not"132 133	tc_check_packets "dev $rp1 ingress" 101 0134	check_err $? "packets trapped and not dropped by ASIC"135 136	log_test "IPv4 blackhole route"137 138	tc filter del dev $rp1 ingress protocol ip pref 1 handle 101 flower139	ip -4 route del blackhole 198.51.100.0/30140}141 142blackhole_ipv6()143{144	RET=0145 146	ip -6 route add blackhole 2001:db8:2::/120147	tc filter add dev $rp1 ingress protocol ipv6 pref 1 handle 101 flower \148		skip_hw dst_ip 2001:db8:2::1 src_ip 2001:db8:1::1 \149		ip_proto icmpv6 action pass150 151	busywait "$TIMEOUT" wait_for_offload ip -6 route show 2001:db8:2::/120152	check_err $? "route not marked as offloaded when should"153 154	ping6_do $h1 2001:db8:2::1155	check_fail $? "ping passed when should not"156 157	tc_check_packets "dev $rp1 ingress" 101 0158	check_err $? "packets trapped and not dropped by ASIC"159 160	log_test "IPv6 blackhole route"161 162	tc filter del dev $rp1 ingress protocol ipv6 pref 1 handle 101 flower163	ip -6 route del blackhole 2001:db8:2::/120164}165 166setup_prepare()167{168	h1=${NETIFS[p1]}169	rp1=${NETIFS[p2]}170 171	rp2=${NETIFS[p3]}172	h2=${NETIFS[p4]}173 174	vrf_prepare175	forwarding_enable176 177	h1_create178	h2_create179	router_create180}181 182cleanup()183{184	pre_cleanup185 186	router_destroy187	h2_destroy188	h1_destroy189 190	forwarding_restore191	vrf_cleanup192}193 194trap cleanup EXIT195 196setup_prepare197setup_wait198 199tests_run200 201exit $EXIT_STATUS202