| #!/bin/bash | |
| # SPDX-License-Identifier: GPL-2.0 | |
| # See virtio_net_common.sh comments for more details about assumed setup | |
| ALL_TESTS=" | |
| initial_ping_test | |
| f_mac_test | |
| " | |
| source virtio_net_common.sh | |
| lib_dir=$(dirname "$0") | |
| source "$lib_dir"/../../../net/forwarding/lib.sh | |
| h1=${NETIFS[p1]} | |
| h2=${NETIFS[p2]} | |
| h1_create() | |
| { | |
| simple_if_init $h1 $H1_IPV4/24 $H1_IPV6/64 | |
| } | |
| h1_destroy() | |
| { | |
| simple_if_fini $h1 $H1_IPV4/24 $H1_IPV6/64 | |
| } | |
| h2_create() | |
| { | |
| simple_if_init $h2 $H2_IPV4/24 $H2_IPV6/64 | |
| } | |
| h2_destroy() | |
| { | |
| simple_if_fini $h2 $H2_IPV4/24 $H2_IPV6/64 | |
| } | |
| initial_ping_test() | |
| { | |
| setup_cleanup | |
| setup_prepare | |
| ping_test $h1 $H2_IPV4 " simple" | |
| } | |
| f_mac_test() | |
| { | |
| RET=0 | |
| local test_name="mac feature filtered" | |
| virtio_feature_present $h1 $VIRTIO_NET_F_MAC | |
| if [ $? -ne 0 ]; then | |
| log_test_skip "$test_name" "Device $h1 is missing feature $VIRTIO_NET_F_MAC." | |
| return 0 | |
| fi | |
| virtio_feature_present $h1 $VIRTIO_NET_F_MAC | |
| if [ $? -ne 0 ]; then | |
| log_test_skip "$test_name" "Device $h2 is missing feature $VIRTIO_NET_F_MAC." | |
| return 0 | |
| fi | |
| setup_cleanup | |
| setup_prepare | |
| grep -q 0 /sys/class/net/$h1/addr_assign_type | |
| check_err $? "Permanent address assign type for $h1 is not set" | |
| grep -q 0 /sys/class/net/$h2/addr_assign_type | |
| check_err $? "Permanent address assign type for $h2 is not set" | |
| setup_cleanup | |
| virtio_filter_feature_add $h1 $VIRTIO_NET_F_MAC | |
| virtio_filter_feature_add $h2 $VIRTIO_NET_F_MAC | |
| setup_prepare | |
| grep -q 0 /sys/class/net/$h1/addr_assign_type | |
| check_fail $? "Permanent address assign type for $h1 is set when F_MAC feature is filtered" | |
| grep -q 0 /sys/class/net/$h2/addr_assign_type | |
| check_fail $? "Permanent address assign type for $h2 is set when F_MAC feature is filtered" | |
| ping_do $h1 $H2_IPV4 | |
| check_err $? "Ping failed" | |
| log_test "$test_name" | |
| } | |
| setup_prepare() | |
| { | |
| virtio_device_rebind $h1 | |
| virtio_device_rebind $h2 | |
| wait_for_dev $h1 | |
| wait_for_dev $h2 | |
| vrf_prepare | |
| h1_create | |
| h2_create | |
| } | |
| setup_cleanup() | |
| { | |
| h2_destroy | |
| h1_destroy | |
| vrf_cleanup | |
| virtio_filter_features_clear $h1 | |
| virtio_filter_features_clear $h2 | |
| virtio_device_rebind $h1 | |
| virtio_device_rebind $h2 | |
| wait_for_dev $h1 | |
| wait_for_dev $h2 | |
| } | |
| cleanup() | |
| { | |
| pre_cleanup | |
| setup_cleanup | |
| } | |
| check_driver $h1 "virtio_net" | |
| check_driver $h2 "virtio_net" | |
| check_virtio_debugfs $h1 | |
| check_virtio_debugfs $h2 | |
| trap cleanup EXIT | |
| setup_prepare | |
| tests_run | |
| exit "$EXIT_STATUS" |