Skip to content

Commit e9f789e

Browse files
ShivaShankarKommulajerinjacobk
authored andcommitted
ci: add host-netdev test case
This patch adds host-netdev test case Signed-off-by: Kommula Shiva Shankar <kshankar@marvell.com> Change-Id: I06bdec68183cb30f13a8400b326931c501124b12 Reviewed-on: https://sj1git1.cavium.com/c/IP/SW/dataplane/dpu-offload/+/134538 Tested-by: sa_ip-toolkits-Jenkins <sa_ip-toolkits-jenkins@marvell.com> Reviewed-by: Nithin Kumar Dabilpuram <ndabilpuram@marvell.com>
1 parent b624ba1 commit e9f789e

File tree

6 files changed

+207
-5
lines changed

6 files changed

+207
-5
lines changed

ci/test/dao-test/common/ep_device_utils.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,27 @@ function ep_device_get_inactive_if()
325325
done
326326
}
327327

328+
function ep_device_get_unused_npa_pf()
329+
{
330+
for dev in $(lspci -d :a0fb | awk -e '{print $1}'); do
331+
if [ ! -d /sys/bus/pci/devices/$dev/driver ]; then
332+
echo $dev
333+
break;
334+
fi
335+
done
336+
}
337+
338+
function ep_device_configure_tap_iface()
339+
{
340+
local tap_if=$1
341+
local tap_if_addr=$2
342+
343+
if [ -d "/sys/class/net/$tap_if" ]; then
344+
ip addr add $tap_if_addr dev $tap_if
345+
ip link set $tap_if up
346+
fi
347+
}
348+
328349
function ep_device_get_num_cores()
329350
{
330351
local num_cores=$(lscpu | grep "On-line CPU(s) list" | awk -F '-' '{print $3}')

ci/test/dao-test/common/ep_host_utils.sh

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,25 @@ function ep_host_sdp_setup()
1717
sleep 5
1818
}
1919

20-
function ep_host_vdpa_setup()
20+
function ep_host_vdpa_common_setup()
2121
{
22-
local part=$1
22+
local driver=$1
23+
local part=$2
2324
local host_pf
2425
local vf_cnt
2526
local vf_cnt_max
2627
local sdp_vfs
2728

2829
echo "Setting up VDPA on host"
2930
modprobe vdpa
30-
modprobe vhost-vdpa
31+
if [[ "$driver" == "vhost_vdpa" ]]; then
32+
echo "Loading vhost-vdpa module"
33+
modprobe vhost-vdpa
34+
fi
35+
if [[ "$driver" == "virtio_vdpa" ]]; then
36+
echo "Loading virtio-vdpa module"
37+
modprobe virtio-vdpa
38+
fi
3139
set +e # Module may be already loaded
3240
rmmod octep_vdpa
3341
if [[ -n ${EP_HOST_MODULE_DIR:-} ]]; then
@@ -66,11 +74,34 @@ function ep_host_vdpa_setup()
6674
done
6775
set -e
6876

69-
echo "Binding $vdev to vhost_vdpa"
70-
ep_common_bind_driver vdpa $vdev vhost_vdpa
77+
echo "Binding $vdev to $driver"
78+
ep_common_bind_driver vdpa $vdev $driver
7179
done
7280
}
7381

