Server IP : 13.213.54.232 / Your IP : 216.73.216.72 Web Server : Apache/2.4.52 (Ubuntu) System : Linux ip-172-31-17-110 6.8.0-1029-aws #31~22.04.1-Ubuntu SMP Thu Apr 24 21:16:18 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 7.1.33-67+ubuntu22.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /lib/modules/6.8.0-1031-aws/build/tools/testing/selftests/drivers/net/mlxsw/ |
Upload File : |
#!/bin/bash # SPDX-License-Identifier: GPL-2.0 lib_dir=$(dirname $0)/../../../net/forwarding ALL_TESTS=" mac_profile_test " NUM_NETIFS=4 source $lib_dir/lib.sh source $lib_dir/tc_common.sh source $lib_dir/devlink_lib.sh h1_create() { simple_if_init $h1 192.0.2.1/24 ip route add 198.51.100.0/24 vrf v$h1 nexthop via 192.0.2.2 tc qdisc add dev $h1 ingress } h1_destroy() { tc qdisc del dev $h1 ingress ip route del 198.51.100.0/24 vrf v$h1 simple_if_fini $h1 192.0.2.1/24 } h2_create() { simple_if_init $h2 198.51.100.1/24 ip route add 192.0.2.0/24 vrf v$h2 nexthop via 198.51.100.2 tc qdisc add dev $h2 ingress } h2_destroy() { tc qdisc del dev $h2 ingress ip route del 192.0.2.0/24 vrf v$h2 simple_if_fini $h2 198.51.100.1/24 } router_create() { ip link set dev $rp1 up ip link set dev $rp2 up tc qdisc add dev $rp1 clsact tc qdisc add dev $rp2 clsact ip address add 192.0.2.2/24 dev $rp1 ip address add 198.51.100.2/24 dev $rp2 } router_destroy() { ip address del 198.51.100.2/24 dev $rp2 ip address del 192.0.2.2/24 dev $rp1 tc qdisc del dev $rp2 clsact tc qdisc del dev $rp1 clsact ip link set dev $rp2 down ip link set dev $rp1 down } setup_prepare() { h1=${NETIFS[p1]} rp1=${NETIFS[p2]} rp2=${NETIFS[p3]} h2=${NETIFS[p4]} vrf_prepare h1_create h2_create router_create forwarding_enable } cleanup() { pre_cleanup forwarding_restore router_destroy h2_destroy h1_destroy vrf_cleanup } h1_to_h2() { local test_name=$@; shift local smac=$(mac_get $rp2) RET=0 # Replace neighbour to avoid first packet being forwarded in software ip neigh replace dev $rp2 198.51.100.1 lladdr $(mac_get $h2) # Add a filter to ensure that packets are forwarded in hardware. Cannot # match on source MAC because it is not set in eACL after routing tc filter add dev $rp2 egress proto ip pref 1 handle 101 \ flower skip_sw ip_proto udp src_port 12345 dst_port 54321 \ action pass # Add a filter to ensure that packets are received with the correct # source MAC tc filter add dev $h2 ingress proto ip pref 1 handle 101 \ flower skip_sw src_mac $smac ip_proto udp src_port 12345 \ dst_port 54321 action pass $MZ $h1 -a own -b $(mac_get $rp1) -t udp "sp=12345,dp=54321" \ -A 192.0.2.1 -B 198.51.100.1 -c 10 -p 100 -d 1msec -q tc_check_packets "dev $rp2 egress" 101 10 check_err $? "packets not forwarded in hardware" tc_check_packets "dev $h2 ingress" 101 10 check_err $? "packets not forwarded with correct source mac" log_test "h1->h2: $test_name" tc filter del dev $h2 ingress protocol ip pref 1 handle 101 flower tc filter del dev $rp2 egress protocol ip pref 1 handle 101 flower ip neigh del dev $rp2 198.51.100.1 lladdr $(mac_get $h2) } h2_to_h1() { local test_name=$@; shift local rp1_mac=$(mac_get $rp1) RET=0 ip neigh replace dev $rp1 192.0.2.1 lladdr $(mac_get $h1) tc filter add dev $rp1 egress proto ip pref 1 handle 101 \ flower skip_sw ip_proto udp src_port 54321 dst_port 12345 \ action pass tc filter add dev $h1 ingress proto ip pref 1 handle 101 \ flower skip_sw src_mac $rp1_mac ip_proto udp src_port 54321 \ dst_port 12345 action pass $MZ $h2 -a own -b $(mac_get $rp2) -t udp "sp=54321,dp=12345" \ -A 198.51.100.1 -B 192.0.2.1 -c 10 -p 100 -d 1msec -q tc_check_packets "dev $rp1 egress" 101 10 check_err $? "packets not forwarded in hardware" tc_check_packets "dev $h1 ingress" 101 10 check_err $? "packets not forwarded with correct source mac" log_test "h2->h1: $test_name" tc filter del dev $h1 ingress protocol ip pref 1 handle 101 flower tc filter del dev $rp1 egress protocol ip pref 1 handle 101 flower ip neigh del dev $rp1 192.0.2.1 lladdr $(mac_get $h1) } smac_test() { local test_name=$@; shift # Test that packets forwarded to $h2 via $rp2 are forwarded with the # current source MAC of $rp2 h1_to_h2 $test_name # Test that packets forwarded to $h1 via $rp1 are forwarded with the # current source MAC of $rp1. This MAC is never changed during the test, # but given the shared nature of MAC profile, the point is to see that # changes to the MAC of $rp2 do not affect that of $rp1 h2_to_h1 $test_name } mac_profile_test() { local rp2_mac=$(mac_get $rp2) # Test behavior when the RIF backing $rp2 is transitioned to use # a new MAC profile ip link set dev $rp2 addr 00:11:22:33:44:55 smac_test "new mac profile" # Test behavior when the MAC profile used by the RIF is edited ip link set dev $rp2 address 00:22:22:22:22:22 smac_test "edit mac profile" # Restore original MAC ip link set dev $rp2 addr $rp2_mac } trap cleanup EXIT setup_prepare setup_wait mac_profiles=$(devlink_resource_size_get rif_mac_profiles) if [[ $mac_profiles -ne 1 ]]; then tests_run fi exit $EXIT_STATUS