]> git.itanic.dy.fi Git - linux-stable/commitdiff
selftests: forwarding: ethtool_mm: support devices with higher rx-min-frag-size
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 19 Dec 2023 10:57:56 +0000 (12:57 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 23 Dec 2023 01:01:19 +0000 (01:01 +0000)
Some devices have errata due to which they cannot report ETH_ZLEN (60)
in the rx-min-frag-size. This was foreseen of course, and lldpad has
logic that when we request it to advertise addFragSize 0, it will round
it up to the lowest value that is _actually_ supported by the hardware.

The problem is that the selftest expects lldpad to report back to us the
same value as we requested.

Make the selftest smarter by figuring out on its own what is a
reasonable value to expect.

Cc: Shuah Khan <shuah@kernel.org>
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Tested-by: Roger Quadros <rogerq@kernel.org>
Signed-off-by: Roger Quadros <rogerq@kernel.org>
Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/forwarding/ethtool_mm.sh

index 39e736f30322aa1b89e0b603139bb5c893f35bf0..6212913f4ad1b6e6b10c9340370a632ca447d9ee 100755 (executable)
@@ -155,15 +155,48 @@ manual_failed_verification_h2_to_h1()
        manual_failed_verification $h2 $h1
 }
 
+smallest_supported_add_frag_size()
+{
+       local iface=$1
+       local rx_min_frag_size=
+
+       rx_min_frag_size=$(ethtool --json --show-mm $iface | \
+               jq '.[]."rx-min-frag-size"')
+
+       if [ $rx_min_frag_size -le 60 ]; then
+               echo 0
+       elif [ $rx_min_frag_size -le 124 ]; then
+               echo 1
+       elif [ $rx_min_frag_size -le 188 ]; then
+               echo 2
+       elif [ $rx_min_frag_size -le 252 ]; then
+               echo 3
+       else
+               echo "$iface: RX min frag size $rx_min_frag_size cannot be advertised over LLDP"
+               exit 1
+       fi
+}
+
+expected_add_frag_size()
+{
+       local iface=$1
+       local requested=$2
+       local min=$(smallest_supported_add_frag_size $iface)
+
+       [ $requested -le $min ] && echo $min || echo $requested
+}
+
 lldp_change_add_frag_size()
 {
        local add_frag_size=$1
+       local pattern=
 
        lldptool -T -i $h1 -V addEthCaps addFragSize=$add_frag_size >/dev/null
        # Wait for TLVs to be received
        sleep 2
-       lldptool -i $h2 -t -n -V addEthCaps | \
-               grep -q "Additional fragment size: $add_frag_size"
+       pattern=$(printf "Additional fragment size: %d" \
+                        $(expected_add_frag_size $h1 $add_frag_size))
+       lldptool -i $h2 -t -n -V addEthCaps | grep -q "$pattern"
 }
 
 lldp()