82+
function ep_host_vdpa_setup()
83+
{
84+
ep_host_vdpa_common_setup vhost_vdpa $1
85+
}
86+
87+
function ep_host_virtio_vdpa_setup()
88+
{
89+
local host_netdev_ip_addr=$2
90+
ep_host_vdpa_common_setup virtio_vdpa $1
91+
# Once device is bound to virtio-vdpa without any issues,
92+
# linux netdev will be created
93+
sleep 2
94+
set +e # grep can return non-zero status
95+
if [[ -d /sys/class/net ]]; then
96+
for dev in /sys/class/net/*; do
97+
if [[ $(readlink $dev/device/driver | grep virtio_net) ]]; then
98+
ifconfig $(basename $dev) $host_netdev_ip_addr
99+
fi
100+
done
101+
fi
102+
set -e
103+
}
104+
74105
function ep_host_vdpa_cleanup()
75106
{
76107
echo "Cleaning up VDPA on host"
@@ -81,6 +112,22 @@ function ep_host_vdpa_cleanup()
81112
set -e
82113
}
83114

115+
function ep_host_virtio_vdpa_cleanup()
116+
{
117+
echo "Cleaning up VIRTIO-VDPA on host"
118+
set +e # Module may be already loaded
119+
for vdev in $(ls /sys/bus/vdpa/devices/);
120+
do
121+
if [[ $(readlink /sys/bus/vdpa/devices/$vdev/driver | grep virtio_vdpa) ]]; then
122+
echo $vdev > /sys/bus/vdpa/drivers/virtio_vdpa/unbind
123+
fi
124+
done
125+
rmmod octep_vdpa
126+
rmmod virtio-vdpa
127+
rmmod vdpa
128+
set -e
129+
}
130+
84131
EP_SCP_CMD=${EP_SCP_CMD:-"scp -o LogLevel=ERROR -o ServerAliveInterval=30 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"}
85132
EP_GUEST_DIR="/root/hostshare"
86133
EP_GUEST_SHARE_DIR=$EP_DIR/guest

ci/test/dao-test/virtio/l2fwd/meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ tests = [
88
['virtio_l2fwd_multiseg', 'virtio_l2fwd_1c.sh', ''],
99
['virtio_l2fwd_guest_1c', 'virtio_l2fwd_1c.sh', ''],
1010
['virtio_l2fwd_perf', 'virtio_l2fwd_perf.sh', ''],
11+
['virtio_l2fwd_host_net_1c', 'virtio_l2fwd_1c.sh', ''],
1112
]
1213

1314
test_dir = meson.current_build_dir()

ci/test/dao-test/virtio/l2fwd/virtio_l2fwd_1c.sh

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,4 +212,102 @@ function virtio_l2fwd_guest_1c()
212212
return $k
213213
}
214214

215+
function virtio_l2fwd_host_net_1c_run()
216+
{
217+
local l2fwd_pfx=${DAO_TEST}
218+
local host_netdev_pfx=${DAO_TEST}_host_netdev
219+
local l2fwd_out=virtio_l2fwd.${l2fwd_pfx}.out
220+
local npa_pf=$(ep_device_get_unused_npa_pf)
221+
local ep_device_dtap_addr=20.20.20.2
222+
local ep_host_ip_addr=20.20.20.1
223+
#TODO:
224+
#Some PMDs need to allocate buffers that as large as the packet size
225+
#to receive jumbo packets. Therefore, verify up to 1500, which falls
226+
#with in the range of the default mbuf data
227+
pkt_sizes=(64 1000 1500)
228+
local app_args
229+
local cidr=24
230+
local ping_out
231+
local count=60
232+
local k=0
233+
234+
if [ -z "${1:-}" ]; then
235+
ff_enable=""
236+
else
237+
ff_enable=$1
238+
fi
239+
240+
l2fwd_register_sig_handler ${DAO_TEST} $host_netdev_pfx $l2fwd_out
241+
242+
ep_common_bind_driver pci $npa_pf vfio-pci
243+
244+
# Launch virtio l2fwd without cgx loopback
245+
app_args="-p 0x1 -v 0x1 -P $ff_enable"
246+
if ! l2fwd_app_launch_with_tap_dev $npa_pf $l2fwd_pfx $l2fwd_out "4-7" "$app_args"; then
247+
echo "Failed to launch virtio l2fwd"
248+
249+
# Quit l2fwd app
250+
l2fwd_app_quit $l2fwd_pfx $l2fwd_out
251+
252+
# Unbind NPA device
253+
ep_common_unbind_driver pci $npa_pf vfio-pci
254+
255+
return 1
256+
fi
257+
258+
echo "Configuring TAP interface on EP device"
259+
#By default, Linux interfaces are named dtapX
260+
ep_device_configure_tap_iface dtap0 $ep_device_dtap_addr/$cidr
261+
262+
ep_host_op virtio_vdpa_setup $(ep_device_get_part) $ep_host_ip_addr/$cidr
263+
264+
echo "Verifying ping"
265+
for pkt_size in "${pkt_sizes[@]}"
266+
do
267+
ping_out=$(ping -c $count -s $pkt_size -i 0.2 \
268+
-I $ep_device_dtap_addr $ep_host_ip_addr || true)
269+
if [[ -n $(echo $ping_out | grep ", 0% packet loss,") ]]; then
270+
echo "$pkt_size packet size ping test SUCCESS"
271+
else
272+
echo "$pkt_size packet size ping FAILED"
273+
echo "stopping test execution"
274+
k=1
275+
break
276+
fi
277+
sleep 1
278+
done
279+
280+
echo "virtio_vdpa_cleanup"
281+
ep_host_op virtio_vdpa_cleanup
282+
283+
# Quit l2fwd app
284+
l2fwd_app_quit $l2fwd_pfx $l2fwd_out
285+
286+
#Unbind NPA device
287+
ep_common_unbind_driver pci $npa_pf vfio-pci
288+
289+
return $k
290+
}
291+
292+
function virtio_l2fwd_host_net_1c()
293+
{
294+
local k
295+
296+
virtio_l2fwd_host_net_1c_run
297+
k=$?
298+
if [[ "$k" != "0" ]]; then
299+
echo ${DAO_TEST}" FF Test FAILED"
300+
return $k
301+
fi
302+
303+
virtio_l2fwd_host_net_1c_run -f
304+
k=$?
305+
if [[ "$k" != "0" ]]; then
306+
echo ${DAO_TEST}" NO_FF Test FAILED "
307+
return $k
308+
fi
309+
310+
echo ${DAO_TEST}" Test PASSED"
311+
}
312+
215313
test_run ${DAO_TEST} 2

ci/test/dao-test/virtio/l2fwd/virtio_l2fwd_utils.sh

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,40 @@ function l2fwd_register_sig_handler()
352352
trap "l2fwd_sig_handler EXIT $pfx $tpmd_pfx $dev_log" EXIT
353353
}
354354

355+
function l2fwd_app_launch_with_tap_dev()
356+
{
357+
local interface=$1
358+
local l2fwd_pfx=$2
359+
local l2fwd_out=$3
360+
local cores="$4"
361+
local app_args="$5"
362+
local dpi_vfs=$(ep_common_pcie_addr_get $PCI_DEVID_CN10K_RVU_DPI_VF 22)
363+
local eal_args=$(form_split_args "-a" $dpi_vfs)
364+
local args="-l $cores --vdev=net_tap0 -a $interface $eal_args -- $app_args"
365+
local unbuffer
366+
367+
unbuffer="$(command -v stdbuf) -o 0" || unbuffer=
368+
rm -rf $l2fwd_out
369+
echo "VIRTIO_L2FWD: $l2fwd_pfx: Launching dao-virtio-l2fwd"
370+
echo "Args: '$args'"
371+
372+
$unbuffer $VIRTIO_L2FWD --file-prefix $l2fwd_pfx $args &>$l2fwd_out 2>&1 &
373+
374+
# Wait for virtio_l2fwd to be up
375+
local itr=0
376+
377+
while ! (tail -n20 $l2fwd_out | grep -q "VIRTIO_L2FWD: Entering .* main loop"); do
378+
sleep 1
379+
itr=$((itr + 1))
380+
if [[ itr -eq 10 ]]; then
381+
echo "Timeout waiting for virtio-l2fwd";
382+
cat $l2fwd_out
383+
return 1;
384+
fi
385+
echo "Waiting for virtio-l2fwd to be up"
386+
done
387+
}
388+
355389
function l2fwd_app_launch()
356390
{
357391
local interface=$1

ci/test/ep/virtio_setup.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ function dao_virtio_cleanup()
1717
device_part=$(ep_device_op get_part)
1818
echo "Cleaning up VDPA on host"
1919
ep_host_op vdpa_cleanup $device_part
20+
ep_host_op virtio_vdpa_cleanup
2021
fi
2122

2223
ep_host_op safe_kill $EP_DIR

0 commit comments

Comments
 (0)