浏览代码

selftests/bpf: check for spurious extacks from the driver

Drivers should not report errors when offload is not forced.
Check stdout and stderr for familiar messages when with no
skip flags and with skip_hw.  Check for add, replace, and
destroy.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Jakub Kicinski 7 年之前
父节点
当前提交
2fb89a38d3
共有 1 个文件被更改,包括 27 次插入0 次删除
  1. 27 0
      tools/testing/selftests/bpf/test_offload.py

+ 27 - 0
tools/testing/selftests/bpf/test_offload.py

@@ -543,6 +543,10 @@ def check_extack(output, reference, args):
 def check_extack_nsim(output, reference, args):
 def check_extack_nsim(output, reference, args):
     check_extack(output, "Error: netdevsim: " + reference, args)
     check_extack(output, "Error: netdevsim: " + reference, args)
 
 
+def check_no_extack(res, needle):
+    fail((res[1] + res[2]).count(needle) or (res[1] + res[2]).count("Warning:"),
+         "Found '%s' in command output, leaky extack?" % (needle))
+
 def check_verifier_log(output, reference):
 def check_verifier_log(output, reference):
     lines = output.split("\n")
     lines = output.split("\n")
     for l in reversed(lines):
     for l in reversed(lines):
@@ -550,6 +554,18 @@ def check_verifier_log(output, reference):
             return
             return
     fail(True, "Missing or incorrect message from netdevsim in verifier log")
     fail(True, "Missing or incorrect message from netdevsim in verifier log")
 
 
+def test_spurios_extack(sim, obj, skip_hw, needle):
+    res = sim.cls_bpf_add_filter(obj, prio=1, handle=1, skip_hw=skip_hw,
+                                 include_stderr=True)
+    check_no_extack(res, needle)
+    res = sim.cls_bpf_add_filter(obj, op="replace", prio=1, handle=1,
+                                 skip_hw=skip_hw, include_stderr=True)
+    check_no_extack(res, needle)
+    res = sim.cls_filter_op(op="delete", prio=1, handle=1, cls="bpf",
+                            include_stderr=True)
+    check_no_extack(res, needle)
+
+
 # Parse command line
 # Parse command line
 parser = argparse.ArgumentParser()
 parser = argparse.ArgumentParser()
 parser.add_argument("--log", help="output verbose log to given file")
 parser.add_argument("--log", help="output verbose log to given file")
@@ -687,6 +703,17 @@ try:
                  (j))
                  (j))
         sim.cls_filter_op(op="delete", prio=1, handle=1, cls="bpf")
         sim.cls_filter_op(op="delete", prio=1, handle=1, cls="bpf")
 
 
+    start_test("Test spurious extack from the driver...")
+    test_spurios_extack(sim, obj, False, "netdevsim")
+    test_spurios_extack(sim, obj, True, "netdevsim")
+
+    sim.set_ethtool_tc_offloads(False)
+
+    test_spurios_extack(sim, obj, False, "TC offload is disabled")
+    test_spurios_extack(sim, obj, True, "TC offload is disabled")
+
+    sim.set_ethtool_tc_offloads(True)
+
     sim.tc_flush_filters()
     sim.tc_flush_filters()
 
 
     start_test("Test TC offloads work...")
     start_test("Test TC offloads work...")