0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 ksft_skip=4
0013
0014
0015
0016
0017 kci_net_start()
0018 {
0019 netdev=$1
0020
0021 ip link show "$netdev" |grep -q UP
0022 if [ $? -eq 0 ];then
0023 echo "SKIP: $netdev: interface already up"
0024 return $ksft_skip
0025 fi
0026
0027 ip link set "$netdev" up
0028 if [ $? -ne 0 ];then
0029 echo "FAIL: $netdev: Fail to up interface"
0030 return 1
0031 else
0032 echo "PASS: $netdev: set interface up"
0033 NETDEV_STARTED=1
0034 fi
0035 return 0
0036 }
0037
0038
0039
0040
0041 kci_net_setup()
0042 {
0043 netdev=$1
0044
0045
0046 if [ $NETDEV_STARTED -eq 0 ];then
0047 return 0
0048 fi
0049
0050 MACADDR='02:03:04:05:06:07'
0051 ip link set dev $netdev address "$MACADDR"
0052 if [ $? -ne 0 ];then
0053 echo "FAIL: $netdev: Cannot set MAC address"
0054 else
0055 ip link show $netdev |grep -q "$MACADDR"
0056 if [ $? -eq 0 ];then
0057 echo "PASS: $netdev: set MAC address"
0058 else
0059 echo "FAIL: $netdev: Cannot set MAC address"
0060 fi
0061 fi
0062
0063
0064 ip address show "$netdev" |grep '^[[:space:]]*inet'
0065 if [ $? -eq 0 ];then
0066 echo "SKIP: $netdev: already have an IP"
0067 return $ksft_skip
0068 fi
0069
0070
0071 echo "SKIP: $netdev: set IP address"
0072 return $ksft_skip
0073 }
0074
0075
0076
0077
0078
0079 kci_netdev_ethtool_test()
0080 {
0081 if [ $
0082 echo "SKIP: $netdev: ethtool: invalid number of arguments"
0083 return 1
0084 fi
0085 $3 >/dev/null
0086 ret=$?
0087 if [ $ret -ne 0 ];then
0088 if [ $ret -eq "$1" ];then
0089 echo "SKIP: $netdev: ethtool $2 not supported"
0090 return $ksft_skip
0091 else
0092 echo "FAIL: $netdev: ethtool $2"
0093 return 1
0094 fi
0095 else
0096 echo "PASS: $netdev: ethtool $2"
0097 fi
0098 return 0
0099 }
0100
0101
0102
0103 kci_netdev_ethtool()
0104 {
0105 netdev=$1
0106
0107
0108 ethtool --version 2>/dev/null >/dev/null
0109 if [ $? -ne 0 ];then
0110 echo "SKIP: ethtool not present"
0111 return $ksft_skip
0112 fi
0113
0114 TMP_ETHTOOL_FEATURES="$(mktemp)"
0115 if [ ! -e "$TMP_ETHTOOL_FEATURES" ];then
0116 echo "SKIP: Cannot create a tmp file"
0117 return 1
0118 fi
0119
0120 ethtool -k "$netdev" > "$TMP_ETHTOOL_FEATURES"
0121 if [ $? -ne 0 ];then
0122 echo "FAIL: $netdev: ethtool list features"
0123 rm "$TMP_ETHTOOL_FEATURES"
0124 return 1
0125 fi
0126 echo "PASS: $netdev: ethtool list features"
0127
0128 rm "$TMP_ETHTOOL_FEATURES"
0129
0130 kci_netdev_ethtool_test 74 'dump' "ethtool -d $netdev"
0131 kci_netdev_ethtool_test 94 'stats' "ethtool -S $netdev"
0132 return 0
0133 }
0134
0135
0136
0137 kci_netdev_stop()
0138 {
0139 netdev=$1
0140
0141 if [ $NETDEV_STARTED -eq 0 ];then
0142 echo "SKIP: $netdev: interface kept up"
0143 return 0
0144 fi
0145
0146 ip link set "$netdev" down
0147 if [ $? -ne 0 ];then
0148 echo "FAIL: $netdev: stop interface"
0149 return 1
0150 fi
0151 echo "PASS: $netdev: stop interface"
0152 return 0
0153 }
0154
0155
0156
0157 kci_test_netdev()
0158 {
0159 NETDEV_STARTED=0
0160 IFACE_TO_UPDOWN="$1"
0161 IFACE_TO_TEST="$1"
0162
0163 MASTER_IFACE="$(echo $1 | cut -d@ -f2)"
0164 if [ ! -z "$MASTER_IFACE" ];then
0165 IFACE_TO_UPDOWN="$MASTER_IFACE"
0166 IFACE_TO_TEST="$(echo $1 | cut -d@ -f1)"
0167 fi
0168
0169 NETDEV_STARTED=0
0170 kci_net_start "$IFACE_TO_UPDOWN"
0171
0172 kci_net_setup "$IFACE_TO_TEST"
0173
0174 kci_netdev_ethtool "$IFACE_TO_TEST"
0175
0176 kci_netdev_stop "$IFACE_TO_UPDOWN"
0177 return 0
0178 }
0179
0180
0181 if [ "$(id -u)" -ne 0 ];then
0182 echo "SKIP: Need root privileges"
0183 exit $ksft_skip
0184 fi
0185
0186 ip link show 2>/dev/null >/dev/null
0187 if [ $? -ne 0 ];then
0188 echo "SKIP: Could not run test without the ip tool"
0189 exit $ksft_skip
0190 fi
0191
0192 TMP_LIST_NETDEV="$(mktemp)"
0193 if [ ! -e "$TMP_LIST_NETDEV" ];then
0194 echo "FAIL: Cannot create a tmp file"
0195 exit 1
0196 fi
0197
0198 ip link show |grep '^[0-9]' | grep -oE '[[:space:]].*eth[0-9]*:|[[:space:]].*enp[0-9]s[0-9]:' | cut -d\ -f2 | cut -d: -f1> "$TMP_LIST_NETDEV"
0199 while read netdev
0200 do
0201 kci_test_netdev "$netdev"
0202 done < "$TMP_LIST_NETDEV"
0203
0204 rm "$TMP_LIST_NETDEV"
0205 exit 0