1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4# This assumes running on a host with two virtio interfaces connected 5# back to back. Example script to do such wire-up of tap devices would 6# look like this: 7# 8# ======================================================================================================= 9# #!/bin/bash 10# 11# DEV1="$1" 12# DEV2="$2" 13# 14# sudo tc qdisc add dev $DEV1 clsact 15# sudo tc qdisc add dev $DEV2 clsact 16# sudo tc filter add dev $DEV1 ingress protocol all pref 1 matchall action mirred egress redirect dev $DEV2 17# sudo tc filter add dev $DEV2 ingress protocol all pref 1 matchall action mirred egress redirect dev $DEV1 18# sudo ip link set $DEV1 up 19# sudo ip link set $DEV2 up 20# ======================================================================================================= 21 22REQUIRE_MZ="no" 23NETIF_CREATE="no" 24NETIF_FIND_DRIVER="virtio_net" 25NUM_NETIFS=2 26 27H1_IPV4="192.0.2.1" 28H2_IPV4="192.0.2.2" 29H1_IPV6="2001:db8:1::1" 30H2_IPV6="2001:db8:1::2" 31 32VIRTIO_NET_F_MAC=5 33 34virtio_device_get() 35{ 36 local dev=$1; shift 37 local device_path="/sys/class/net/$dev/device/" 38 39 basename `realpath $device_path` 40} 41 42virtio_device_rebind() 43{ 44 local dev=$1; shift 45 local device=`virtio_device_get $dev` 46 47 echo "$device" > /sys/bus/virtio/drivers/virtio_net/unbind 48 echo "$device" > /sys/bus/virtio/drivers/virtio_net/bind 49} 50 51virtio_debugfs_get() 52{ 53 local dev=$1; shift 54 local device=`virtio_device_get $dev` 55 56 echo /sys/kernel/debug/virtio/$device/ 57} 58 59check_virtio_debugfs() 60{ 61 local dev=$1; shift 62 local debugfs=`virtio_debugfs_get $dev` 63 64 if [ ! -f "$debugfs/device_features" ] || 65 [ ! -f "$debugfs/filter_feature_add" ] || 66 [ ! -f "$debugfs/filter_feature_del" ] || 67 [ ! -f "$debugfs/filter_features" ] || 68 [ ! -f "$debugfs/filter_features_clear" ]; then 69 echo "SKIP: not possible to access debugfs for $dev" 70 exit $ksft_skip 71 fi 72} 73 74virtio_feature_present() 75{ 76 local dev=$1; shift 77 local feature=$1; shift 78 local debugfs=`virtio_debugfs_get $dev` 79 80 cat $debugfs/device_features |grep "^$feature$" &> /dev/null 81 return $? 82} 83 84virtio_filter_features_clear() 85{ 86 local dev=$1; shift 87 local debugfs=`virtio_debugfs_get $dev` 88 89 echo "1" > $debugfs/filter_features_clear 90} 91 92virtio_filter_feature_add() 93{ 94 local dev=$1; shift 95 local feature=$1; shift 96 local debugfs=`virtio_debugfs_get $dev` 97 98 echo "$feature" > $debugfs/filter_feature_add 99} 100