diff options
Diffstat (limited to 'tools/testing/selftests/tc-testing')
| -rw-r--r-- | tools/testing/selftests/tc-testing/tc-tests/filters/tests.json | 23 | ||||
| -rwxr-xr-x | tools/testing/selftests/tc-testing/tdc.py | 23 | ||||
| -rwxr-xr-x | tools/testing/selftests/tc-testing/tdc_batch.py | 62 | ||||
| -rw-r--r-- | tools/testing/selftests/tc-testing/tdc_config.py | 3 | ||||
| -rw-r--r-- | tools/testing/selftests/tc-testing/tdc_helper.py | 1 | 
5 files changed, 106 insertions, 6 deletions
| diff --git a/tools/testing/selftests/tc-testing/tc-tests/filters/tests.json b/tools/testing/selftests/tc-testing/tc-tests/filters/tests.json index c727b96a59b0..5fa02d86b35f 100644 --- a/tools/testing/selftests/tc-testing/tc-tests/filters/tests.json +++ b/tools/testing/selftests/tc-testing/tc-tests/filters/tests.json @@ -17,5 +17,26 @@          "teardown": [              "$TC qdisc del dev $DEV1 ingress"          ] +    }, +    { +        "id": "d052", +        "name": "Add 1M filters with the same action", +        "category": [ +            "filter", +            "flower" +        ], +        "setup": [ +            "$TC qdisc add dev $DEV2 ingress", +            "./tdc_batch.py $DEV2 $BATCH_FILE --share_action -n 1000000" +        ], +        "cmdUnderTest": "$TC -b $BATCH_FILE", +        "expExitCode": "0", +        "verifyCmd": "$TC actions list action gact", +        "matchPattern": "action order 0: gact action drop.*index 1 ref 1000000 bind 1000000", +        "matchCount": "1", +        "teardown": [ +            "$TC qdisc del dev $DEV2 ingress", +            "/bin/rm $BATCH_FILE" +        ]      } -]
\ No newline at end of file +] diff --git a/tools/testing/selftests/tc-testing/tdc.py b/tools/testing/selftests/tc-testing/tdc.py index cd61b7844c0d..b8462e1b74f9 100755 --- a/tools/testing/selftests/tc-testing/tdc.py +++ b/tools/testing/selftests/tc-testing/tdc.py @@ -1,4 +1,5 @@  #!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0  """  tdc.py - Linux tc (Traffic Control) unit test driver @@ -88,7 +89,7 @@ def prepare_env(cmdlist):              exit(1) -def test_runner(filtered_tests): +def test_runner(filtered_tests, args):      """      Driver function for the unit tests. @@ -105,6 +106,8 @@ def test_runner(filtered_tests):      for tidx in testlist:          result = True          tresult = "" +        if "flower" in tidx["category"] and args.device == None: +            continue          print("Test " + tidx["id"] + ": " + tidx["name"])          prepare_env(tidx["setup"])          (p, procout) = exec_cmd(tidx["cmdUnderTest"]) @@ -150,7 +153,11 @@ def ns_create():          exec_cmd(cmd, False)          cmd = 'ip link set $DEV0 up'          exec_cmd(cmd, False) -        cmd = 'ip -s $NS link set $DEV1 up' +        cmd = 'ip -n $NS link set $DEV1 up' +        exec_cmd(cmd, False) +        cmd = 'ip link set $DEV2 netns $NS' +        exec_cmd(cmd, False) +        cmd = 'ip -n $NS link set $DEV2 up'          exec_cmd(cmd, False) @@ -211,7 +218,8 @@ def set_args(parser):                          help='Execute the single test case with specified ID')      parser.add_argument('-i', '--id', action='store_true', dest='gen_id',                          help='Generate ID numbers for new test cases') -    return parser +    parser.add_argument('-d', '--device', +                        help='Execute the test case in flower category')      return parser @@ -225,6 +233,8 @@ def check_default_settings(args):      if args.path != None:           NAMES['TC'] = args.path +    if args.device != None: +         NAMES['DEV2'] = args.device      if not os.path.isfile(NAMES['TC']):          print("The specified tc path " + NAMES['TC'] + " does not exist.")          exit(1) @@ -381,14 +391,17 @@ def set_operation_mode(args):              if (len(alltests) == 0):                  print("Cannot find a test case with ID matching " + target_id)                  exit(1) -        catresults = test_runner(alltests) +        catresults = test_runner(alltests, args)          print("All test results: " + "\n\n" + catresults)      elif (len(target_category) > 0): +        if (target_category == "flower") and args.device == None: +            print("Please specify a NIC device (-d) to run category flower") +            exit(1)          if (target_category not in ucat):              print("Specified category is not present in this file.")              exit(1)          else: -            catresults = test_runner(testcases[target_category]) +            catresults = test_runner(testcases[target_category], args)              print("Category " + target_category + "\n\n" + catresults)      ns_destroy() diff --git a/tools/testing/selftests/tc-testing/tdc_batch.py b/tools/testing/selftests/tc-testing/tdc_batch.py new file mode 100755 index 000000000000..707c6bfef689 --- /dev/null +++ b/tools/testing/selftests/tc-testing/tdc_batch.py @@ -0,0 +1,62 @@ +#!/usr/bin/python3 + +""" +tdc_batch.py - a script to generate TC batch file + +Copyright (C) 2017 Chris Mi <[email protected]> +""" + +import argparse + +parser = argparse.ArgumentParser(description='TC batch file generator') +parser.add_argument("device", help="device name") +parser.add_argument("file", help="batch file name") +parser.add_argument("-n", "--number", type=int, +                    help="how many lines in batch file") +parser.add_argument("-o", "--skip_sw", +                    help="skip_sw (offload), by default skip_hw", +                    action="store_true") +parser.add_argument("-s", "--share_action", +                    help="all filters share the same action", +                    action="store_true") +parser.add_argument("-p", "--prio", +                    help="all filters have different prio", +                    action="store_true") +args = parser.parse_args() + +device = args.device +file = open(args.file, 'w') + +number = 1 +if args.number: +    number = args.number + +skip = "skip_hw" +if args.skip_sw: +    skip = "skip_sw" + +share_action = "" +if args.share_action: +    share_action = "index 1" + +prio = "prio 1" +if args.prio: +    prio = "" +    if number > 0x4000: +        number = 0x4000 + +index = 0 +for i in range(0x100): +    for j in range(0x100): +        for k in range(0x100): +            mac = ("%02x:%02x:%02x" % (i, j, k)) +            src_mac = "e4:11:00:" + mac +            dst_mac = "e4:12:00:" + mac +            cmd = ("filter add dev %s %s protocol ip parent ffff: flower %s " +                   "src_mac %s dst_mac %s action drop %s" % +                   (device, prio, skip, src_mac, dst_mac, share_action)) +            file.write("%s\n" % cmd) +            index += 1 +            if index >= number: +                file.close() +                exit(0) diff --git a/tools/testing/selftests/tc-testing/tdc_config.py b/tools/testing/selftests/tc-testing/tdc_config.py index 01087375a7c3..eb188c729dd6 100644 --- a/tools/testing/selftests/tc-testing/tdc_config.py +++ b/tools/testing/selftests/tc-testing/tdc_config.py @@ -1,4 +1,5 @@  """ +# SPDX-License-Identifier: GPL-2.0  tdc_config.py - tdc user-specified values  Copyright (C) 2017 Lucas Bates <[email protected]> @@ -12,6 +13,8 @@ NAMES = {            # Name of veth devices to be created for the namespace            'DEV0': 'v0p0',            'DEV1': 'v0p1', +          'DEV2': '', +          'BATCH_FILE': './batch.txt',            # Name of the namespace to use            'NS': 'tcut'          } diff --git a/tools/testing/selftests/tc-testing/tdc_helper.py b/tools/testing/selftests/tc-testing/tdc_helper.py index c3254f861fb2..ccf2d2458703 100644 --- a/tools/testing/selftests/tc-testing/tdc_helper.py +++ b/tools/testing/selftests/tc-testing/tdc_helper.py @@ -1,4 +1,5 @@  """ +# SPDX-License-Identifier: GPL-2.0  tdc_helper.py - tdc helper functions  Copyright (C) 2017 Lucas Bates <[email protected]> |