1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 
4 # See virtio_net_common.sh comments for more details about assumed setup
5 
6 ALL_TESTS="
7 	initial_ping_test
8 	f_mac_test
9 "
10 
11 source virtio_net_common.sh
12 
13 lib_dir=$(dirname "$0")
14 source "$lib_dir"/../../../net/forwarding/lib.sh
15 
16 h1=${NETIFS[p1]}
17 h2=${NETIFS[p2]}
18 
19 h1_create()
20 {
21 	simple_if_init $h1 $H1_IPV4/24 $H1_IPV6/64
22 }
23 
24 h1_destroy()
25 {
26 	simple_if_fini $h1 $H1_IPV4/24 $H1_IPV6/64
27 }
28 
29 h2_create()
30 {
31 	simple_if_init $h2 $H2_IPV4/24 $H2_IPV6/64
32 }
33 
34 h2_destroy()
35 {
36 	simple_if_fini $h2 $H2_IPV4/24 $H2_IPV6/64
37 }
38 
39 initial_ping_test()
40 {
41 	setup_cleanup
42 	setup_prepare
43 	ping_test $h1 $H2_IPV4 " simple"
44 }
45 
46 f_mac_test()
47 {
48 	RET=0
49 	local test_name="mac feature filtered"
50 
51 	virtio_feature_present $h1 $VIRTIO_NET_F_MAC
52 	if [ $? -ne 0 ]; then
53 		log_test_skip "$test_name" "Device $h1 is missing feature $VIRTIO_NET_F_MAC."
54 		return 0
55 	fi
56 	virtio_feature_present $h1 $VIRTIO_NET_F_MAC
57 	if [ $? -ne 0 ]; then
58 		log_test_skip "$test_name" "Device $h2 is missing feature $VIRTIO_NET_F_MAC."
59 		return 0
60 	fi
61 
62 	setup_cleanup
63 	setup_prepare
64 
65 	grep -q 0 /sys/class/net/$h1/addr_assign_type
66 	check_err $? "Permanent address assign type for $h1 is not set"
67 	grep -q 0 /sys/class/net/$h2/addr_assign_type
68 	check_err $? "Permanent address assign type for $h2 is not set"
69 
70 	setup_cleanup
71 	virtio_filter_feature_add $h1 $VIRTIO_NET_F_MAC
72 	virtio_filter_feature_add $h2 $VIRTIO_NET_F_MAC
73 	setup_prepare
74 
75 	grep -q 0 /sys/class/net/$h1/addr_assign_type
76 	check_fail $? "Permanent address assign type for $h1 is set when F_MAC feature is filtered"
77 	grep -q 0 /sys/class/net/$h2/addr_assign_type
78 	check_fail $? "Permanent address assign type for $h2 is set when F_MAC feature is filtered"
79 
80 	ping_do $h1 $H2_IPV4
81 	check_err $? "Ping failed"
82 
83 	log_test "$test_name"
84 }
85 
86 setup_prepare()
87 {
88 	virtio_device_rebind $h1
89 	virtio_device_rebind $h2
90 	wait_for_dev $h1
91 	wait_for_dev $h2
92 
93 	vrf_prepare
94 
95 	h1_create
96 	h2_create
97 }
98 
99 setup_cleanup()
100 {
101 	h2_destroy
102 	h1_destroy
103 
104 	vrf_cleanup
105 
106 	virtio_filter_features_clear $h1
107 	virtio_filter_features_clear $h2
108 	virtio_device_rebind $h1
109 	virtio_device_rebind $h2
110 	wait_for_dev $h1
111 	wait_for_dev $h2
112 }
113 
114 cleanup()
115 {
116 	pre_cleanup
117 	setup_cleanup
118 }
119 
120 check_driver $h1 "virtio_net"
121 check_driver $h2 "virtio_net"
122 check_virtio_debugfs $h1
123 check_virtio_debugfs $h2
124 
125 trap cleanup EXIT
126 
127 setup_prepare
128 
129 tests_run
130 
131 exit "$EXIT_STATUS"
132