1*4882a593Smuzhiyun#!/bin/bash 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun# This test is for checking the FIB offload API on top of mlxsw. 5*4882a593Smuzhiyun 6*4882a593Smuzhiyunlib_dir=$(dirname $0)/../../../net/forwarding 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunALL_TESTS=" 9*4882a593Smuzhiyun ipv4_identical_routes 10*4882a593Smuzhiyun ipv4_tos 11*4882a593Smuzhiyun ipv4_metric 12*4882a593Smuzhiyun ipv4_replace 13*4882a593Smuzhiyun ipv4_delete 14*4882a593Smuzhiyun ipv4_plen 15*4882a593Smuzhiyun ipv4_replay 16*4882a593Smuzhiyun ipv4_flush 17*4882a593Smuzhiyun ipv4_local_replace 18*4882a593Smuzhiyun ipv6_add 19*4882a593Smuzhiyun ipv6_metric 20*4882a593Smuzhiyun ipv6_append_single 21*4882a593Smuzhiyun ipv6_replace_single 22*4882a593Smuzhiyun ipv6_metric_multipath 23*4882a593Smuzhiyun ipv6_append_multipath 24*4882a593Smuzhiyun ipv6_replace_multipath 25*4882a593Smuzhiyun ipv6_append_multipath_to_single 26*4882a593Smuzhiyun ipv6_delete_single 27*4882a593Smuzhiyun ipv6_delete_multipath 28*4882a593Smuzhiyun ipv6_replay_single 29*4882a593Smuzhiyun ipv6_replay_multipath 30*4882a593Smuzhiyun ipv6_local_replace 31*4882a593Smuzhiyun" 32*4882a593SmuzhiyunNUM_NETIFS=0 33*4882a593Smuzhiyunsource $lib_dir/lib.sh 34*4882a593Smuzhiyunsource $lib_dir/devlink_lib.sh 35*4882a593Smuzhiyunsource $lib_dir/fib_offload_lib.sh 36*4882a593Smuzhiyun 37*4882a593Smuzhiyunipv4_identical_routes() 38*4882a593Smuzhiyun{ 39*4882a593Smuzhiyun fib_ipv4_identical_routes_test "testns1" 40*4882a593Smuzhiyun} 41*4882a593Smuzhiyun 42*4882a593Smuzhiyunipv4_tos() 43*4882a593Smuzhiyun{ 44*4882a593Smuzhiyun fib_ipv4_tos_test "testns1" 45*4882a593Smuzhiyun} 46*4882a593Smuzhiyun 47*4882a593Smuzhiyunipv4_metric() 48*4882a593Smuzhiyun{ 49*4882a593Smuzhiyun fib_ipv4_metric_test "testns1" 50*4882a593Smuzhiyun} 51*4882a593Smuzhiyun 52*4882a593Smuzhiyunipv4_replace() 53*4882a593Smuzhiyun{ 54*4882a593Smuzhiyun fib_ipv4_replace_test "testns1" 55*4882a593Smuzhiyun} 56*4882a593Smuzhiyun 57*4882a593Smuzhiyunipv4_delete() 58*4882a593Smuzhiyun{ 59*4882a593Smuzhiyun fib_ipv4_delete_test "testns1" 60*4882a593Smuzhiyun} 61*4882a593Smuzhiyun 62*4882a593Smuzhiyunipv4_plen() 63*4882a593Smuzhiyun{ 64*4882a593Smuzhiyun fib_ipv4_plen_test "testns1" 65*4882a593Smuzhiyun} 66*4882a593Smuzhiyun 67*4882a593Smuzhiyunipv4_replay_metric() 68*4882a593Smuzhiyun{ 69*4882a593Smuzhiyun fib_ipv4_replay_metric_test "testns1" "$DEVLINK_DEV" 70*4882a593Smuzhiyun} 71*4882a593Smuzhiyun 72*4882a593Smuzhiyunipv4_replay_tos() 73*4882a593Smuzhiyun{ 74*4882a593Smuzhiyun fib_ipv4_replay_tos_test "testns1" "$DEVLINK_DEV" 75*4882a593Smuzhiyun} 76*4882a593Smuzhiyun 77*4882a593Smuzhiyunipv4_replay_plen() 78*4882a593Smuzhiyun{ 79*4882a593Smuzhiyun fib_ipv4_replay_plen_test "testns1" "$DEVLINK_DEV" 80*4882a593Smuzhiyun} 81*4882a593Smuzhiyun 82*4882a593Smuzhiyunipv4_replay() 83*4882a593Smuzhiyun{ 84*4882a593Smuzhiyun ipv4_replay_metric 85*4882a593Smuzhiyun ipv4_replay_tos 86*4882a593Smuzhiyun ipv4_replay_plen 87*4882a593Smuzhiyun} 88*4882a593Smuzhiyun 89*4882a593Smuzhiyunipv4_flush() 90*4882a593Smuzhiyun{ 91*4882a593Smuzhiyun fib_ipv4_flush_test "testns1" 92*4882a593Smuzhiyun} 93*4882a593Smuzhiyun 94*4882a593Smuzhiyunipv4_local_replace() 95*4882a593Smuzhiyun{ 96*4882a593Smuzhiyun local ns="testns1" 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun RET=0 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun ip -n $ns link add name dummy1 type dummy 101*4882a593Smuzhiyun ip -n $ns link set dev dummy1 up 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun ip -n $ns route add table local 192.0.2.1/32 dev dummy1 104*4882a593Smuzhiyun fib4_trap_check $ns "table local 192.0.2.1/32 dev dummy1" false 105*4882a593Smuzhiyun check_err $? "Local table route not in hardware when should" 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun ip -n $ns route add table main 192.0.2.1/32 dev dummy1 108*4882a593Smuzhiyun fib4_trap_check $ns "table main 192.0.2.1/32 dev dummy1" true 109*4882a593Smuzhiyun check_err $? "Main table route in hardware when should not" 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun fib4_trap_check $ns "table local 192.0.2.1/32 dev dummy1" false 112*4882a593Smuzhiyun check_err $? "Local table route was replaced when should not" 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun # Test that local routes can replace routes in main table. 115*4882a593Smuzhiyun ip -n $ns route add table main 192.0.2.2/32 dev dummy1 116*4882a593Smuzhiyun fib4_trap_check $ns "table main 192.0.2.2/32 dev dummy1" false 117*4882a593Smuzhiyun check_err $? "Main table route not in hardware when should" 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun ip -n $ns route add table local 192.0.2.2/32 dev dummy1 120*4882a593Smuzhiyun fib4_trap_check $ns "table local 192.0.2.2/32 dev dummy1" false 121*4882a593Smuzhiyun check_err $? "Local table route did not replace route in main table when should" 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun fib4_trap_check $ns "table main 192.0.2.2/32 dev dummy1" true 124*4882a593Smuzhiyun check_err $? "Main table route was not replaced when should" 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun log_test "IPv4 local table route replacement" 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun ip -n $ns link del dev dummy1 129*4882a593Smuzhiyun} 130*4882a593Smuzhiyun 131*4882a593Smuzhiyunipv6_add() 132*4882a593Smuzhiyun{ 133*4882a593Smuzhiyun fib_ipv6_add_test "testns1" 134*4882a593Smuzhiyun} 135*4882a593Smuzhiyun 136*4882a593Smuzhiyunipv6_metric() 137*4882a593Smuzhiyun{ 138*4882a593Smuzhiyun fib_ipv6_metric_test "testns1" 139*4882a593Smuzhiyun} 140*4882a593Smuzhiyun 141*4882a593Smuzhiyunipv6_append_single() 142*4882a593Smuzhiyun{ 143*4882a593Smuzhiyun fib_ipv6_append_single_test "testns1" 144*4882a593Smuzhiyun} 145*4882a593Smuzhiyun 146*4882a593Smuzhiyunipv6_replace_single() 147*4882a593Smuzhiyun{ 148*4882a593Smuzhiyun fib_ipv6_replace_single_test "testns1" 149*4882a593Smuzhiyun} 150*4882a593Smuzhiyun 151*4882a593Smuzhiyunipv6_metric_multipath() 152*4882a593Smuzhiyun{ 153*4882a593Smuzhiyun fib_ipv6_metric_multipath_test "testns1" 154*4882a593Smuzhiyun} 155*4882a593Smuzhiyun 156*4882a593Smuzhiyunipv6_append_multipath() 157*4882a593Smuzhiyun{ 158*4882a593Smuzhiyun fib_ipv6_append_multipath_test "testns1" 159*4882a593Smuzhiyun} 160*4882a593Smuzhiyun 161*4882a593Smuzhiyunipv6_replace_multipath() 162*4882a593Smuzhiyun{ 163*4882a593Smuzhiyun fib_ipv6_replace_multipath_test "testns1" 164*4882a593Smuzhiyun} 165*4882a593Smuzhiyun 166*4882a593Smuzhiyunipv6_append_multipath_to_single() 167*4882a593Smuzhiyun{ 168*4882a593Smuzhiyun fib_ipv6_append_multipath_to_single_test "testns1" 169*4882a593Smuzhiyun} 170*4882a593Smuzhiyun 171*4882a593Smuzhiyunipv6_delete_single() 172*4882a593Smuzhiyun{ 173*4882a593Smuzhiyun fib_ipv6_delete_single_test "testns1" 174*4882a593Smuzhiyun} 175*4882a593Smuzhiyun 176*4882a593Smuzhiyunipv6_delete_multipath() 177*4882a593Smuzhiyun{ 178*4882a593Smuzhiyun fib_ipv6_delete_multipath_test "testns1" 179*4882a593Smuzhiyun} 180*4882a593Smuzhiyun 181*4882a593Smuzhiyunipv6_replay_single() 182*4882a593Smuzhiyun{ 183*4882a593Smuzhiyun fib_ipv6_replay_single_test "testns1" "$DEVLINK_DEV" 184*4882a593Smuzhiyun} 185*4882a593Smuzhiyun 186*4882a593Smuzhiyunipv6_replay_multipath() 187*4882a593Smuzhiyun{ 188*4882a593Smuzhiyun fib_ipv6_replay_multipath_test "testns1" "$DEVLINK_DEV" 189*4882a593Smuzhiyun} 190*4882a593Smuzhiyun 191*4882a593Smuzhiyunipv6_local_replace() 192*4882a593Smuzhiyun{ 193*4882a593Smuzhiyun local ns="testns1" 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun RET=0 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun ip -n $ns link add name dummy1 type dummy 198*4882a593Smuzhiyun ip -n $ns link set dev dummy1 up 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun ip -n $ns route add table local 2001:db8:1::1/128 dev dummy1 201*4882a593Smuzhiyun fib6_trap_check $ns "table local 2001:db8:1::1/128 dev dummy1" false 202*4882a593Smuzhiyun check_err $? "Local table route not in hardware when should" 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun ip -n $ns route add table main 2001:db8:1::1/128 dev dummy1 205*4882a593Smuzhiyun fib6_trap_check $ns "table main 2001:db8:1::1/128 dev dummy1" true 206*4882a593Smuzhiyun check_err $? "Main table route in hardware when should not" 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun fib6_trap_check $ns "table local 2001:db8:1::1/128 dev dummy1" false 209*4882a593Smuzhiyun check_err $? "Local table route was replaced when should not" 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun # Test that local routes can replace routes in main table. 212*4882a593Smuzhiyun ip -n $ns route add table main 2001:db8:1::2/128 dev dummy1 213*4882a593Smuzhiyun fib6_trap_check $ns "table main 2001:db8:1::2/128 dev dummy1" false 214*4882a593Smuzhiyun check_err $? "Main table route not in hardware when should" 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun ip -n $ns route add table local 2001:db8:1::2/128 dev dummy1 217*4882a593Smuzhiyun fib6_trap_check $ns "table local 2001:db8:1::2/128 dev dummy1" false 218*4882a593Smuzhiyun check_err $? "Local route route did not replace route in main table when should" 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun fib6_trap_check $ns "table main 2001:db8:1::2/128 dev dummy1" true 221*4882a593Smuzhiyun check_err $? "Main table route was not replaced when should" 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun log_test "IPv6 local table route replacement" 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun ip -n $ns link del dev dummy1 226*4882a593Smuzhiyun} 227*4882a593Smuzhiyun 228*4882a593Smuzhiyunsetup_prepare() 229*4882a593Smuzhiyun{ 230*4882a593Smuzhiyun ip netns add testns1 231*4882a593Smuzhiyun if [ $? -ne 0 ]; then 232*4882a593Smuzhiyun echo "Failed to add netns \"testns1\"" 233*4882a593Smuzhiyun exit 1 234*4882a593Smuzhiyun fi 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun devlink dev reload $DEVLINK_DEV netns testns1 237*4882a593Smuzhiyun if [ $? -ne 0 ]; then 238*4882a593Smuzhiyun echo "Failed to reload into netns \"testns1\"" 239*4882a593Smuzhiyun exit 1 240*4882a593Smuzhiyun fi 241*4882a593Smuzhiyun} 242*4882a593Smuzhiyun 243*4882a593Smuzhiyuncleanup() 244*4882a593Smuzhiyun{ 245*4882a593Smuzhiyun pre_cleanup 246*4882a593Smuzhiyun devlink -N testns1 dev reload $DEVLINK_DEV netns $$ 247*4882a593Smuzhiyun ip netns del testns1 248*4882a593Smuzhiyun} 249*4882a593Smuzhiyun 250*4882a593Smuzhiyuntrap cleanup EXIT 251*4882a593Smuzhiyun 252*4882a593Smuzhiyunsetup_prepare 253*4882a593Smuzhiyun 254*4882a593Smuzhiyuntests_run 255*4882a593Smuzhiyun 256*4882a593Smuzhiyunexit $EXIT_STATUS 257