Initial commit: Linux kernel 4.19 for Unplugged OS

This commit is contained in:
ziv committed 2025-10-06 13:52:42 +00:00
commit d30235b04c
80519 files changed
+35800681

No files matched your search

+247
View File
@@ -0,0 +1,247 @@
tdc - Linux Traffic Control (tc) unit testing suite
Author: Lucas Bates - lucasb@mojatatu.com
tdc is a Python script to load tc unit tests from a separate JSON file and
execute them inside a network namespace dedicated to the task.
REQUIREMENTS
------------
* Minimum Python version of 3.4. Earlier 3.X versions may work but are not
guaranteed.
* The kernel must have network namespace support
* The kernel must have veth support available, as a veth pair is created
prior to running the tests.
* The kernel must have the appropriate infrastructure enabled to run all tdc
unit tests. See the config file in this directory for minimum required
features. As new tests will be added, config options list will be updated.
* All tc-related features being tested must be built in or available as
modules. To check what is required in current setup run:
./tdc.py -c
Note:
In the current release, tdc run will abort due to a failure in setup or
teardown commands - which includes not being able to run a test simply
because the kernel did not support a specific feature. (This will be
handled in a future version - the current workaround is to run the tests
on specific test categories that your kernel supports)
BEFORE YOU RUN
--------------
The path to the tc executable that will be most commonly tested can be defined
in the tdc_config.py file. Find the 'TC' entry in the NAMES dictionary and
define the path.
If you need to test a different tc executable on the fly, you can do so by
using the -p option when running tdc:
./tdc.py -p /path/to/tc
RUNNING TDC
-----------
To use tdc, root privileges are required. This is because the
commands being tested must be run as root. The code that enforces
execution by root uid has been moved into a plugin (see PLUGIN
ARCHITECTURE, below).
If nsPlugin is linked, all tests are executed inside a network
namespace to prevent conflicts within the host.
Running tdc without any arguments will run all tests. Refer to the section
on command line arguments for more information, or run:
./tdc.py -h
tdc will list the test names as they are being run, and print a summary in
TAP (Test Anything Protocol) format when they are done. If tests fail,
output captured from the failing test will be printed immediately following
the failed test in the TAP output.
OVERVIEW OF TDC EXECUTION
-------------------------
One run of tests is considered a "test suite" (this will be refined in the
future). A test suite has one or more test cases in it.
A test case has four stages:
- setup
- execute
- verify
- teardown
The setup and teardown stages can run zero or more commands. The setup
stage does some setup if the test needs it. The teardown stage undoes
the setup and returns the system to a "neutral" state so any other test
can be run next. These two stages require any commands run to return
success, but do not otherwise verify the results.
The execute and verify stages each run one command. The execute stage
tests the return code against one or more acceptable values. The
verify stage checks the return code for success, and also compares
the stdout with a regular expression.
Each of the commands in any stage will run in a shell instance.
USER-DEFINED CONSTANTS
----------------------
The tdc_config.py file contains multiple values that can be altered to suit
your needs. Any value in the NAMES dictionary can be altered without affecting
the tests to be run. These values are used in the tc commands that will be
executed as part of the test. More will be added as test cases require.
Example:
$TC qdisc add dev $DEV1 ingress
The NAMES values are used to substitute into the commands in the test cases.
COMMAND LINE ARGUMENTS
----------------------
Run tdc.py -h to see the full list of available arguments.
usage: tdc.py [-h] [-p PATH] [-D DIR [DIR ...]] [-f FILE [FILE ...]]
[-c [CATG [CATG ...]]] [-e ID [ID ...]] [-l] [-s] [-i] [-v] [-N]
[-d DEVICE] [-P] [-n] [-V]
Linux TC unit tests
optional arguments:
-h, --help show this help message and exit
-p PATH, --path PATH The full path to the tc executable to use
-v, --verbose Show the commands that are being run
-N, --notap Suppress tap results for command under test
-d DEVICE, --device DEVICE
Execute the test case in flower category
-P, --pause Pause execution just before post-suite stage
selection:
select which test cases: files plus directories; filtered by categories
plus testids
-D DIR [DIR ...], --directory DIR [DIR ...]
Collect tests from the specified directory(ies)
(default [tc-tests])
-f FILE [FILE ...], --file FILE [FILE ...]
Run tests from the specified file(s)
-c [CATG [CATG ...]], --category [CATG [CATG ...]]
Run tests only from the specified category/ies, or if
no category/ies is/are specified, list known
categories.
-e ID [ID ...], --execute ID [ID ...]
Execute the specified test cases with specified IDs
action:
select action to perform on selected test cases
-l, --list List all test cases, or those only within the
specified category
-s, --show Display the selected test cases
-i, --id Generate ID numbers for new test cases
netns:
options for nsPlugin (run commands in net namespace)
-n, --namespace
Run commands in namespace as specified in tdc_config.py
valgrind:
options for valgrindPlugin (run command under test under Valgrind)
-V, --valgrind Run commands under valgrind
PLUGIN ARCHITECTURE
-------------------
There is now a plugin architecture, and some of the functionality that
was in the tdc.py script has been moved into the plugins.
The plugins are in the directory plugin-lib. The are executed from
directory plugins. Put symbolic links from plugins to plugin-lib,
and name them according to the order you want them to run.
Example:
bjb@bee:~/work/tc-testing$ ls -l plugins
total 4
lrwxrwxrwx 1 bjb bjb 27 Oct 4 16:12 10-rootPlugin.py -> ../plugin-lib/rootPlugin.py
lrwxrwxrwx 1 bjb bjb 25 Oct 12 17:55 20-nsPlugin.py -> ../plugin-lib/nsPlugin.py
-rwxr-xr-x 1 bjb bjb 0 Sep 29 15:56 __init__.py
The plugins are a subclass of TdcPlugin, defined in TdcPlugin.py and
must be called "SubPlugin" so tdc can find them. They are
distinguished from each other in the python program by their module
name.
This base class supplies "hooks" to run extra functions. These hooks are as follows:
pre- and post-suite
pre- and post-case
pre- and post-execute stage
adjust-command (runs in all stages and receives the stage name)
The pre-suite hook receives the number of tests and an array of test ids.
This allows you to dump out the list of skipped tests in the event of a
failure during setup or teardown stage.
The pre-case hook receives the ordinal number and test id of the current test.
The adjust-command hook receives the stage id (see list below) and the
full command to be executed. This allows for last-minute adjustment
of the command.
The stages are identified by the following strings:
- pre (pre-suite)
- setup
- command
- verify
- teardown
- post (post-suite)
To write a plugin, you need to inherit from TdcPlugin in
TdcPlugin.py. To use the plugin, you have to put the
implementation file in plugin-lib, and add a symbolic link to it from
plugins. It will be detected at run time and invoked at the
appropriate times. There are a few examples in the plugin-lib
directory:
- rootPlugin.py:
implements the enforcement of running as root
- nsPlugin.py:
sets up a network namespace and runs all commands in that namespace
- valgrindPlugin.py
runs each command in the execute stage under valgrind,
and checks for leaks.
This plugin will output an extra test for each test in the test file,
one is the existing output as to whether the test passed or failed,
and the other is a test whether the command leaked memory or not.
(This one is a preliminary version, it may not work quite right yet,
but the overall template is there and it should only need tweaks.)
ACKNOWLEDGEMENTS
----------------
Thanks to:
Jamal Hadi Salim, for providing valuable test cases
Keara Leibovitz, who wrote the CLI test driver that I used as a base for the
first version of the tc testing suite. This work was presented at
Netdev 1.2 Tokyo in October 2016.
Samir Hussain, for providing help while I dove into Python for the first time
and being a second eye for this code.
@@ -0,0 +1,31 @@
tc Testing Suite To-Do list:
- Determine what tc features are supported in the kernel. If features are not
present, prevent the related categories from running.
- Add support for multiple versions of tc to run successively
- Improve error messages when tdc aborts its run. Partially done - still
need to better handle problems in pre- and post-suite.
- Use python logger module for debug/verbose output
- Allow tdc to write its results to file.
Maybe use python logger module for this too.
- A better implementation of the "hooks". Currently, every plugin
will attempt to run a function at every hook point. Could be
changed so that plugin __init__ methods will register functions to
be run in the various predefined times. Then if a plugin does not
require action at a specific point, no penalty will be paid for
trying to run a function that will do nothing.
- Proper exception handling - make an exception class and use it
- a TestCase class, for easier testcase handling, searching, comparison
- a TestSuite class
and a way to configure a test suite,
to automate running multiple "test suites" with different requirements
- super simple test case example using ls, touch, etc
@@ -0,0 +1,74 @@
#!/usr/bin/env python3
class TdcPlugin:
def __init__(self):
super().__init__()
print(' -- {}.__init__'.format(self.sub_class))
def pre_suite(self, testcount, testidlist):
'''run commands before test_runner goes into a test loop'''
self.testcount = testcount
self.testidlist = testidlist
if self.args.verbose > 1:
print(' -- {}.pre_suite'.format(self.sub_class))
def post_suite(self, index):
'''run commands after test_runner completes the test loop
index is the last ordinal number of test that was attempted'''
if self.args.verbose > 1:
print(' -- {}.post_suite'.format(self.sub_class))
def pre_case(self, test_ordinal, testid):
'''run commands before test_runner does one test'''
if self.args.verbose > 1:
print(' -- {}.pre_case'.format(self.sub_class))
self.args.testid = testid
self.args.test_ordinal = test_ordinal
def post_case(self):
'''run commands after test_runner does one test'''
if self.args.verbose > 1:
print(' -- {}.post_case'.format(self.sub_class))
def pre_execute(self):
'''run command before test-runner does the execute step'''
if self.args.verbose > 1:
print(' -- {}.pre_execute'.format(self.sub_class))
def post_execute(self):
'''run command after test-runner does the execute step'''
if self.args.verbose > 1:
print(' -- {}.post_execute'.format(self.sub_class))
def adjust_command(self, stage, command):
'''adjust the command'''
if self.args.verbose > 1:
print(' -- {}.adjust_command {}'.format(self.sub_class, stage))
# if stage == 'pre':
# pass
# elif stage == 'setup':
# pass
# elif stage == 'execute':
# pass
# elif stage == 'verify':
# pass
# elif stage == 'teardown':
# pass
# elif stage == 'post':
# pass
# else:
# pass
return command
def add_args(self, parser):
'''Get the plugin args from the command line'''
self.argparser = parser
return self.argparser
def check_args(self, args, remaining):
'''Check that the args are set correctly'''
self.args = args
if self.args.verbose > 1:
print(' -- {}.check_args'.format(self.sub_class))
@@ -0,0 +1,29 @@
# SPDX-License-Identifier: GPL-2.0
APIDIR := ../../../../include/uapi
TEST_GEN_FILES = action.o
top_srcdir = ../../../../..
include ../../lib.mk
CLANG ?= clang
LLC ?= llc
PROBE := $(shell $(LLC) -march=bpf -mcpu=probe -filetype=null /dev/null 2>&1)
ifeq ($(PROBE),)
CPU ?= probe
else
CPU ?= generic
endif
CLANG_SYS_INCLUDES := $(shell $(CLANG) -v -E - </dev/null 2>&1 \
| sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }')
CLANG_FLAGS = -I. -I$(APIDIR) \
$(CLANG_SYS_INCLUDES) \
-Wno-compare-distinct-pointer-types
$(OUTPUT)/%.o: %.c
$(CLANG) $(CLANG_FLAGS) \
-O2 -target bpf -emit-llvm -c $< -o - | \
$(LLC) -march=bpf -mcpu=$(CPU) $(LLC_FLAGS) -filetype=obj -o $@
@@ -0,0 +1,23 @@
/* SPDX-License-Identifier: GPL-2.0
* Copyright (c) 2018 Davide Caratti, Red Hat inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 2 of the GNU General Public
* License as published by the Free Software Foundation.
*/
#include <linux/bpf.h>
#include <linux/pkt_cls.h>
__attribute__((section("action-ok"),used)) int action_ok(struct __sk_buff *s)
{
return TC_ACT_OK;
}
__attribute__((section("action-ko"),used)) int action_ko(struct __sk_buff *s)
{
s->data = 0x0;
return TC_ACT_OK;
}
char _license[] __attribute__((section("license"),used)) = "GPL";
+48
View File
@@ -0,0 +1,48 @@
CONFIG_NET_SCHED=y
#
# Queueing/Scheduling
#
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_SCH_INGRESS=m
#
# Classification
#
CONFIG_NET_CLS=y
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_CLS_U32_PERF=y
CONFIG_CLS_U32_MARK=y
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_STACK=32
CONFIG_NET_EMATCH_CMP=m
CONFIG_NET_EMATCH_NBYTE=m
CONFIG_NET_EMATCH_U32=m
CONFIG_NET_EMATCH_META=m
CONFIG_NET_EMATCH_TEXT=m
CONFIG_NET_EMATCH_IPSET=m
CONFIG_NET_EMATCH_IPT=m
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=m
CONFIG_NET_ACT_GACT=m
CONFIG_GACT_PROB=y
CONFIG_NET_ACT_MIRRED=m
CONFIG_NET_ACT_SAMPLE=m
CONFIG_NET_ACT_IPT=m
CONFIG_NET_ACT_NAT=m
CONFIG_NET_ACT_PEDIT=m
CONFIG_NET_ACT_SIMP=m
CONFIG_NET_ACT_SKBEDIT=m
CONFIG_NET_ACT_CSUM=m
CONFIG_NET_ACT_VLAN=m
CONFIG_NET_ACT_BPF=m
CONFIG_NET_ACT_CONNMARK=m
CONFIG_NET_ACT_SKBMOD=m
CONFIG_NET_ACT_IFE=m
CONFIG_NET_ACT_TUNNEL_KEY=m
CONFIG_NET_IFE_SKBMARK=m
CONFIG_NET_IFE_SKBPRIO=m
CONFIG_NET_IFE_SKBTCINDEX=m
CONFIG_NET_CLS_IND=y
CONFIG_NET_SCH_FIFO=y
@@ -0,0 +1,104 @@
tdc - Adding plugins for tdc
Author: Brenda J. Butler - bjb@mojatatu.com
ADDING PLUGINS
--------------
A new plugin should be written in python as a class that inherits from TdcPlugin.
There are some examples in plugin-lib.
The plugin can be used to add functionality to the test framework,
such as:
- adding commands to be run before and/or after the test suite
- adding commands to be run before and/or after the test cases
- adding commands to be run before and/or after the execute phase of the test cases
- ability to alter the command to be run in any phase:
pre (the pre-suite stage)
prepare
execute
verify
teardown
post (the post-suite stage)
- ability to add to the command line args, and use them at run time
The functions in the class should follow the following interfaces:
def __init__(self)
def pre_suite(self, testcount, testidlist) # see "PRE_SUITE" below
def post_suite(self, ordinal) # see "SKIPPING" below
def pre_case(self, test_ordinal, testid) # see "PRE_CASE" below
def post_case(self)
def pre_execute(self)
def post_execute(self)
def adjust_command(self, stage, command) # see "ADJUST" below
def add_args(self, parser) # see "ADD_ARGS" below
def check_args(self, args, remaining) # see "CHECK_ARGS" below
PRE_SUITE
This method takes a testcount (number of tests to be run) and
testidlist (array of test ids for tests that will be run). This is
useful for various things, including when an exception occurs and the
rest of the tests must be skipped. The info is stored in the object,
and the post_suite method can refer to it when dumping the "skipped"
TAP output. The tdc.py script will do that for the test suite as
defined in the test case, but if the plugin is being used to run extra
tests on each test (eg, check for memory leaks on associated
co-processes) then that other tap output can be generated in the
post-suite method using this info passed in to the pre_suite method.
SKIPPING
The post_suite method will receive the ordinal number of the last
test to be attempted. It can use this info when outputting
the TAP output for the extra test cases.
PRE_CASE
The pre_case method will receive the ordinal number of the test
and the test id. Useful for outputing the extra test results.
ADJUST
The adjust_command method receives a string representing
the execution stage and a string which is the actual command to be
executed. The plugin can adjust the command, based on the stage of
execution.
The stages are represented by the following strings:
'pre'
'setup'
'command'
'verify'
'teardown'
'post'
The adjust_command method must return the adjusted command so tdc
can use it.
ADD_ARGS
The add_args method receives the argparser object and can add
arguments to it. Care should be taken that the new arguments do not
conflict with any from tdc.py or from other plugins that will be used
concurrently.
The add_args method should return the argparser object.
CHECK_ARGS
The check_args method is so that the plugin can do validation on
the args, if needed. If there is a problem, and Exception should
be raised, with a string that explains the problem.
eg: raise Exception('plugin xxx, arg -y is wrong, fix it')
@@ -0,0 +1,100 @@
tdc - Adding test cases for tdc
Author: Lucas Bates - lucasb@mojatatu.com
ADDING TEST CASES
-----------------
User-defined tests should be added by defining a separate JSON file. This
will help prevent conflicts when updating the repository. Refer to
template.json for the required JSON format for test cases.
Include the 'id' field, but do not assign a value. Running tdc with the -i
option will generate a unique ID for that test case.
tdc will recursively search the 'tc-tests' subdirectory (or the
directories named with the -D option) for .json files. Any test case
files you create in these directories will automatically be included.
If you wish to store your custom test cases elsewhere, be sure to run
tdc with the -f argument and the path to your file, or the -D argument
and the path to your directory(ies).
Be aware of required escape characters in the JSON data - particularly
when defining the match pattern. Refer to the supplied json test files
for examples when in doubt. The match pattern is written in json, and
will be used by python. So the match pattern will be a python regular
expression, but should be written using json syntax.
TEST CASE STRUCTURE
-------------------
Each test case has required data:
id: A unique alphanumeric value to identify a particular test case
name: Descriptive name that explains the command under test
category: A list of single-word descriptions covering what the command
under test is testing. Example: filter, actions, u32, gact, etc.
setup: The list of commands required to ensure the command under test
succeeds. For example: if testing a filter, the command to create
the qdisc would appear here.
This list can be empty.
Each command can be a string to be executed, or a list consisting
of a string which is a command to be executed, followed by 1 or
more acceptable exit codes for this command.
If only a string is given for the command, then an exit code of 0
will be expected.
cmdUnderTest: The tc command being tested itself.
expExitCode: The code returned by the command under test upon its termination.
tdc will compare this value against the actual returned value.
verifyCmd: The tc command to be run to verify successful execution.
For example: if the command under test creates a gact action,
verifyCmd should be "$TC actions show action gact"
matchPattern: A regular expression to be applied against the output of the
verifyCmd to prove the command under test succeeded. This pattern
should be as specific as possible so that a false positive is not
matched.
matchCount: How many times the regex in matchPattern should match. A value
of 0 is acceptable.
teardown: The list of commands to clean up after the test is completed.
The environment should be returned to the same state as when
this test was started: qdiscs deleted, actions flushed, etc.
This list can be empty.
Each command can be a string to be executed, or a list consisting
of a string which is a command to be executed, followed by 1 or
more acceptable exit codes for this command.
If only a string is given for the command, then an exit code of 0
will be expected.
SETUP/TEARDOWN ERRORS
---------------------
If an error is detected during the setup/teardown process, execution of the
tests will immediately stop with an error message and the namespace in which
the tests are run will be destroyed. This is to prevent inaccurate results
in the test cases. tdc will output a series of TAP results for the skipped
tests.
Repeated failures of the setup/teardown may indicate a problem with the test
case, or possibly even a bug in one of the commands that are not being tested.
It's possible to include acceptable exit codes with the setup/teardown command
so that it doesn't halt the script for an error that doesn't matter. Turn the
individual command into a list, with the command being first, followed by all
acceptable exit codes for the command.
Example:
A pair of setup commands. The first can have exit code 0, 1 or 255, the
second must have exit code 0.
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
],
"$TC actions add action reclassify index 65536"
],
@@ -0,0 +1,55 @@
[
{
"id": "1f",
"name": "simple test to test framework",
"category": [
"example"
],
"setup": [
"mkdir mytest"
],
"cmdUnderTest": "touch mytest/blorfl",
"expExitCode": "0",
"verifyCmd": "ls mytest/* | grep '[b]lorfl'",
"matchPattern": "orfl",
"matchCount": "1",
"teardown": [
"rm -rf mytest"
]
},
{
"id": "2f",
"name": "simple test, no need for verify",
"category": [
"example"
],
"setup": [
"mkdir mytest",
"touch mytest/blorfl"
],
"cmdUnderTest": "ls mytest/blorfl",
"expExitCode": "0",
"verifyCmd": "/bin/true",
"matchPattern": " ",
"matchCount": "0",
"teardown": [
"rm -rf mytest"
]
},
{
"id": "3f",
"name": "simple test, no need for setup or teardown (or verify)",
"category": [
"example"
],
"setup": [
],
"cmdUnderTest": "ip l l lo",
"expExitCode": "0",
"verifyCmd": "/bin/true",
"matchPattern": " ",
"matchCount": "0",
"teardown": [
]
}
]
@@ -0,0 +1,51 @@
[
{
"id": "",
"name": "",
"category": [
"",
""
],
"setup": [
""
],
"cmdUnderTest": "",
"expExitCode": "",
"verifyCmd": "",
"matchPattern": "",
"matchCount": "",
"teardown": [
""
]
},
{
"id": "",
"name": "",
"category": [
"",
""
],
"setup": [
"",
[
"",
0,
1,
255
]
],
"cmdUnderTest": "",
"expExitCode": "",
"verifyCmd": "",
"matchPattern": "",
"matchCount": "",
"teardown": [
"",
[
"",
0,
255
]
]
}
]
@@ -0,0 +1,27 @@
tdc.py will look for plugins in a directory plugins off the cwd.
Make a set of numbered symbolic links from there to the actual plugins.
Eg:
tdc.py
plugin-lib/
plugins/
__init__.py
10-rootPlugin.py -> ../plugin-lib/rootPlugin.py
20-valgrindPlugin.py -> ../plugin-lib/valgrindPlugin.py
30-nsPlugin.py -> ../plugin-lib/nsPlugin.py
tdc.py will find them and use them.
rootPlugin
Check if the uid is root. If not, bail out.
valgrindPlugin
Run the command under test with valgrind, and produce an extra set of TAP results for the memory tests.
This plugin will write files to the cwd, called vgnd-xxx.log. These will contain
the valgrind output for test xxx. Any file matching the glob 'vgnd-*.log' will be
deleted at the end of the run.
nsPlugin
Run all the commands in a network namespace.
@@ -0,0 +1,141 @@
import os
import signal
from string import Template
import subprocess
import time
from TdcPlugin import TdcPlugin
from tdc_config import *
class SubPlugin(TdcPlugin):
def __init__(self):
self.sub_class = 'ns/SubPlugin'
super().__init__()
def pre_suite(self, testcount, testidlist):
'''run commands before test_runner goes into a test loop'''
super().pre_suite(testcount, testidlist)
if self.args.namespace:
self._ns_create()
def post_suite(self, index):
'''run commands after test_runner goes into a test loop'''
super().post_suite(index)
if self.args.verbose:
print('{}.post_suite'.format(self.sub_class))
if self.args.namespace:
self._ns_destroy()
def add_args(self, parser):
super().add_args(parser)
self.argparser_group = self.argparser.add_argument_group(
'netns',
'options for nsPlugin(run commands in net namespace)')
self.argparser_group.add_argument(
'-n', '--namespace', action='store_true',
help='Run commands in namespace')
return self.argparser
def adjust_command(self, stage, command):
super().adjust_command(stage, command)
cmdform = 'list'
cmdlist = list()
if not self.args.namespace:
return command
if self.args.verbose:
print('{}.adjust_command'.format(self.sub_class))
if not isinstance(command, list):
cmdform = 'str'
cmdlist = command.split()
else:
cmdlist = command
if stage == 'setup' or stage == 'execute' or stage == 'verify' or stage == 'teardown':
if self.args.verbose:
print('adjust_command: stage is {}; inserting netns stuff in command [{}] list [{}]'.format(stage, command, cmdlist))
cmdlist.insert(0, self.args.NAMES['NS'])
cmdlist.insert(0, 'exec')
cmdlist.insert(0, 'netns')
cmdlist.insert(0, 'ip')
else:
pass
if cmdform == 'str':
command = ' '.join(cmdlist)
else:
command = cmdlist
if self.args.verbose:
print('adjust_command: return command [{}]'.format(command))
return command
def _ns_create(self):
'''
Create the network namespace in which the tests will be run and set up
the required network devices for it.
'''
if self.args.namespace:
cmd = 'ip netns add {}'.format(self.args.NAMES['NS'])
self._exec_cmd('pre', cmd)
cmd = 'ip link add $DEV0 type veth peer name $DEV1'
self._exec_cmd('pre', cmd)
cmd = 'ip link set $DEV1 netns {}'.format(self.args.NAMES['NS'])
self._exec_cmd('pre', cmd)
cmd = 'ip link set $DEV0 up'
self._exec_cmd('pre', cmd)
cmd = 'ip -n {} link set $DEV1 up'.format(self.args.NAMES['NS'])
self._exec_cmd('pre', cmd)
if self.args.device:
cmd = 'ip link set $DEV2 netns {}'.format(self.args.NAMES['NS'])
self._exec_cmd('pre', cmd)
cmd = 'ip -n {} link set $DEV2 up'.format(self.args.NAMES['NS'])
self._exec_cmd('pre', cmd)
def _ns_destroy(self):
'''
Destroy the network namespace for testing (and any associated network
devices as well)
'''
if self.args.namespace:
cmd = 'ip netns delete {}'.format(self.args.NAMES['NS'])
self._exec_cmd('post', cmd)
def _exec_cmd(self, stage, command):
'''
Perform any required modifications on an executable command, then run
it in a subprocess and return the results.
'''
if '$' in command:
command = self._replace_keywords(command)
self.adjust_command(stage, command)
if self.args.verbose:
print('_exec_cmd: command "{}"'.format(command))
proc = subprocess.Popen(command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=ENVIR)
(rawout, serr) = proc.communicate()
if proc.returncode != 0 and len(serr) > 0:
foutput = serr.decode("utf-8")
else:
foutput = rawout.decode("utf-8")
proc.stdout.close()
proc.stderr.close()
return proc, foutput
def _replace_keywords(self, cmd):
"""
For a given executable command, substitute any known
variables contained within NAMES with the correct values
"""
tcmd = Template(cmd)
subcmd = tcmd.safe_substitute(self.args.NAMES)
return subcmd
@@ -0,0 +1,19 @@
import os
import sys
from TdcPlugin import TdcPlugin
from tdc_config import *
class SubPlugin(TdcPlugin):
def __init__(self):
self.sub_class = 'root/SubPlugin'
super().__init__()
def pre_suite(self, testcount, testidlist):
# run commands before test_runner goes into a test loop
super().pre_suite(testcount, testidlist)
if os.geteuid():
print('This script must be run with root privileges', file=sys.stderr)
exit(1)
@@ -0,0 +1,142 @@
'''
run the command under test, under valgrind and collect memory leak info
as a separate test.
'''
import os
import re
import signal
from string import Template
import subprocess
import time
from TdcPlugin import TdcPlugin
from tdc_config import *
def vp_extract_num_from_string(num_as_string_maybe_with_commas):
return int(num_as_string_maybe_with_commas.replace(',',''))
class SubPlugin(TdcPlugin):
def __init__(self):
self.sub_class = 'valgrind/SubPlugin'
self.tap = ''
super().__init__()
def pre_suite(self, testcount, testidlist):
'''run commands before test_runner goes into a test loop'''
super().pre_suite(testcount, testidlist)
if self.args.verbose > 1:
print('{}.pre_suite'.format(self.sub_class))
if self.args.valgrind:
self._add_to_tap('1..{}\n'.format(self.testcount))
def post_suite(self, index):
'''run commands after test_runner goes into a test loop'''
super().post_suite(index)
self._add_to_tap('\n|---\n')
if self.args.verbose > 1:
print('{}.post_suite'.format(self.sub_class))
print('{}'.format(self.tap))
if self.args.verbose < 4:
subprocess.check_output('rm -f vgnd-*.log', shell=True)
def add_args(self, parser):
super().add_args(parser)
self.argparser_group = self.argparser.add_argument_group(
'valgrind',
'options for valgrindPlugin (run command under test under Valgrind)')
self.argparser_group.add_argument(
'-V', '--valgrind', action='store_true',
help='Run commands under valgrind')
return self.argparser
def adjust_command(self, stage, command):
super().adjust_command(stage, command)
cmdform = 'list'
cmdlist = list()
if not self.args.valgrind:
return command
if self.args.verbose > 1:
print('{}.adjust_command'.format(self.sub_class))
if not isinstance(command, list):
cmdform = 'str'
cmdlist = command.split()
else:
cmdlist = command
if stage == 'execute':
if self.args.verbose > 1:
print('adjust_command: stage is {}; inserting valgrind stuff in command [{}] list [{}]'.
format(stage, command, cmdlist))
cmdlist.insert(0, '--track-origins=yes')
cmdlist.insert(0, '--show-leak-kinds=definite,indirect')
cmdlist.insert(0, '--leak-check=full')
cmdlist.insert(0, '--log-file=vgnd-{}.log'.format(self.args.testid))
cmdlist.insert(0, '-v') # ask for summary of non-leak errors
cmdlist.insert(0, ENVIR['VALGRIND_BIN'])
else:
pass
if cmdform == 'str':
command = ' '.join(cmdlist)
else:
command = cmdlist
if self.args.verbose > 1:
print('adjust_command: return command [{}]'.format(command))
return command
def post_execute(self):
if not self.args.valgrind:
return
self.definitely_lost_re = re.compile(
r'definitely lost:\s+([,0-9]+)\s+bytes in\s+([,0-9]+)\sblocks', re.MULTILINE | re.DOTALL)
self.indirectly_lost_re = re.compile(
r'indirectly lost:\s+([,0-9]+)\s+bytes in\s+([,0-9]+)\s+blocks', re.MULTILINE | re.DOTALL)
self.possibly_lost_re = re.compile(
r'possibly lost:\s+([,0-9]+)bytes in\s+([,0-9]+)\s+blocks', re.MULTILINE | re.DOTALL)
self.non_leak_error_re = re.compile(
r'ERROR SUMMARY:\s+([,0-9]+) errors from\s+([,0-9]+)\s+contexts', re.MULTILINE | re.DOTALL)
def_num = 0
ind_num = 0
pos_num = 0
nle_num = 0
# what about concurrent test runs? Maybe force them to be in different directories?
with open('vgnd-{}.log'.format(self.args.testid)) as vfd:
content = vfd.read()
def_mo = self.definitely_lost_re.search(content)
ind_mo = self.indirectly_lost_re.search(content)
pos_mo = self.possibly_lost_re.search(content)
nle_mo = self.non_leak_error_re.search(content)
if def_mo:
def_num = int(def_mo.group(2))
if ind_mo:
ind_num = int(ind_mo.group(2))
if pos_mo:
pos_num = int(pos_mo.group(2))
if nle_mo:
nle_num = int(nle_mo.group(1))
mem_results = ''
if (def_num > 0) or (ind_num > 0) or (pos_num > 0) or (nle_num > 0):
mem_results += 'not '
mem_results += 'ok {} - {}-mem # {}\n'.format(
self.args.test_ordinal, self.args.testid, 'memory leak check')
self._add_to_tap(mem_results)
if mem_results.startswith('not '):
print('{}'.format(content))
self._add_to_tap(content)
def _add_to_tap(self, more_tap_output):
self.tap += more_tap_output
Whitespace-only changes.
@@ -0,0 +1,294 @@
[
{
"id": "d959",
"name": "Add cBPF action with valid bytecode",
"category": [
"actions",
"bpf"
],
"setup": [
[
"$TC action flush action bpf",
0,
1,
255
]
],
"cmdUnderTest": "$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 2048,6 0 0 262144,6 0 0 0' index 100",
"expExitCode": "0",
"verifyCmd": "$TC action get action bpf index 100",
"matchPattern": "action order [0-9]*: bpf bytecode '4,40 0 0 12,21 0 1 2048,6 0 0 262144,6 0 0 0' default-action pipe.*index 100 ref",
"matchCount": "1",
"teardown": [
"$TC action flush action bpf"
]
},
{
"id": "f84a",
"name": "Add cBPF action with invalid bytecode",
"category": [
"actions",
"bpf"
],
"setup": [
[
"$TC actions flush action bpf",
0,
1,
255
]
],
"cmdUnderTest": "$TC action add action bpf bytecode '4,40 0 0 12,31 0 1 2048,6 0 0 262144,6 0 0 0' index 100",
"expExitCode": "255",
"verifyCmd": "$TC action get action bpf index 100",
"matchPattern": "action order [0-9]*: bpf bytecode '4,40 0 0 12,31 0 1 2048,6 0 0 262144,6 0 0 0' default-action pipe.*index 100 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action bpf"
]
},
{
"id": "e939",
"name": "Add eBPF action with valid object-file",
"category": [
"actions",
"bpf"
],
"setup": [
"make -C bpf",
[
"$TC action flush action bpf",
0,
1,
255
]
],
"cmdUnderTest": "$TC action add action bpf object-file $EBPFDIR/action.o section action-ok index 667",
"expExitCode": "0",
"verifyCmd": "$TC action get action bpf index 667",
"matchPattern": "action order [0-9]*: bpf action.o:\\[action-ok\\] id [0-9]* tag [0-9a-f]{16}( jited)? default-action pipe.*index 667 ref",
"matchCount": "1",
"teardown": [
"$TC action flush action bpf",
"make -C bpf clean"
]
},
{
"id": "282d",
"name": "Add eBPF action with invalid object-file",
"category": [
"actions",
"bpf"
],
"setup": [
"make -C bpf",
[
"$TC action flush action bpf",
0,
1,
255
]
],
"cmdUnderTest": "$TC action add action bpf object-file $EBPFDIR/action.o section action-ko index 667",
"expExitCode": "255",
"verifyCmd": "$TC action get action bpf index 667",
"matchPattern": "action order [0-9]*: bpf action.o:\\[action-ko\\] id [0-9].*index 667 ref",
"matchCount": "0",
"teardown": [
[
"$TC action flush action bpf",
0,
1,
255
],
"make -C bpf clean"
]
},
{
"id": "d819",
"name": "Replace cBPF bytecode and action control",
"category": [
"actions",
"bpf"
],
"setup": [
[
"$TC actions flush action bpf",
0,
1,
255
],
[
"$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 2048,6 0 0 262144,6 0 0 0' index 555",
0,
1,
255
]
],
"cmdUnderTest": "$TC action replace action bpf bytecode '4,40 0 0 12,21 0 1 2054,6 0 0 262144,6 0 0 0' drop index 555",
"expExitCode": "0",
"verifyCmd": "$TC action get action bpf index 555",
"matchPattern": "action order [0-9]*: bpf bytecode '4,40 0 0 12,21 0 1 2054,6 0 0 262144,6 0 0 0' default-action drop.*index 555 ref",
"matchCount": "1",
"teardown": [
"$TC action flush action bpf"
]
},
{
"id": "6ae3",
"name": "Delete cBPF action ",
"category": [
"actions",
"bpf"
],
"setup": [
[
"$TC actions flush action bpf",
0,
1,
255
],
[
"$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 2048,6 0 0 262144,6 0 0 0' index 444",
0,
1,
255
]
],
"cmdUnderTest": "$TC action delete action bpf index 444",
"expExitCode": "0",
"verifyCmd": "$TC action get action bpf index 444",
"matchPattern": "action order [0-9]*: bpf bytecode '4,40 0 0 12,21 0 1 2048,6 0 0 262144,6 0 0 0' default-action pipe.*index 444 ref",
"matchCount": "0",
"teardown": [
"$TC action flush action bpf"
]
},
{
"id": "3e0d",
"name": "List cBPF actions",
"category": [
"actions",
"bpf"
],
"setup": [
[
"$TC action flush action bpf",
0,
1,
255
],
"$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 2048,6 0 0 262144,6 0 0 0' ok index 101",
"$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 2054,6 0 0 262144,6 0 0 0' drop index 102",
"$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 33024,6 0 0 262144,6 0 0 0' continue index 103"
],
"cmdUnderTest": "$TC action list action bpf",
"expExitCode": "0",
"verifyCmd": "$TC action list action bpf",
"matchPattern": "action order [0-9]*: bpf bytecode",
"matchCount": "3",
"teardown": [
"$TC actions flush action bpf"
]
},
{
"id": "55ce",
"name": "Flush BPF actions",
"category": [
"actions",
"bpf"
],
"setup": [
[
"$TC actions flush action bpf",
0,
1,
255
],
"$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 2048,6 0 0 262144,6 0 0 0' ok index 101",
"$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 2054,6 0 0 262144,6 0 0 0' drop index 102",
"$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 33024,6 0 0 262144,6 0 0 0' continue index 103"
],
"cmdUnderTest": "$TC action flush action bpf",
"expExitCode": "0",
"verifyCmd": "$TC action list action bpf",
"matchPattern": "action order [0-9]*: bpf bytecode",
"matchCount": "0",
"teardown": [
"$TC actions flush action bpf"
]
},
{
"id": "ccc3",
"name": "Add cBPF action with duplicate index",
"category": [
"actions",
"bpf"
],
"setup": [
[
"$TC actions flush action bpf",
0,
1,
255
],
"$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 2048,6 0 0 262144,6 0 0 0' index 4294967295"
],
"cmdUnderTest": "$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 2054,6 0 0 262144,6 0 0 0' index 4294967295",
"expExitCode": "255",
"verifyCmd": "$TC action get action bpf index 4294967295",
"matchPattern": "action order [0-9]*: bpf bytecode '4,40 0 0 12,21 0 1 2048,6 0 0 262144,6 0 0 0' default-action pipe.*index 4294967295",
"matchCount": "1",
"teardown": [
"$TC action flush action bpf"
]
},
{
"id": "89c7",
"name": "Add cBPF action with invalid index",
"category": [
"actions",
"bpf"
],
"setup": [
[
"$TC actions flush action bpf",
0,
1,
255
]
],
"cmdUnderTest": "$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 2054,6 0 0 262144,6 0 0 0' index 4294967296 cookie 12345",
"expExitCode": "255",
"verifyCmd": "$TC action ls action bpf",
"matchPattern": "action order [0-9]*: bpf bytecode '4,40 0 0 12,21 0 1 2048,6 0 0 262144,6 0 0 0' default-action pipe.*cookie 12345",
"matchCount": "0",
"teardown": [
"$TC action flush action bpf"
]
},
{
"id": "7ab9",
"name": "Add cBPF action with cookie",
"category": [
"actions",
"bpf"
],
"setup": [
[
"$TC actions flush action bpf",
0,
1,
255
]
],
"cmdUnderTest": "$TC action add action bpf bytecode '4,40 0 0 12,21 0 1 2054,6 0 0 262144,6 0 0 0' cookie d0d0d0d0d0d0d0d0",
"expExitCode": "0",
"verifyCmd": "$TC action list action bpf",
"matchPattern": "action order [0-9]*: bpf.*cookie d0d0d0d0d0d0d0",
"matchCount": "1",
"teardown": [
"$TC action flush action bpf"
]
}
]
@@ -0,0 +1,291 @@
[
{
"id": "2002",
"name": "Add valid connmark action with defaults",
"category": [
"actions",
"connmark"
],
"setup": [
[
"$TC actions flush action connmark",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action connmark",
"expExitCode": "0",
"verifyCmd": "$TC actions list action connmark",
"matchPattern": "action order [0-9]+: connmark zone 0 pipe",
"matchCount": "1",
"teardown": [
"$TC actions flush action connmark"
]
},
{
"id": "56a5",
"name": "Add valid connmark action with control pass",
"category": [
"actions",
"connmark"
],
"setup": [
[
"$TC actions flush action connmark",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action connmark pass index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action connmark index 1",
"matchPattern": "action order [0-9]+: connmark zone 0 pass.*index 1 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action connmark"
]
},
{
"id": "7c66",
"name": "Add valid connmark action with control drop",
"category": [
"actions",
"connmark"
],
"setup": [
[
"$TC actions flush action connmark",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action connmark drop index 100",
"expExitCode": "0",
"verifyCmd": "$TC actions get action connmark index 100",
"matchPattern": "action order [0-9]+: connmark zone 0 drop.*index 100 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action connmark"
]
},
{
"id": "a913",
"name": "Add valid connmark action with control pipe",
"category": [
"actions",
"connmark"
],
"setup": [
[
"$TC actions flush action connmark",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action connmark pipe index 455",
"expExitCode": "0",
"verifyCmd": "$TC actions get action connmark index 455",
"matchPattern": "action order [0-9]+: connmark zone 0 pipe.*index 455 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action connmark"
]
},
{
"id": "bdd8",
"name": "Add valid connmark action with control reclassify",
"category": [
"actions",
"connmark"
],
"setup": [
[
"$TC actions flush action connmark",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action connmark reclassify index 7",
"expExitCode": "0",
"verifyCmd": "$TC actions list action connmark",
"matchPattern": "action order [0-9]+: connmark zone 0 reclassify.*index 7 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action connmark"
]
},
{
"id": "b8be",
"name": "Add valid connmark action with control continue",
"category": [
"actions",
"connmark"
],
"setup": [
[
"$TC actions flush action connmark",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action connmark continue index 17",
"expExitCode": "0",
"verifyCmd": "$TC actions list action connmark",
"matchPattern": "action order [0-9]+: connmark zone 0 continue.*index 17 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action connmark"
]
},
{
"id": "d8a6",
"name": "Add valid connmark action with control jump",
"category": [
"actions",
"connmark"
],
"setup": [
[
"$TC actions flush action connmark",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action connmark jump 10 index 17",
"expExitCode": "0",
"verifyCmd": "$TC actions list action connmark",
"matchPattern": "action order [0-9]+: connmark zone 0 jump 10.*index 17 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action connmark"
]
},
{
"id": "aae8",
"name": "Add valid connmark action with zone argument",
"category": [
"actions",
"connmark"
],
"setup": [
[
"$TC actions flush action connmark",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action connmark zone 100 pipe index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action connmark index 1",
"matchPattern": "action order [0-9]+: connmark zone 100 pipe.*index 1 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action connmark"
]
},
{
"id": "2f0b",
"name": "Add valid connmark action with invalid zone argument",
"category": [
"actions",
"connmark"
],
"setup": [
[
"$TC actions flush action connmark",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action connmark zone 65536 reclassify index 21",
"expExitCode": "255",
"verifyCmd": "$TC actions get action connmark index 1",
"matchPattern": "action order [0-9]+: connmark zone 65536 reclassify.*index 21 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action connmark"
]
},
{
"id": "9305",
"name": "Add connmark action with unsupported argument",
"category": [
"actions",
"connmark"
],
"setup": [
[
"$TC actions flush action connmark",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action connmark zone 655 unsupp_arg pass index 2",
"expExitCode": "255",
"verifyCmd": "$TC actions get action connmark index 2",
"matchPattern": "action order [0-9]+: connmark zone 655 unsupp_arg pass.*index 2 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action connmark"
]
},
{
"id": "71ca",
"name": "Add valid connmark action and replace it",
"category": [
"actions",
"connmark"
],
"setup": [
[
"$TC actions flush action connmark",
0,
1,
255
],
"$TC actions add action connmark zone 777 pass index 555"
],
"cmdUnderTest": "$TC actions replace action connmark zone 555 reclassify index 555",
"expExitCode": "0",
"verifyCmd": "$TC actions get action connmark index 555",
"matchPattern": "action order [0-9]+: connmark zone 555 reclassify.*index 555 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action connmark"
]
},
{
"id": "5f8f",
"name": "Add valid connmark action with cookie",
"category": [
"actions",
"connmark"
],
"setup": [
[
"$TC actions flush action connmark",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action connmark zone 555 pipe index 5 cookie aabbccddeeff112233445566778800a1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action connmark index 5",
"matchPattern": "action order [0-9]+: connmark zone 555 pipe.*index 5 ref.*cookie aabbccddeeff112233445566778800a1",
"matchCount": "1",
"teardown": [
"$TC actions flush action connmark"
]
}
]
@@ -0,0 +1,504 @@
[
{
"id": "6d84",
"name": "Add csum iph action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum iph index 800",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 800",
"matchPattern": "action order [0-9]*: csum \\(iph\\) action pass.*index 800 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "1862",
"name": "Add csum ip4h action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum ip4h index 7",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 7",
"matchPattern": "action order [0-9]*: csum \\(iph\\) action pass.*index 7 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "15c6",
"name": "Add csum ipv4h action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum ipv4h index 1122",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 1122",
"matchPattern": "action order [0-9]*: csum \\(iph\\) action pass.*index 1122 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "bf47",
"name": "Add csum icmp action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum icmp index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 1",
"matchPattern": "action order [0-9]*: csum \\(icmp\\) action pass.*index 1 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "cc1d",
"name": "Add csum igmp action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum igmp index 999",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 999",
"matchPattern": "action order [0-9]*: csum \\(igmp\\) action pass.*index 999 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "bccc",
"name": "Add csum foobar action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum foobar index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions ls action csum",
"matchPattern": "action order [0-9]*: csum \\(foobar\\) action pass.*index 1 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "3bb4",
"name": "Add csum tcp action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum tcp index 9999",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 9999",
"matchPattern": "action order [0-9]*: csum \\(tcp\\) action pass.*index 9999 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "759c",
"name": "Add csum udp action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum udp index 334455",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 334455",
"matchPattern": "action order [0-9]*: csum \\(udp\\) action pass.*index 334455 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "bdb6",
"name": "Add csum udp xor iph action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum udp xor iph index 3",
"expExitCode": "255",
"verifyCmd": "$TC actions ls action csum",
"matchPattern": "action order [0-9]*: csum \\(udp xor iph\\) action pass.*index 3 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "c220",
"name": "Add csum udplite action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum udplite continue index 3",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 3",
"matchPattern": "action order [0-9]*: csum \\(udplite\\) action continue.*index 3 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "8993",
"name": "Add csum sctp action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum sctp index 777",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 777",
"matchPattern": "action order [0-9]*: csum \\(sctp\\) action pass.*index 777 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "b138",
"name": "Add csum ip & icmp action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum ip and icmp pipe index 123",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 123",
"matchPattern": "action order [0-9]*: csum \\(iph, icmp\\) action pipe.*index 123 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "eeda",
"name": "Add csum ip & sctp action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum ipv4h sctp continue index 2",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 2",
"matchPattern": "action order [0-9]*: csum \\(iph, sctp\\) action continue.*index 2 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "0017",
"name": "Add csum udp or tcp action",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum udp or tcp continue index 27",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 27",
"matchPattern": "action order [0-9]*: csum \\(tcp, udp\\) action continue.*index 27 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "b10b",
"name": "Add all 7 csum actions",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum icmp ip4h sctp igmp udplite udp tcp index 7",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 7",
"matchPattern": "action order [0-9]*: csum \\(iph, icmp, igmp, tcp, udp, udplite, sctp\\).*index 7 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "ce92",
"name": "Add csum udp action with cookie",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum udp pipe index 7 cookie 12345678",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 7",
"matchPattern": "action order [0-9]*: csum \\(udp\\) action pipe.*index 7.*cookie 12345678",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "912f",
"name": "Add csum icmp action with large cookie",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action csum icmp pipe index 17 cookie aabbccddeeff1122",
"expExitCode": "0",
"verifyCmd": "$TC actions get action csum index 17",
"matchPattern": "action order [0-9]*: csum \\(icmp\\) action pipe.*index 17.*cookie aabbccddeeff1122",
"matchCount": "1",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "879b",
"name": "Add batch of 32 csum tcp actions",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action csum tcp continue index \\$i \\\"; args=\"\\$args\\$cmd\"; done && $TC actions add \\$args\"",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action csum",
"matchPattern": "^[ \t]+index [0-9]* ref",
"matchCount": "32",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "b4e9",
"name": "Delete batch of 32 csum actions",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
],
"bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action csum tcp continue index \\$i \\\"; args=\"\\$args\\$cmd\"; done && $TC actions add \\$args\""
],
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action csum index \\$i \\\"; args=\"\\$args\\$cmd\"; done && $TC actions del \\$args\"",
"expExitCode": "0",
"verifyCmd": "$TC actions list action csum",
"matchPattern": "^[ \t]+index [0-9]+ ref",
"matchCount": "0",
"teardown": []
},
{
"id": "0015",
"name": "Add batch of 32 csum tcp actions with large cookies",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
]
],
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action csum tcp continue index \\$i cookie aaabbbcccdddeee \\\"; args=\"\\$args\\$cmd\"; done && $TC actions add \\$args\"",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action csum",
"matchPattern": "^[ \t]+index [0-9]* ref",
"matchCount": "32",
"teardown": [
"$TC actions flush action csum"
]
},
{
"id": "989e",
"name": "Delete batch of 32 csum actions with large cookies",
"category": [
"actions",
"csum"
],
"setup": [
[
"$TC actions flush action csum",
0,
1,
255
],
"bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action csum tcp continue index \\$i cookie aaabbbcccdddeee \\\"; args=\"\\$args\\$cmd\"; done && $TC actions add \\$args\""
],
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action csum index \\$i \\\"; args=\"\\$args\\$cmd\"; done && $TC actions del \\$args\"",
"expExitCode": "0",
"verifyCmd": "$TC actions list action csum",
"matchPattern": "^[ \t]+index [0-9]+ ref",
"matchCount": "0",
"teardown": []
}
]
@@ -0,0 +1,540 @@
[
{
"id": "e89a",
"name": "Add valid pass action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action pass index 8",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action pass.*index 8 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "a02c",
"name": "Add valid pipe action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action pipe index 6",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action pipe.*index 6 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "feef",
"name": "Add valid reclassify action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action reclassify index 5",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action reclassify.*index 5 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "8a7a",
"name": "Add valid drop action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action drop index 30",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action drop.*index 30 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "9a52",
"name": "Add valid continue action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action continue index 432",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action continue.*index 432 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "d700",
"name": "Add invalid action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action pump index 386",
"expExitCode": "255",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action.*index 386 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "9215",
"name": "Add action with duplicate index",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
],
"$TC actions add action pipe index 15"
],
"cmdUnderTest": "$TC actions add action drop index 15",
"expExitCode": "255",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action drop.*index 15 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "798e",
"name": "Add action with index exceeding 32-bit maximum",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action drop index 4294967296",
"expExitCode": "255",
"verifyCmd": "actions list action gact",
"matchPattern": "action order [0-9]*: gact action drop.*index 4294967296 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "22be",
"name": "Add action with index at 32-bit maximum",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action drop index 4294967295",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action drop.*index 4294967295 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "ac2a",
"name": "List actions",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
],
"$TC actions add action reclassify index 101",
"$TC actions add action reclassify index 102",
"$TC actions add action reclassify index 103",
"$TC actions add action reclassify index 104",
"$TC actions add action reclassify index 105"
],
"cmdUnderTest": "$TC actions list action gact",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action reclassify",
"matchCount": "5",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "3edf",
"name": "Flush gact actions",
"category": [
"actions",
"gact"
],
"setup": [
"$TC actions add action reclassify index 101",
"$TC actions add action reclassify index 102",
"$TC actions add action reclassify index 103",
"$TC actions add action reclassify index 104",
"$TC actions add action reclassify index 105"
],
"cmdUnderTest": "$TC actions flush action gact",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action reclassify",
"matchCount": "0",
"teardown": []
},
{
"id": "63ec",
"name": "Delete pass action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
],
"$TC actions add action pass index 1"
],
"cmdUnderTest": "$TC actions del action gact index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action pass.*index 1 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "46be",
"name": "Delete pipe action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
],
"$TC actions add action pipe index 9"
],
"cmdUnderTest": "$TC actions del action gact index 9",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action pipe.*index 9 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "2e08",
"name": "Delete reclassify action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
],
"$TC actions add action reclassify index 65536"
],
"cmdUnderTest": "$TC actions del action gact index 65536",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action reclassify.*index 65536 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "99c4",
"name": "Delete drop action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
],
"$TC actions add action drop index 16"
],
"cmdUnderTest": "$TC actions del action gact index 16",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action drop.*index 16 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "fb6b",
"name": "Delete continue action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
],
"$TC actions add action continue index 32"
],
"cmdUnderTest": "$TC actions del action gact index 32",
"expExitCode": "0",
"verifyCmd": "actions list action gact",
"matchPattern": "action order [0-9]*: gact action continue.*index 32 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "0eb3",
"name": "Delete non-existent action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions del action gact index 2",
"expExitCode": "255",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "action order [0-9]*: gact action",
"matchCount": "0",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "f02c",
"name": "Replace gact action",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
],
"$TC actions add action drop index 10",
"$TC actions add action drop index 12"
],
"cmdUnderTest": "$TC actions replace action ok index 12",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action gact",
"matchPattern": "action order [0-9]*: gact action pass",
"matchCount": "1",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "525f",
"name": "Get gact action by index",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
],
"$TC actions add action drop index 3900800700"
],
"cmdUnderTest": "$TC actions get action gact index 3900800700",
"expExitCode": "0",
"verifyCmd": "$TC actions get action gact index 3900800700",
"matchPattern": "index 3900800700",
"matchCount": "1",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "1021",
"name": "Add batch of 32 gact pass actions",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
]
],
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action pass index \\$i \\\"; args=\"\\$args\\$cmd\"; done && $TC actions add \\$args\"",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "^[ \t]+index [0-9]+ ref",
"matchCount": "32",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "da7a",
"name": "Add batch of 32 gact continue actions with cookie",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
]
],
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action continue index \\$i cookie aabbccddeeff112233445566778800a1 \\\"; args=\"\\$args\\$cmd\"; done && $TC actions add \\$args\"",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "^[ \t]+index [0-9]+ ref",
"matchCount": "32",
"teardown": [
"$TC actions flush action gact"
]
},
{
"id": "8aa3",
"name": "Delete batch of 32 gact continue actions",
"category": [
"actions",
"gact"
],
"setup": [
[
"$TC actions flush action gact",
0,
1,
255
],
"bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action continue index \\$i \\\"; args=\\\"\\$args\\$cmd\\\"; done && $TC actions add \\$args\""
],
"cmdUnderTest": "bash -c \"for i in \\`seq 1 32\\`; do cmd=\\\"action gact index \\$i \\\"; args=\"\\$args\\$cmd\"; done && $TC actions del \\$args\"",
"expExitCode": "0",
"verifyCmd": "$TC actions list action gact",
"matchPattern": "^[ \t]+index [0-9]+ ref",
"matchCount": "0",
"teardown": []
}
]
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,438 @@
[
{
"id": "5124",
"name": "Add mirred mirror to egress action",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred egress mirror index 1 dev lo",
"expExitCode": "0",
"verifyCmd": "$TC actions list action mirred",
"matchPattern": "action order [0-9]*: mirred \\(Egress Mirror to device lo\\).*index 1 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "6fb4",
"name": "Add mirred redirect to egress action",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred egress redirect index 2 dev lo action pipe",
"expExitCode": "0",
"verifyCmd": "$TC actions list action mirred",
"matchPattern": "action order [0-9]*: mirred \\(Egress Redirect to device lo\\).*index 2 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action mirred",
"$TC actions flush action gact"
]
},
{
"id": "ba38",
"name": "Get mirred actions",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
],
"$TC actions add action mirred egress mirror index 1 dev lo",
"$TC actions add action mirred egress redirect index 2 dev lo"
],
"cmdUnderTest": "$TC actions show action mirred",
"expExitCode": "0",
"verifyCmd": "$TC actions list action mirred",
"matchPattern": "[Mirror|Redirect] to device lo",
"matchCount": "2",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "d7c0",
"name": "Add invalid mirred direction",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred inbound mirror index 20 dev lo",
"expExitCode": "255",
"verifyCmd": "$TC actions list action mirred",
"matchPattern": "action order [0-9]*: mirred \\(.*to device lo\\).*index 20 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "e213",
"name": "Add invalid mirred action",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred egress remirror index 20 dev lo",
"expExitCode": "255",
"verifyCmd": "$TC actions list action mirred",
"matchPattern": "action order [0-9]*: mirred \\(Egress.*to device lo\\).*index 20 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "2d89",
"name": "Add mirred action with invalid device",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred egress mirror index 20 dev eltoh",
"expExitCode": "255",
"verifyCmd": "$TC actions list action mirred",
"matchPattern": "action order [0-9]*: mirred \\(.*to device eltoh\\).*index 20 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "300b",
"name": "Add mirred action with duplicate index",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
],
"$TC actions add action mirred egress redirect index 15 dev lo"
],
"cmdUnderTest": "$TC actions add action mirred egress mirror index 15 dev lo",
"expExitCode": "255",
"verifyCmd": "$TC actions list action mirred",
"matchPattern": "action order [0-9]*: mirred \\(.*to device lo\\).*index 15 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "8917",
"name": "Add mirred mirror action with control pass",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred ingress mirror dev lo pass index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action mirred index 1",
"matchPattern": "action order [0-9]*: mirred \\(Ingress Mirror to device lo\\) pass.*index 1 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "1054",
"name": "Add mirred mirror action with control pipe",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred ingress mirror dev lo pipe index 15",
"expExitCode": "0",
"verifyCmd": "$TC actions get action mirred index 15",
"matchPattern": "action order [0-9]*: mirred \\(Ingress Mirror to device lo\\) pipe.*index 15 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "9887",
"name": "Add mirred mirror action with control continue",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred ingress mirror dev lo continue index 15",
"expExitCode": "0",
"verifyCmd": "$TC actions get action mirred index 15",
"matchPattern": "action order [0-9]*: mirred \\(Ingress Mirror to device lo\\) continue.*index 15 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "e4aa",
"name": "Add mirred mirror action with control reclassify",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred ingress mirror dev lo reclassify index 150",
"expExitCode": "0",
"verifyCmd": "$TC actions get action mirred index 150",
"matchPattern": "action order [0-9]*: mirred \\(Ingress Mirror to device lo\\) reclassify.*index 150 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "ece9",
"name": "Add mirred mirror action with control drop",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred ingress mirror dev lo drop index 99",
"expExitCode": "0",
"verifyCmd": "$TC actions get action mirred index 99",
"matchPattern": "action order [0-9]*: mirred \\(Ingress Mirror to device lo\\) drop.*index 99 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "0031",
"name": "Add mirred mirror action with control jump",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred ingress mirror dev lo jump 10 index 99",
"expExitCode": "0",
"verifyCmd": "$TC actions get action mirred index 99",
"matchPattern": "action order [0-9]*: mirred \\(Ingress Mirror to device lo\\) jump 10.*index 99 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "407c",
"name": "Add mirred mirror action with cookie",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred ingress mirror dev lo reclassify cookie aa11bb22cc33dd44ee55",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action mirred",
"matchPattern": "action order [0-9]*: mirred \\(Ingress Mirror to device lo\\) reclassify.*cookie aa11bb22cc33dd44ee55",
"matchCount": "1",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "8b69",
"name": "Add mirred mirror action with index at 32-bit maximum",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred ingress mirror dev lo pipe index 4294967295",
"expExitCode": "0",
"verifyCmd": "$TC actions get action mirred index 4294967295",
"matchPattern": "action order [0-9]*: mirred \\(Ingress Mirror to device lo\\) pipe.*index 4294967295",
"matchCount": "1",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "3f66",
"name": "Add mirred mirror action with index exceeding 32-bit maximum",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action mirred ingress mirror dev lo pipe index 429496729555",
"expExitCode": "255",
"verifyCmd": "$TC actions get action mirred index 429496729555",
"matchPattern": "action order [0-9]*: mirred \\(Ingress Mirror to device lo\\) pipe.*index 429496729555",
"matchCount": "0",
"teardown": []
},
{
"id": "a70e",
"name": "Delete mirred mirror action",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
],
"$TC actions add action mirred egress mirror index 5 dev lo"
],
"cmdUnderTest": "$TC actions del action mirred index 5",
"expExitCode": "0",
"verifyCmd": "$TC actions list action mirred",
"matchPattern": "action order [0-9]*: mirred \\(Egress Mirror to device lo\\).*index 5 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action mirred"
]
},
{
"id": "3fb3",
"name": "Delete mirred redirect action",
"category": [
"actions",
"mirred"
],
"setup": [
[
"$TC actions flush action mirred",
0,
1,
255
],
"$TC actions add action mirred egress redirect index 5 dev lo"
],
"cmdUnderTest": "$TC actions del action mirred index 5",
"expExitCode": "0",
"verifyCmd": "$TC actions list action mirred",
"matchPattern": "action order [0-9]*: mirred \\(Egress Redirect to device lo\\).*index 5 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action mirred"
]
}
]
@@ -0,0 +1,593 @@
[
{
"id": "7565",
"name": "Add nat action on ingress with default control action",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress 192.168.1.1 200.200.200.1",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action nat",
"matchPattern": "action order [0-9]+: nat ingress 192.168.1.1/32 200.200.200.1 pass",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "fd79",
"name": "Add nat action on ingress with pipe control action",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress 1.1.1.1 2.2.2.1 pipe index 77",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 77",
"matchPattern": "action order [0-9]+: nat ingress 1.1.1.1/32 2.2.2.1 pipe.*index 77 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "eab9",
"name": "Add nat action on ingress with continue control action",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress 192.168.10.10 192.168.20.20 continue index 1000",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 1000",
"matchPattern": "action order [0-9]+: nat ingress 192.168.10.10/32 192.168.20.20 continue.*index 1000 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "c53a",
"name": "Add nat action on ingress with reclassify control action",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress 192.168.10.10 192.168.20.20 reclassify index 1000",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 1000",
"matchPattern": "action order [0-9]+: nat ingress 192.168.10.10/32 192.168.20.20 reclassify.*index 1000 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "76c9",
"name": "Add nat action on ingress with jump control action",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress 12.18.10.10 12.18.20.20 jump 10 index 22",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 22",
"matchPattern": "action order [0-9]+: nat ingress 12.18.10.10/32 12.18.20.20 jump 10.*index 22 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "24c6",
"name": "Add nat action on ingress with drop control action",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress 1.18.1.1 1.18.2.2 drop index 722",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 722",
"matchPattern": "action order [0-9]+: nat ingress 1.18.1.1/32 1.18.2.2 drop.*index 722 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "2120",
"name": "Add nat action on ingress with maximum index value",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress 1.18.1.1 1.18.2.2 index 4294967295",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 4294967295",
"matchPattern": "action order [0-9]+: nat ingress 1.18.1.1/32 1.18.2.2 pass.*index 4294967295 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "3e9d",
"name": "Add nat action on ingress with invalid index value",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress 1.18.1.1 1.18.2.2 index 4294967295555",
"expExitCode": "255",
"verifyCmd": "$TC actions get action nat index 4294967295555",
"matchPattern": "action order [0-9]+: nat ingress 1.18.1.1/32 1.18.2.2 pass.*index 4294967295555 ref",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action nat",
0,
1,
255
]
]
},
{
"id": "f6c9",
"name": "Add nat action on ingress with invalid IP address",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress 1.1.1.1 1.1888.2.2 index 7",
"expExitCode": "255",
"verifyCmd": "$TC actions get action nat index 7",
"matchPattern": "action order [0-9]+: nat ingress 1.1.1.1/32 1.1888.2.2 pass.*index 7 ref",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action nat",
0,
1,
255
]
]
},
{
"id": "be25",
"name": "Add nat action on ingress with invalid argument",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress 1.1.1.1 1.18.2.2 another_arg index 12",
"expExitCode": "255",
"verifyCmd": "$TC actions get action nat index 12",
"matchPattern": "action order [0-9]+: nat ingress 1.1.1.1/32 1.18.2.2 pass.*another_arg.*index 12 ref",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action nat",
0,
1,
255
]
]
},
{
"id": "a7bd",
"name": "Add nat action on ingress with DEFAULT IP address",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress default 10.10.10.1 index 12",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 12",
"matchPattern": "action order [0-9]+: nat ingress 0.0.0.0/32 10.10.10.1 pass.*index 12 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "ee1e",
"name": "Add nat action on ingress with ANY IP address",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress any 10.10.10.1 index 12",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 12",
"matchPattern": "action order [0-9]+: nat ingress 0.0.0.0/32 10.10.10.1 pass.*index 12 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "1de8",
"name": "Add nat action on ingress with ALL IP address",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress all 10.10.10.1 index 12",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 12",
"matchPattern": "action order [0-9]+: nat ingress 0.0.0.0/32 10.10.10.1 pass.*index 12 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "8dba",
"name": "Add nat action on egress with default control action",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat egress 10.10.10.1 20.20.20.1",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action nat",
"matchPattern": "action order [0-9]+: nat egress 10.10.10.1/32 20.20.20.1 pass",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "19a7",
"name": "Add nat action on egress with pipe control action",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat egress 10.10.10.1 20.20.20.1 pipe",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action nat",
"matchPattern": "action order [0-9]+: nat egress 10.10.10.1/32 20.20.20.1 pipe",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "f1d9",
"name": "Add nat action on egress with continue control action",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat egress 10.10.10.1 20.20.20.1 continue",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action nat",
"matchPattern": "action order [0-9]+: nat egress 10.10.10.1/32 20.20.20.1 continue",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "6d4a",
"name": "Add nat action on egress with reclassify control action",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat egress 10.10.10.1 20.20.20.1 reclassify",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action nat",
"matchPattern": "action order [0-9]+: nat egress 10.10.10.1/32 20.20.20.1 reclassify",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "b313",
"name": "Add nat action on egress with jump control action",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat egress 10.10.10.1 20.20.20.1 jump 777",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action nat",
"matchPattern": "action order [0-9]+: nat egress 10.10.10.1/32 20.20.20.1 jump 777",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "d9fc",
"name": "Add nat action on egress with drop control action",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat egress 10.10.10.1 20.20.20.1 drop",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action nat",
"matchPattern": "action order [0-9]+: nat egress 10.10.10.1/32 20.20.20.1 drop",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "a895",
"name": "Add nat action on egress with DEFAULT IP address",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat egress default 20.20.20.1 pipe index 10",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 10",
"matchPattern": "action order [0-9]+: nat egress 0.0.0.0/32 20.20.20.1 pipe.*index 10 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "2572",
"name": "Add nat action on egress with ANY IP address",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat egress any 20.20.20.1 pipe index 10",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 10",
"matchPattern": "action order [0-9]+: nat egress 0.0.0.0/32 20.20.20.1 pipe.*index 10 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "37f3",
"name": "Add nat action on egress with ALL IP address",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat egress all 20.20.20.1 pipe index 10",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 10",
"matchPattern": "action order [0-9]+: nat egress 0.0.0.0/32 20.20.20.1 pipe.*index 10 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "6054",
"name": "Add nat action on egress with cookie",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat egress all 20.20.20.1 pipe index 10 cookie aa1bc2d3eeff112233445566778800a1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 10",
"matchPattern": "action order [0-9]+: nat egress 0.0.0.0/32 20.20.20.1 pipe.*index 10 ref.*cookie aa1bc2d3eeff112233445566778800a1",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
},
{
"id": "79d6",
"name": "Add nat action on ingress with cookie",
"category": [
"actions",
"nat"
],
"setup": [
[
"$TC actions flush action nat",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action nat ingress 192.168.1.1 10.10.10.1 reclassify index 1 cookie 112233445566778899aabbccddeeff11",
"expExitCode": "0",
"verifyCmd": "$TC actions get action nat index 1",
"matchPattern": "action order [0-9]+: nat ingress 192.168.1.1/32 10.10.10.1 reclassify.*index 1 ref.*cookie 112233445566778899aabbccddeeff11",
"matchCount": "1",
"teardown": [
"$TC actions flush action nat"
]
}
]
@@ -0,0 +1,719 @@
[
{
"id": "49aa",
"name": "Add valid basic police action",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 1kbit burst 10k index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x1 rate 1Kbit burst 10Kb",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "3abe",
"name": "Add police action with duplicate index",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
],
"$TC actions add action police rate 4Mbit burst 120k index 9"
],
"cmdUnderTest": "$TC actions add action police rate 8kbit burst 24k index 9",
"expExitCode": "255",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x9",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "49fa",
"name": "Add valid police action with mtu",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 90kbit burst 10k mtu 1k index 98",
"expExitCode": "0",
"verifyCmd": "$TC actions get action police index 98",
"matchPattern": "action order [0-9]*: police 0x62 rate 90Kbit burst 10Kb mtu 1Kb",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "7943",
"name": "Add valid police action with peakrate",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 90kbit burst 10k mtu 2kb peakrate 100kbit index 3",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x3 rate 90Kbit burst 10Kb mtu 2Kb peakrate 100Kbit",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "055e",
"name": "Add police action with peakrate and no mtu",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 5kbit burst 6kb peakrate 10kbit index 9",
"expExitCode": "255",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x9 rate 5Kb burst 10Kb",
"matchCount": "0",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "f057",
"name": "Add police action with valid overhead",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 1mbit burst 100k overhead 64 index 64",
"expExitCode": "0",
"verifyCmd": "$TC actions get action police index 64",
"matchPattern": "action order [0-9]*: police 0x40 rate 1Mbit burst 100Kb mtu 2Kb action reclassify overhead 64b",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "7ffb",
"name": "Add police action with ethernet linklayer type",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 2mbit burst 200k linklayer ethernet index 8",
"expExitCode": "0",
"verifyCmd": "$TC actions show action police",
"matchPattern": "action order [0-9]*: police 0x8 rate 2Mbit burst 200Kb mtu 2Kb action reclassify overhead 0b",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "3dda",
"name": "Add police action with atm linklayer type",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 2mbit burst 200k linklayer atm index 8",
"expExitCode": "0",
"verifyCmd": "$TC actions show action police",
"matchPattern": "action order [0-9]*: police 0x8 rate 2Mbit burst 200Kb mtu 2Kb action reclassify overhead 0b linklayer atm",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "551b",
"name": "Add police actions with conform-exceed control continue/drop",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 3mbit burst 250k conform-exceed continue/drop index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action police index 1",
"matchPattern": "action order [0-9]*: police 0x1 rate 3Mbit burst 250Kb mtu 2Kb action continue/drop",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "0c70",
"name": "Add police actions with conform-exceed control pass/reclassify",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 3mbit burst 250k conform-exceed pass/reclassify index 4",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x4 rate 3Mbit burst 250Kb mtu 2Kb action pass/reclassify",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "d946",
"name": "Add police actions with conform-exceed control pass/pipe",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 3mbit burst 250k conform-exceed pass/pipe index 5",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x5 rate 3Mbit burst 250Kb mtu 2Kb action pass/pipe",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "ddd6",
"name": "Add police action with invalid rate value",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 3tb burst 250k conform-exceed pass/pipe index 5",
"expExitCode": "255",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x5 rate 3Tb burst 250Kb mtu 2Kb action pass/pipe",
"matchCount": "0",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "f61c",
"name": "Add police action with invalid burst value",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 3kbit burst 250P conform-exceed pass/pipe index 5",
"expExitCode": "255",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x5 rate 3Kbit burst 250Pb mtu 2Kb action pass/pipe",
"matchCount": "0",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "6aaf",
"name": "Add police actions with conform-exceed control pass/pipe [with numeric values]",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 3mbit burst 250k conform-exceed 0/3 index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action police index 1",
"matchPattern": "action order [0-9]*: police 0x1 rate 3Mbit burst 250Kb mtu 2Kb action pass/pipe",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "29b1",
"name": "Add police actions with conform-exceed control <invalid>/drop",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 3mbit burst 250k conform-exceed 10/drop index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x1 rate 3Mbit burst 250Kb mtu 2Kb action ",
"matchCount": "0",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "c26f",
"name": "Add police action with invalid peakrate value",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 90kbit burst 10k mtu 2kb peakrate 100T index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x1 rate 90Kbit burst 10Kb mtu 2Kb peakrate 100Tbit",
"matchCount": "0",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "db04",
"name": "Add police action with invalid mtu value",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 10kbit burst 10k mtu 2Pbit index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x1 rate 10Kbit burst 1Kb mtu 2Pb",
"matchCount": "0",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "f3c9",
"name": "Add police action with cookie",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 10mbit burst 10k index 1 cookie a1b1c1d1e1f12233bb",
"expExitCode": "0",
"verifyCmd": "$TC actions get action police index 1",
"matchPattern": "action order [0-9]*: police 0x1 rate 10Mbit burst 10Kb mtu 2Kb.*cookie a1b1c1d1e1f12233bb",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "d190",
"name": "Add police action with maximum index",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 10mbit burst 10k index 4294967295",
"expExitCode": "0",
"verifyCmd": "$TC actions get action police index 4294967295",
"matchPattern": "action order [0-9]*: police 0xffffffff rate 10Mbit burst 10Kb mtu 2Kb",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "336e",
"name": "Delete police action",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
],
"$TC actions add action police rate 5mbit burst 2m index 12"
],
"cmdUnderTest": "$TC actions delete action police index 12",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0xc rate 5Mb burst 2Mb",
"matchCount": "0",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "77fa",
"name": "Get single police action from many actions",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
],
"$TC actions add action police rate 1mbit burst 100k index 1",
"$TC actions add action police rate 2mbit burst 200k index 2",
"$TC actions add action police rate 3mbit burst 300k index 3",
"$TC actions add action police rate 4mbit burst 400k index 4",
"$TC actions add action police rate 5mbit burst 500k index 5",
"$TC actions add action police rate 6mbit burst 600k index 6",
"$TC actions add action police rate 7mbit burst 700k index 7",
"$TC actions add action police rate 8mbit burst 800k index 8"
],
"cmdUnderTest": "$TC actions get action police index 4",
"expExitCode": "0",
"verifyCmd": "$TC actions get action police index 4",
"matchPattern": "action order [0-9]*: police 0x4 rate 4Mbit burst 400Kb",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "aa43",
"name": "Get single police action without specifying index",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
],
"$TC actions add action police rate 1mbit burst 100k index 1"
],
"cmdUnderTest": "$TC actions get action police",
"expExitCode": "255",
"verifyCmd": "$TC actions get action police",
"matchPattern": "action order [0-9]*: police",
"matchCount": "0",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "858b",
"name": "List police actions",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
],
"$TC actions add action police rate 1mbit burst 100k index 1",
"$TC actions add action police rate 2mbit burst 200k index 2",
"$TC actions add action police rate 3mbit burst 300k index 3",
"$TC actions add action police rate 4mbit burst 400k index 4",
"$TC actions add action police rate 5mbit burst 500k index 5",
"$TC actions add action police rate 6mbit burst 600k index 6",
"$TC actions add action police rate 7mbit burst 700k index 7",
"$TC actions add action police rate 8mbit burst 800k index 8"
],
"cmdUnderTest": "$TC actions list action police",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x[1-8] rate [1-8]Mbit burst [1-8]00Kb",
"matchCount": "8",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "1c3a",
"name": "Flush police actions",
"category": [
"actions",
"police"
],
"setup": [
"$TC actions add action police rate 1mbit burst 100k index 1",
"$TC actions add action police rate 2mbit burst 200k index 2",
"$TC actions add action police rate 3mbit burst 300k index 3",
"$TC actions add action police rate 4mbit burst 400k index 4",
"$TC actions add action police rate 5mbit burst 500k index 5",
"$TC actions add action police rate 6mbit burst 600k index 6",
"$TC actions add action police rate 7mbit burst 700k index 7",
"$TC actions add action police rate 8mbit burst 800k index 8"
],
"cmdUnderTest": "$TC actions flush action police",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police",
"matchCount": "0",
"teardown": [
""
]
},
{
"id": "7326",
"name": "Add police action with control continue",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 7mbit burst 1m continue index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action police index 1",
"matchPattern": "action order [0-9]*: police 0x1 rate 7Mbit burst 1024Kb mtu 2Kb action continue",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "34fa",
"name": "Add police action with control drop",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 7mbit burst 1m drop index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x1 rate 7Mbit burst 1024Kb mtu 2Kb action drop",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "8dd5",
"name": "Add police action with control ok",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 7mbit burst 1m ok index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x1 rate 7Mbit burst 1024Kb mtu 2Kb action pass",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "b9d1",
"name": "Add police action with control reclassify",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 7mbit burst 1m reclassify index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action police index 1",
"matchPattern": "action order [0-9]*: police 0x1 rate 7Mbit burst 1024Kb mtu 2Kb action reclassify",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
},
{
"id": "c534",
"name": "Add police action with control pipe",
"category": [
"actions",
"police"
],
"setup": [
[
"$TC actions flush action police",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action police rate 7mbit burst 1m pipe index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action police",
"matchPattern": "action order [0-9]*: police 0x1 rate 7Mbit burst 1024Kb mtu 2Kb action pipe",
"matchCount": "1",
"teardown": [
"$TC actions flush action police"
]
}
]
@@ -0,0 +1,612 @@
[
{
"id": "9784",
"name": "Add valid sample action with mandatory arguments",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 10 group 1 index 2",
"expExitCode": "0",
"verifyCmd": "$TC actions get action sample index 2",
"matchPattern": "action order [0-9]+: sample rate 1/10 group 1.*index 2 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "5c91",
"name": "Add valid sample action with mandatory arguments and continue control action",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 700 group 2 continue index 2",
"expExitCode": "0",
"verifyCmd": "$TC actions get action sample index 2",
"matchPattern": "action order [0-9]+: sample rate 1/700 group 2 continue.*index 2 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "334b",
"name": "Add valid sample action with mandatory arguments and drop control action",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 10000 group 11 drop index 22",
"expExitCode": "0",
"verifyCmd": "$TC actions list action sample",
"matchPattern": "action order [0-9]+: sample rate 1/10000 group 11 drop.*index 22 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "da69",
"name": "Add valid sample action with mandatory arguments and reclassify control action",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 20000 group 72 reclassify index 100",
"expExitCode": "0",
"verifyCmd": "$TC actions list action sample",
"matchPattern": "action order [0-9]+: sample rate 1/20000 group 72 reclassify.*index 100 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "13ce",
"name": "Add valid sample action with mandatory arguments and pipe control action",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 20 group 2 pipe index 100",
"expExitCode": "0",
"verifyCmd": "$TC actions list action sample",
"matchPattern": "action order [0-9]+: sample rate 1/20 group 2 pipe.*index 100 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "1886",
"name": "Add valid sample action with mandatory arguments and jump control action",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 700 group 25 jump 4 index 200",
"expExitCode": "0",
"verifyCmd": "$TC actions get action sample index 200",
"matchPattern": "action order [0-9]+: sample rate 1/700 group 25 jump 4.*index 200 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "7571",
"name": "Add sample action with invalid rate",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 0 group 1 index 2",
"expExitCode": "255",
"verifyCmd": "$TC actions get action sample index 2",
"matchPattern": "action order [0-9]+: sample rate 1/0 group 1.*index 2 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "b6d4",
"name": "Add sample action with mandatory arguments and invalid control action",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 200000 group 52 foo index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions list action sample",
"matchPattern": "action order [0-9]+: sample rate 1/200000 group 52 foo.*index 1 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "a874",
"name": "Add invalid sample action without mandatory arguments",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions list action sample",
"matchPattern": "action order [0-9]+: sample.*index 1 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "ac01",
"name": "Add invalid sample action without mandatory argument rate",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample group 10 index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions list action sample",
"matchPattern": "action order [0-9]+: sample.*group 10.*index 1 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "4203",
"name": "Add invalid sample action without mandatory argument group",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 100 index 10",
"expExitCode": "255",
"verifyCmd": "$TC actions get action sample index 10",
"matchPattern": "action order [0-9]+: sample rate 1/100.*index 10 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "14a7",
"name": "Add invalid sample action without mandatory argument group",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 100 index 10",
"expExitCode": "255",
"verifyCmd": "$TC actions get action sample index 10",
"matchPattern": "action order [0-9]+: sample rate 1/100.*index 10 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "8f2e",
"name": "Add valid sample action with trunc argument",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 1024 group 4 trunc 1024 index 10",
"expExitCode": "0",
"verifyCmd": "$TC actions get action sample index 10",
"matchPattern": "action order [0-9]+: sample rate 1/1024 group 4 trunc_size 1024 pipe.*index 10 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "45f8",
"name": "Add sample action with maximum rate argument",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 4294967295 group 4 index 10",
"expExitCode": "0",
"verifyCmd": "$TC actions get action sample index 10",
"matchPattern": "action order [0-9]+: sample rate 1/4294967295 group 4 pipe.*index 10 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "ad0c",
"name": "Add sample action with maximum trunc argument",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 16000 group 4 trunc 4294967295 index 10",
"expExitCode": "0",
"verifyCmd": "$TC actions get action sample index 10",
"matchPattern": "action order [0-9]+: sample rate 1/16000 group 4 trunc_size 4294967295 pipe.*index 10 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "83a9",
"name": "Add sample action with maximum group argument",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 4294 group 4294967295 index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action sample index 1",
"matchPattern": "action order [0-9]+: sample rate 1/4294 group 4294967295 pipe.*index 1 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "ed27",
"name": "Add sample action with invalid rate argument",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 4294967296 group 4 index 10",
"expExitCode": "255",
"verifyCmd": "$TC actions get action sample index 10",
"matchPattern": "action order [0-9]+: sample rate 1/4294967296 group 4 pipe.*index 10 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "2eae",
"name": "Add sample action with invalid group argument",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 4098 group 5294967299 continue index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions get action sample index 1",
"matchPattern": "action order [0-9]+: sample rate 1/4098 group 5294967299 continue.*index 1 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "6ff3",
"name": "Add sample action with invalid trunc size",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 1024 group 4 trunc 112233445566 index 11",
"expExitCode": "255",
"verifyCmd": "$TC actions get action sample index 11",
"matchPattern": "action order [0-9]+: sample rate 1/1024 group 4 trunc_size 112233445566.*index 11 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "2b2a",
"name": "Add sample action with invalid index",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 1024 group 4 index 5294967299",
"expExitCode": "255",
"verifyCmd": "$TC actions get action sample index 5294967299",
"matchPattern": "action order [0-9]+: sample rate 1/1024 group 4 pipe.*index 5294967299 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "dee2",
"name": "Add sample action with maximum allowed index",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 1024 group 4 index 4294967295",
"expExitCode": "0",
"verifyCmd": "$TC actions get action sample index 4294967295",
"matchPattern": "action order [0-9]+: sample rate 1/1024 group 4 pipe.*index 4294967295 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "560e",
"name": "Add sample action with cookie",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action sample rate 1024 group 4 index 45 cookie aabbccdd",
"expExitCode": "0",
"verifyCmd": "$TC actions get action sample index 45",
"matchPattern": "action order [0-9]+: sample rate 1/1024 group 4 pipe.*index 45.*cookie aabbccdd",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "704a",
"name": "Replace existing sample action with new rate argument",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
],
"$TC actions add action sample rate 1024 group 4 index 4"
],
"cmdUnderTest": "$TC actions replace action sample rate 2048 group 4 index 4",
"expExitCode": "0",
"verifyCmd": "$TC actions list action sample",
"matchPattern": "action order [0-9]+: sample rate 1/2048 group 4 pipe.*index 4",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "60eb",
"name": "Replace existing sample action with new group argument",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
],
"$TC actions add action sample rate 1024 group 4 index 4"
],
"cmdUnderTest": "$TC actions replace action sample rate 1024 group 7 index 4",
"expExitCode": "0",
"verifyCmd": "$TC actions list action sample",
"matchPattern": "action order [0-9]+: sample rate 1/1024 group 7 pipe.*index 4",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "2cce",
"name": "Replace existing sample action with new trunc argument",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
],
"$TC actions add action sample rate 1024 group 4 trunc 48 index 4"
],
"cmdUnderTest": "$TC actions replace action sample rate 1024 group 7 trunc 64 index 4",
"expExitCode": "0",
"verifyCmd": "$TC actions list action sample",
"matchPattern": "action order [0-9]+: sample rate 1/1024 group 7 trunc_size 64 pipe.*index 4",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
},
{
"id": "59d1",
"name": "Replace existing sample action with new control argument",
"category": [
"actions",
"sample"
],
"setup": [
[
"$TC actions flush action sample",
0,
1,
255
],
"$TC actions add action sample rate 1024 group 4 reclassify index 4"
],
"cmdUnderTest": "$TC actions replace action sample rate 1024 group 7 pipe index 4",
"expExitCode": "0",
"verifyCmd": "$TC actions list action sample",
"matchPattern": "action order [0-9]+: sample rate 1/1024 group 7 pipe.*index 4",
"matchCount": "1",
"teardown": [
"$TC actions flush action sample"
]
}
]
@@ -0,0 +1,130 @@
[
{
"id": "b078",
"name": "Add simple action",
"category": [
"actions",
"simple"
],
"setup": [
[
"$TC actions flush action simple",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action simple sdata \"A triumph\" index 60",
"expExitCode": "0",
"verifyCmd": "$TC actions list action simple",
"matchPattern": "action order [0-9]*: Simple <A triumph>.*index 60 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action simple"
]
},
{
"id": "6d4c",
"name": "Add simple action with duplicate index",
"category": [
"actions",
"simple"
],
"setup": [
[
"$TC actions flush action simple",
0,
1,
255
],
"$TC actions add action simple sdata \"Aruba\" index 4"
],
"cmdUnderTest": "$TC actions add action simple sdata \"Jamaica\" index 4",
"expExitCode": "255",
"verifyCmd": "$TC actions list action simple",
"matchPattern": "action order [0-9]*: Simple <Jamaica>.*ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action simple"
]
},
{
"id": "2542",
"name": "List simple actions",
"category": [
"actions",
"simple"
],
"setup": [
[
"$TC actions flush action simple",
0,
1,
255
],
"$TC actions add action simple sdata \"Rock\"",
"$TC actions add action simple sdata \"Paper\"",
"$TC actions add action simple sdata \"Scissors\" index 98"
],
"cmdUnderTest": "$TC actions list action simple",
"expExitCode": "0",
"verifyCmd": "$TC actions list action simple",
"matchPattern": "action order [0-9]*: Simple <[A-Z][a-z]*>",
"matchCount": "3",
"teardown": [
"$TC actions flush action simple"
]
},
{
"id": "ea67",
"name": "Delete simple action",
"category": [
"actions",
"simple"
],
"setup": [
[
"$TC actions flush action simple",
0,
1,
255
],
"$TC actions add action simple sdata \"Blinkenlights\" index 1"
],
"cmdUnderTest": "$TC actions delete action simple index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions list action simple",
"matchPattern": "action order [0-9]*: Simple <Blinkenlights>.*index 1 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action simple"
]
},
{
"id": "8ff1",
"name": "Flush simple actions",
"category": [
"actions",
"simple"
],
"setup": [
[
"$TC actions flush action simple",
0,
1,
255
],
"$TC actions add action simple sdata \"Kirk\"",
"$TC actions add action simple sdata \"Spock\" index 50",
"$TC actions add action simple sdata \"McCoy\" index 9"
],
"cmdUnderTest": "$TC actions flush action simple",
"expExitCode": "0",
"verifyCmd": "$TC actions list action simple",
"matchPattern": "action order [0-9]*: Simple <[A-Z][a-z]*>",
"matchCount": "0",
"teardown": [
""
]
}
]
@@ -0,0 +1,488 @@
[
{
"id": "6236",
"name": "Add skbedit action with valid mark",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit mark 1",
"expExitCode": "0",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "action order [0-9]*: skbedit mark 1",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "407b",
"name": "Add skbedit action with invalid mark",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit mark 666777888999",
"expExitCode": "255",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "action order [0-9]*: skbedit mark",
"matchCount": "0",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "081d",
"name": "Add skbedit action with priority",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit prio 99",
"expExitCode": "0",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "action order [0-9]*: skbedit priority :99",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "cc37",
"name": "Add skbedit action with invalid priority",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit prio foo",
"expExitCode": "255",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "action order [0-9]*: skbedit priority",
"matchCount": "0",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "3c95",
"name": "Add skbedit action with queue_mapping",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit queue_mapping 909",
"expExitCode": "0",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "action order [0-9]*: skbedit queue_mapping 909",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "985c",
"name": "Add skbedit action with invalid queue_mapping",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit queue_mapping 67000",
"expExitCode": "255",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "action order [0-9]*: skbedit queue_mapping",
"matchCount": "0",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "224f",
"name": "Add skbedit action with ptype host",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit ptype host",
"expExitCode": "0",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "action order [0-9]*: skbedit ptype host",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "d1a3",
"name": "Add skbedit action with ptype otherhost",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit ptype otherhost",
"expExitCode": "0",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "action order [0-9]*: skbedit ptype otherhost",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "b9c6",
"name": "Add skbedit action with invalid ptype",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit ptype openair",
"expExitCode": "255",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "action order [0-9]*: skbedit ptype openair",
"matchCount": "0",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "464a",
"name": "Add skbedit action with control pipe",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit ptype host pipe index 11",
"expExitCode": "0",
"verifyCmd": "$TC actions get action skbedit index 11",
"matchPattern": "action order [0-9]*: skbedit ptype host pipe.*index 11 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "212f",
"name": "Add skbedit action with control reclassify",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit mark 56789 reclassify index 90",
"expExitCode": "0",
"verifyCmd": "$TC actions get action skbedit index 90",
"matchPattern": "action order [0-9]*: skbedit mark 56789 reclassify.*index 90 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "0651",
"name": "Add skbedit action with control pass",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit queue_mapping 3 pass index 271",
"expExitCode": "0",
"verifyCmd": "$TC actions get action skbedit index 271",
"matchPattern": "action order [0-9]*: skbedit queue_mapping 3 pass.*index 271 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "cc53",
"name": "Add skbedit action with control drop",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit queue_mapping 3 drop index 271",
"expExitCode": "0",
"verifyCmd": "$TC actions get action skbedit index 271",
"matchPattern": "action order [0-9]*: skbedit queue_mapping 3 drop.*index 271 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "ec16",
"name": "Add skbedit action with control jump",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit priority 8 jump 9 index 2",
"expExitCode": "0",
"verifyCmd": "$TC actions get action skbedit index 2",
"matchPattern": "action order [0-9]*: skbedit priority :8 jump 9.*index 2 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "db54",
"name": "Add skbedit action with control continue",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit priority 16 continue index 32",
"expExitCode": "0",
"verifyCmd": "$TC actions get action skbedit index 32",
"matchPattern": "action order [0-9]*: skbedit priority :16 continue.*index 32 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "1055",
"name": "Add skbedit action with cookie",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit priority 16 continue index 32 cookie deadbeef",
"expExitCode": "0",
"verifyCmd": "$TC actions get action skbedit index 32",
"matchPattern": "action order [0-9]*: skbedit priority :16 continue.*index 32 ref.*cookie deadbeef",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "5172",
"name": "List skbedit actions",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
],
"$TC actions add action skbedit ptype otherhost",
"$TC actions add action skbedit ptype broadcast",
"$TC actions add action skbedit mark 59",
"$TC actions add action skbedit mark 409"
],
"cmdUnderTest": "$TC actions list action skbedit",
"expExitCode": "0",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "action order [0-9]*: skbedit",
"matchCount": "4",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "a6d6",
"name": "Add skbedit action with index",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbedit mark 808 index 4040404040",
"expExitCode": "0",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "index 4040404040",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "38f3",
"name": "Delete skbedit action",
"category": [
"actions",
"skbedit"
],
"setup": [
[
"$TC actions flush action skbedit",
0,
1,
255
],
"$TC actions add action skbedit mark 42 index 9009"
],
"cmdUnderTest": "$TC actions del action skbedit index 9009",
"expExitCode": "0",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "action order [0-9]*: skbedit mark 42",
"matchCount": "0",
"teardown": [
"$TC actions flush action skbedit"
]
},
{
"id": "ce97",
"name": "Flush skbedit actions",
"category": [
"actions",
"skbedit"
],
"setup": [
"$TC actions add action skbedit mark 500",
"$TC actions add action skbedit mark 501",
"$TC actions add action skbedit mark 502",
"$TC actions add action skbedit mark 503",
"$TC actions add action skbedit mark 504",
"$TC actions add action skbedit mark 505",
"$TC actions add action skbedit mark 506"
],
"cmdUnderTest": "$TC actions flush action skbedit",
"expExitCode": "0",
"verifyCmd": "$TC actions list action skbedit",
"matchPattern": "action order [0-9]*: skbedit",
"matchCount": "0",
"teardown": [
"$TC actions flush action skbedit"
]
}
]
@@ -0,0 +1,396 @@
[
{
"id": "7d50",
"name": "Add skbmod action to set destination mac",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbmod set dmac 11:22:33:44:55:66 index 5",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action skbmod",
"matchPattern": "action order [0-9]*: skbmod pipe set dmac 11:22:33:44:55:66\\s+index 5",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "9b29",
"name": "Add skbmod action to set source mac",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbmod set smac 77:88:99:AA:BB:CC index 7",
"expExitCode": "0",
"verifyCmd": "$TC actions get action skbmod index 7",
"matchPattern": "action order [0-9]*: skbmod pipe set smac 77:88:99:aa:bb:cc\\s+index 7",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "1724",
"name": "Add skbmod action with invalid mac",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbmod set smac 00:44:55:44:55",
"expExitCode": "255",
"verifyCmd": "$TC actions ls action skbmod",
"matchPattern": "action order [0-9]*: skbmod pipe set smac 00:44:55:44:55",
"matchCount": "0",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "3cf1",
"name": "Add skbmod action with valid etype",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbmod set etype 0xfefe",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action skbmod",
"matchPattern": "action order [0-9]*: skbmod pipe set etype 0xFEFE",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "a749",
"name": "Add skbmod action with invalid etype",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbmod set etype 0xfefef",
"expExitCode": "255",
"verifyCmd": "$TC actions ls action skbmod",
"matchPattern": "action order [0-9]*: skbmod pipe set etype 0xFEFEF",
"matchCount": "0",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "bfe6",
"name": "Add skbmod action to swap mac",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbmod swap mac",
"expExitCode": "0",
"verifyCmd": "$TC actions get action skbmod index 1",
"matchPattern": "action order [0-9]*: skbmod pipe swap mac",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "839b",
"name": "Add skbmod action with control pipe",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbmod swap mac pipe",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action skbmod",
"matchPattern": "action order [0-9]*: skbmod pipe swap mac",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "c167",
"name": "Add skbmod action with control reclassify",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbmod set etype 0xbeef reclassify",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action skbmod",
"matchPattern": "action order [0-9]*: skbmod reclassify set etype 0xBEEF",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "0c2f",
"name": "Add skbmod action with control drop",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbmod set etype 0x0001 drop",
"expExitCode": "0",
"verifyCmd": "$TC actions get action skbmod index 1",
"matchPattern": "action order [0-9]*: skbmod drop set etype 0x1",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "d113",
"name": "Add skbmod action with control continue",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbmod set etype 0x1 continue",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action skbmod",
"matchPattern": "action order [0-9]*: skbmod continue set etype 0x1",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "7242",
"name": "Add skbmod action with control pass",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbmod set smac 00:00:00:00:00:01 pass",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action skbmod",
"matchPattern": "action order [0-9]*: skbmod pass set smac 00:00:00:00:00:01",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "6046",
"name": "Add skbmod action with control reclassify and cookie",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action skbmod set smac 00:01:02:03:04:01 reclassify index 1 cookie ddeeffaabb11cc22",
"expExitCode": "0",
"verifyCmd": "$TC actions get action skbmod index 1",
"matchPattern": "action order [0-9]*: skbmod reclassify set smac 00:01:02:03:04:01.*index 1 ref.*cookie ddeeffaabb11cc22",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "58cb",
"name": "List skbmod actions",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
],
"$TC actions add action skbmod set etype 0x0001",
"$TC actions add action skbmod set etype 0x0011",
"$TC actions add action skbmod set etype 0x0021",
"$TC actions add action skbmod set etype 0x0031",
"$TC actions add action skbmod set etype 0x0041"
],
"cmdUnderTest": "$TC actions ls action skbmod",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action skbmod",
"matchPattern": "action order [0-9]*: skbmod",
"matchCount": "5",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "9aa8",
"name": "Get a single skbmod action from a list",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
],
"$TC actions add action skbmod set etype 0x0001",
"$TC actions add action skbmod set etype 0x0011",
"$TC actions add action skbmod set etype 0x0021",
"$TC actions add action skbmod set etype 0x0031",
"$TC actions add action skbmod set etype 0x0041"
],
"cmdUnderTest": "$TC actions ls action skbmod",
"expExitCode": "0",
"verifyCmd": "$TC actions get action skbmod index 4",
"matchPattern": "action order [0-9]*: skbmod pipe set etype 0x31",
"matchCount": "1",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "e93a",
"name": "Delete an skbmod action",
"category": [
"actions",
"skbmod"
],
"setup": [
[
"$TC actions flush action skbmod",
0,
1,
255
],
"$TC actions add action skbmod set etype 0x1111 index 909"
],
"cmdUnderTest": "$TC actions del action skbmod index 909",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action skbmod",
"matchPattern": "action order [0-9]*: skbmod pipe set etype 0x1111\\s+index 909",
"matchCount": "0",
"teardown": [
"$TC actions flush action skbmod"
]
},
{
"id": "40c2",
"name": "Flush skbmod actions",
"category": [
"actions",
"skbmod"
],
"setup": [
"$TC actions add action skbmod set etype 0x0001",
"$TC actions add action skbmod set etype 0x0011",
"$TC actions add action skbmod set etype 0x0021",
"$TC actions add action skbmod set etype 0x0031",
"$TC actions add action skbmod set etype 0x0041"
],
"cmdUnderTest": "$TC actions flush action skbmod",
"expExitCode": "0",
"verifyCmd": "$TC actions ls action skbmod",
"matchPattern": "action order [0-9]*: skbmod",
"matchCount": "0",
"teardown": [
"$TC actions flush action skbmod"
]
}
]
@@ -0,0 +1,888 @@
[
{
"id": "2b11",
"name": "Add tunnel_key set action with mandatory parameters",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 10.10.10.1 dst_ip 20.20.20.2 id 1",
"expExitCode": "0",
"verifyCmd": "$TC actions list action tunnel_key",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 10.10.10.1.*dst_ip 20.20.20.2.*key_id 1",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "dc6b",
"name": "Add tunnel_key set action with missing mandatory src_ip parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set dst_ip 20.20.20.2 id 100",
"expExitCode": "255",
"verifyCmd": "$TC actions list action tunnel_key",
"matchPattern": "action order [0-9]+: tunnel_key set.*dst_ip 20.20.20.2.*key_id 100",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
]
},
{
"id": "7f25",
"name": "Add tunnel_key set action with missing mandatory dst_ip parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 10.10.10.1 id 100",
"expExitCode": "255",
"verifyCmd": "$TC actions list action tunnel_key",
"matchPattern": "action order [0-9]+: tunnel_key set.*src_ip 10.10.10.1.*key_id 100",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
]
},
{
"id": "a5e0",
"name": "Add tunnel_key set action with invalid src_ip parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 300.168.100.1 dst_ip 192.168.200.1 id 7 index 1",
"expExitCode": "1",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key set.*src_ip 300.168.100.1.*dst_ip 192.168.200.1.*key_id 7.*index 1 ref",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
]
},
{
"id": "eaa8",
"name": "Add tunnel_key set action with invalid dst_ip parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 192.168.100.1 dst_ip 192.168.800.1 id 10 index 11",
"expExitCode": "1",
"verifyCmd": "$TC actions get action tunnel_key index 11",
"matchPattern": "action order [0-9]+: tunnel_key set.*src_ip 192.168.100.1.*dst_ip 192.168.800.1.*key_id 10.*index 11 ref",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
]
},
{
"id": "3b09",
"name": "Add tunnel_key set action with invalid id parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 112233445566778899 index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 112233445566778899.*index 1 ref",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
]
},
{
"id": "9625",
"name": "Add tunnel_key set action with invalid dst_port parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 11 dst_port 998877 index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 11.*dst_port 998877.*index 1 ref",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
]
},
{
"id": "05af",
"name": "Add tunnel_key set action with optional dst_port parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 192.168.100.1 dst_ip 192.168.200.1 id 789 dst_port 4000 index 10",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 10",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 192.168.100.1.*dst_ip 192.168.200.1.*key_id 789.*dst_port 4000.*index 10 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "da80",
"name": "Add tunnel_key set action with index at 32-bit maximum",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 11 index 4294967295",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 4294967295",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*id 11.*index 4294967295 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "d407",
"name": "Add tunnel_key set action with index exceeding 32-bit maximum",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 11 index 4294967295678",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 4294967295678",
"matchPattern": "action order [0-9]+: tunnel_key set.*index 4294967295678 ref",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
]
},
{
"id": "5cba",
"name": "Add tunnel_key set action with id value at 32-bit maximum",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 4294967295 index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 4294967295.*index 1",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "e84a",
"name": "Add tunnel_key set action with id value exceeding 32-bit maximum",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 42949672955 index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 4294967295",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 42949672955.*index 1",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
]
},
{
"id": "9c19",
"name": "Add tunnel_key set action with dst_port value at 16-bit maximum",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 429 dst_port 65535 index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 429.*dst_port 65535.*index 1",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "3bd9",
"name": "Add tunnel_key set action with dst_port value exceeding 16-bit maximum",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 429 dst_port 65535789 index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 429.*dst_port 65535789.*index 1",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
]
},
{
"id": "68e2",
"name": "Add tunnel_key unset action",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key unset index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*unset.*index 1 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "6192",
"name": "Add tunnel_key unset continue action",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key unset continue index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*unset continue.*index 1 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "061d",
"name": "Add tunnel_key set continue action with cookie",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 192.168.10.1 dst_ip 192.168.20.2 id 123 continue index 1 cookie aa11bb22cc33dd44ee55ff66aa11b1b2",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 192.168.10.1.*dst_ip 192.168.20.2.*key_id 123.*csum continue.*index 1.*cookie aa11bb22cc33dd44ee55ff66aa11b1b2",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "8acb",
"name": "Add tunnel_key set continue action with invalid cookie",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 192.168.10.1 dst_ip 192.168.20.2 id 123 continue index 1 cookie aa11bb22cc33dd44ee55ff66aa11b1b2777888",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 192.168.10.1.*dst_ip 192.168.20.2.*key_id 123.*csum continue.*index 1.*cookie aa11bb22cc33dd44ee55ff66aa11b1b2777888",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
]
},
{
"id": "a07e",
"name": "Add tunnel_key action with no set/unset command specified",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key src_ip 10.10.10.1 dst_ip 20.20.20.2 id 1",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*src_ip 10.10.10.1.*dst_ip 20.20.20.2.*key_id 1",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
]
},
{
"id": "b227",
"name": "Add tunnel_key action with csum option",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 10.10.10.1 dst_ip 20.20.20.2 id 1 csum index 99",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 99",
"matchPattern": "action order [0-9]+: tunnel_key.*src_ip 10.10.10.1.*dst_ip 20.20.20.2.*key_id 1.*csum pipe.*index 99",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "58a7",
"name": "Add tunnel_key action with nocsum option",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 10.10.10.1 dst_ip 10.10.10.2 id 7823 nocsum index 234",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 234",
"matchPattern": "action order [0-9]+: tunnel_key.*src_ip 10.10.10.1.*dst_ip 10.10.10.2.*key_id 7823.*nocsum pipe.*index 234",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "2575",
"name": "Add tunnel_key action with not-supported parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 10.10.10.1 dst_ip 10.10.10.2 id 7 foobar 999 index 4",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 4",
"matchPattern": "action order [0-9]+: tunnel_key.*src_ip 10.10.10.1.*dst_ip 10.10.10.2.*key_id 7.*foobar 999.*index 4",
"matchCount": "0",
"teardown": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
]
},
{
"id": "7a88",
"name": "Add tunnel_key action with cookie parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 10.10.10.1 dst_ip 10.10.10.2 id 7 index 4 cookie aa11bb22cc33dd44ee55ff66aa11b1b2",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 4",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 10.10.10.1.*dst_ip 10.10.10.2.*key_id 7.*csum pipe.*index 4 ref.*cookie aa11bb22cc33dd44ee55ff66aa11b1b2",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "4f20",
"name": "Add tunnel_key action with a single geneve option parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 42 dst_port 6081 geneve_opts 0102:80:00880022 index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 42.*dst_port 6081.*geneve_opt 0102:80:00880022.*index 1",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "e33d",
"name": "Add tunnel_key action with multiple geneve options parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 42 dst_port 6081 geneve_opts 0102:80:00880022,0408:42:0040007611223344,0111:02:1020304011223344 index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 42.*dst_port 6081.*geneve_opt 0102:80:00880022,0408:42:0040007611223344,0111:02:1020304011223344.*index 1",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "0778",
"name": "Add tunnel_key action with invalid class geneve option parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 42 dst_port 6081 geneve_opts 824212:80:00880022 index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 42.*dst_port 6081.*geneve_opt 824212:80:00880022.*index 1",
"matchCount": "0",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "4ae8",
"name": "Add tunnel_key action with invalid type geneve option parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 42 dst_port 6081 geneve_opts 0102:4224:00880022 index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 42.*dst_port 6081.*geneve_opt 0102:4224:00880022.*index 1",
"matchCount": "0",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "4039",
"name": "Add tunnel_key action with short data length geneve option parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 42 dst_port 6081 geneve_opts 0102:80:4288 index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 42.*dst_port 6081.*geneve_opt 0102:80:4288.*index 1",
"matchCount": "0",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "26a6",
"name": "Add tunnel_key action with non-multiple of 4 data length geneve option parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 42 dst_port 6081 geneve_opts 0102:80:4288428822 index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 42.*dst_port 6081.*geneve_opt 0102:80:4288428822.*index 1",
"matchCount": "0",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "f44d",
"name": "Add tunnel_key action with incomplete geneve options parameter",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 42 dst_port 6081 geneve_opts 0102:80:00880022,0408:42: index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 1.1.1.1.*dst_ip 2.2.2.2.*key_id 42.*dst_port 6081.*geneve_opt 0102:80:00880022,0408:42:.*index 1",
"matchCount": "0",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "7afc",
"name": "Replace tunnel_key set action with all parameters",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
],
"$TC actions add action tunnel_key set src_ip 10.10.10.1 dst_ip 20.20.20.2 dst_port 3128 csum id 1 index 1"
],
"cmdUnderTest": "$TC actions replace action tunnel_key set src_ip 11.11.11.1 dst_ip 21.21.21.2 dst_port 3129 nocsum id 11 index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 11.11.11.1.*dst_ip 21.21.21.2.*key_id 11.*dst_port 3129.*nocsum pipe.*index 1",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "364d",
"name": "Replace tunnel_key set action with all parameters and cookie",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
],
"$TC actions add action tunnel_key set src_ip 10.10.10.1 dst_ip 20.20.20.2 dst_port 3128 nocsum id 1 index 1 cookie aabbccddeeff112233445566778800a"
],
"cmdUnderTest": "$TC actions replace action tunnel_key set src_ip 11.11.11.1 dst_ip 21.21.21.2 dst_port 3129 id 11 csum reclassify index 1 cookie a1b1c1d1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action tunnel_key index 1",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 11.11.11.1.*dst_ip 21.21.21.2.*key_id 11.*dst_port 3129.*csum reclassify.*index 1.*cookie a1b1c1d1",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "937c",
"name": "Fetch all existing tunnel_key actions",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
],
"$TC actions add action tunnel_key set src_ip 10.10.10.1 dst_ip 20.20.20.2 dst_port 3128 nocsum id 1 pipe index 1",
"$TC actions add action tunnel_key set src_ip 11.10.10.1 dst_ip 21.20.20.2 dst_port 3129 csum id 2 jump 10 index 2",
"$TC actions add action tunnel_key set src_ip 12.10.10.1 dst_ip 22.20.20.2 dst_port 3130 csum id 3 pass index 3",
"$TC actions add action tunnel_key set src_ip 13.10.10.1 dst_ip 23.20.20.2 dst_port 3131 nocsum id 4 continue index 4"
],
"cmdUnderTest": "$TC actions list action tunnel_key",
"expExitCode": "0",
"verifyCmd": "$TC actions list action tunnel_key",
"matchPattern": "action order [0-9]+: tunnel_key.*set.*src_ip 10.10.10.1.*dst_ip 20.20.20.2.*key_id 1.*dst_port 3128.*nocsum pipe.*index 1.*set.*src_ip 11.10.10.1.*dst_ip 21.20.20.2.*key_id 2.*dst_port 3129.*csum jump 10.*index 2.*set.*src_ip 12.10.10.1.*dst_ip 22.20.20.2.*key_id 3.*dst_port 3130.*csum pass.*index 3.*set.*src_ip 13.10.10.1.*dst_ip 23.20.20.2.*key_id 4.*dst_port 3131.*nocsum continue.*index 4",
"matchCount": "1",
"teardown": [
"$TC actions flush action tunnel_key"
]
},
{
"id": "6783",
"name": "Flush all existing tunnel_key actions",
"category": [
"actions",
"tunnel_key"
],
"setup": [
[
"$TC actions flush action tunnel_key",
0,
1,
255
],
"$TC actions add action tunnel_key set src_ip 10.10.10.1 dst_ip 20.20.20.2 dst_port 3128 nocsum id 1 pipe index 1",
"$TC actions add action tunnel_key set src_ip 11.10.10.1 dst_ip 21.20.20.2 dst_port 3129 csum id 2 reclassify index 2",
"$TC actions add action tunnel_key set src_ip 12.10.10.1 dst_ip 22.20.20.2 dst_port 3130 csum id 3 pass index 3",
"$TC actions add action tunnel_key set src_ip 13.10.10.1 dst_ip 23.20.20.2 dst_port 3131 nocsum id 4 continue index 4"
],
"cmdUnderTest": "$TC actions flush action tunnel_key",
"expExitCode": "0",
"verifyCmd": "$TC actions list action tunnel_key",
"matchPattern": "action order [0-9]+:.*",
"matchCount": "0",
"teardown": [
"$TC actions flush action tunnel_key"
]
}
]
@@ -0,0 +1,692 @@
[
{
"id": "6f5a",
"name": "Add vlan pop action with pipe opcode",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan pop pipe index 8",
"expExitCode": "0",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*pop.*pipe.*index 8 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "df35",
"name": "Add vlan pop action with pass opcode",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan pop pass index 8",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 8",
"matchPattern": "action order [0-9]+: vlan.*pop.*pass.*index 8 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "b0d4",
"name": "Add vlan pop action with drop opcode",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan pop drop index 8",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 8",
"matchPattern": "action order [0-9]+: vlan.*pop.*drop.*index 8 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "95ee",
"name": "Add vlan pop action with reclassify opcode",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan pop reclassify index 8",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 8",
"matchPattern": "action order [0-9]+: vlan.*pop.*reclassify.*index 8 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "0283",
"name": "Add vlan pop action with continue opcode",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan pop continue index 8",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 8",
"matchPattern": "action order [0-9]+: vlan.*pop.*continue.*index 8 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "b6b9",
"name": "Add vlan pop action with jump opcode",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan pop jump 10 index 8",
"expExitCode": "0",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*jump 10.*index 8 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "87c3",
"name": "Add vlan pop action with trap opcode",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan pop trap index 8",
"expExitCode": "0",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*pop trap.*index 8 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "a178",
"name": "Add vlan pop action with invalid opcode",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan pop foo index 8",
"expExitCode": "255",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*pop.*foo.*index 8 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "ee6f",
"name": "Add vlan pop action with index at 32-bit maximum",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan pop index 4294967295",
"expExitCode": "0",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*pop.*index 4294967295 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "0dfa",
"name": "Add vlan pop action with index exceeding 32-bit maximum",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan pop reclassify index 429496729599",
"expExitCode": "255",
"verifyCmd": "$TC actions get action vlan index 429496729599",
"matchPattern": "action order [0-9]+: vlan.*pop.reclassify.*index 429496729599",
"matchCount": "0",
"teardown": []
},
{
"id": "2b91",
"name": "Add vlan invalid action",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan bad_mode",
"expExitCode": "255",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*bad_mode",
"matchCount": "0",
"teardown": []
},
{
"id": "57fc",
"name": "Add vlan push action with invalid protocol type",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan push protocol ABCD",
"expExitCode": "255",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*push",
"matchCount": "0",
"teardown": []
},
{
"id": "3989",
"name": "Add vlan push action with default protocol and priority",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan push id 123 index 18",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 18",
"matchPattern": "action order [0-9]+: vlan.*push id 123 protocol 802.1Q priority 0 pipe.*index 18 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "79dc",
"name": "Add vlan push action with protocol 802.1Q and priority 3",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan push id 77 protocol 802.1Q priority 3 continue index 734",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 734",
"matchPattern": "action order [0-9]+: vlan.*push id 77 protocol 802.1Q priority 3 continue.*index 734 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "4d73",
"name": "Add vlan push action with protocol 802.1AD",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan push id 1024 protocol 802.1AD pass index 10000",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 10000",
"matchPattern": "action order [0-9]+: vlan.*push id 1024 protocol 802.1ad priority 0 pass.*index 10000 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "1f4b",
"name": "Add vlan push action with maximum 12-bit vlan ID",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan push id 4094 index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 1",
"matchPattern": "action order [0-9]+: vlan.*push id 4094.*protocol 802.1Q.*priority 0.*index 1 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "1f7b",
"name": "Add vlan push action with invalid vlan ID",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan push id 5678 index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*push id 5678.*index 1 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "fe40",
"name": "Add vlan push action with maximum 3-bit IEEE 802.1p priority",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan push id 4 priority 7 reclassify index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 1",
"matchPattern": "action order [0-9]+: vlan.*push id 4.*protocol 802.1Q.*priority 7.*reclassify.*index 1 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "5d02",
"name": "Add vlan push action with invalid IEEE 802.1p priority",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan push id 5 priority 10 index 1",
"expExitCode": "255",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*push id 5.*index 1 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "6812",
"name": "Add vlan modify action for protocol 802.1Q",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan modify protocol 802.1Q id 5 index 100",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 100",
"matchPattern": "action order [0-9]+: vlan.*modify id 100 protocol 802.1Q priority 0 pipe.*index 100 ref",
"matchCount": "0",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "5a31",
"name": "Add vlan modify action for protocol 802.1AD",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan modify protocol 802.1ad id 500 reclassify index 12",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 12",
"matchPattern": "action order [0-9]+: vlan.*modify id 500 protocol 802.1ad priority 0 reclassify.*index 12 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "3deb",
"name": "Replace existing vlan push action with new ID",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
],
"$TC actions add action vlan push id 500 pipe index 12"
],
"cmdUnderTest": "$TC actions replace action vlan push id 700 pipe index 12",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 12",
"matchPattern": "action order [0-9]+: vlan.*push id 700 protocol 802.1Q priority 0 pipe.*index 12 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "9e76",
"name": "Replace existing vlan push action with new protocol",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
],
"$TC actions add action vlan push id 1 protocol 802.1Q pipe index 1"
],
"cmdUnderTest": "$TC actions replace action vlan push id 1 protocol 802.1ad pipe index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 1",
"matchPattern": "action order [0-9]+: vlan.*push id 1 protocol 802.1ad priority 0 pipe.*index 1 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "ede4",
"name": "Replace existing vlan push action with new priority",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
],
"$TC actions add action vlan push id 1 protocol 802.1Q priority 3 reclassify index 1"
],
"cmdUnderTest": "$TC actions replace action vlan push id 1 priority 4 reclassify index 1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 1",
"matchPattern": "action order [0-9]+: vlan.*push id 1 protocol 802.1Q priority 4 reclassify.*index 1 ref",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "d413",
"name": "Replace existing vlan pop action with new cookie",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
],
"$TC actions add action vlan pop continue index 1 cookie 22334455"
],
"cmdUnderTest": "$TC actions replace action vlan pop continue index 1 cookie a1b1c2d1",
"expExitCode": "0",
"verifyCmd": "$TC actions get action vlan index 1",
"matchPattern": "action order [0-9]+: vlan.*pop continue.*index 1 ref.*cookie a1b1c2d1",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
},
{
"id": "83a4",
"name": "Delete vlan pop action",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
],
"$TC actions add action vlan pop index 44"
],
"cmdUnderTest": "$TC actions del action vlan index 44",
"expExitCode": "0",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*pop.*index 44 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "ed1e",
"name": "Delete vlan push action for protocol 802.1Q",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
],
"$TC actions add action vlan push id 4094 protocol 802.1Q index 999"
],
"cmdUnderTest": "$TC actions del action vlan index 999",
"expExitCode": "0",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*push id 4094 protocol 802.1Q priority 0 pipe.*index 999 ref",
"matchCount": "0",
"teardown": []
},
{
"id": "a2a3",
"name": "Flush vlan actions",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
],
"$TC actions add action vlan push id 4 protocol 802.1ad index 10",
"$TC actions add action vlan push id 4 protocol 802.1ad index 11",
"$TC actions add action vlan push id 4 protocol 802.1ad index 12",
"$TC actions add action vlan push id 4 protocol 802.1ad index 13"
],
"cmdUnderTest": "$TC actions flush action vlan",
"expExitCode": "0",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*push id 4 protocol 802.1ad",
"matchCount": "0",
"teardown": []
},
{
"id": "1d78",
"name": "Add vlan push action with cookie",
"category": [
"actions",
"vlan"
],
"setup": [
[
"$TC actions flush action vlan",
0,
1,
255
]
],
"cmdUnderTest": "$TC actions add action vlan push id 4 cookie a0a0a0a0a0a0a0",
"expExitCode": "0",
"verifyCmd": "$TC actions list action vlan",
"matchPattern": "action order [0-9]+: vlan.*push id 4.*cookie a0a0a0a0a0a0a0",
"matchCount": "1",
"teardown": [
"$TC actions flush action vlan"
]
}
]
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,42 @@
[
{
"id": "e9a3",
"name": "Add u32 with source match",
"category": [
"filter",
"u32"
],
"setup": [
"$TC qdisc add dev $DEV1 ingress"
],
"cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ip prio 1 u32 match ip src 127.0.0.1/32 flowid 1:1 action ok",
"expExitCode": "0",
"verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
"matchPattern": "match 7f000001/ffffffff at 12",
"matchCount": "1",
"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"
]
}
]
+663
View File
@@ -0,0 +1,663 @@
#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0
"""
tdc.py - Linux tc (Traffic Control) unit test driver
Copyright (C) 2017 Lucas Bates <lucasb@mojatatu.com>
"""
import re
import os
import sys
import argparse
import importlib
import json
import subprocess
import time
import traceback
from collections import OrderedDict
from string import Template
from tdc_config import *
from tdc_helper import *
import TdcPlugin
class PluginMgrTestFail(Exception):
def __init__(self, stage, output, message):
self.stage = stage
self.output = output
self.message = message
class PluginMgr:
def __init__(self, argparser):
super().__init__()
self.plugins = {}
self.plugin_instances = []
self.args = []
self.argparser = argparser
# TODO, put plugins in order
plugindir = os.getenv('TDC_PLUGIN_DIR', './plugins')
for dirpath, dirnames, filenames in os.walk(plugindir):
for fn in filenames:
if (fn.endswith('.py') and
not fn == '__init__.py' and
not fn.startswith('#') and
not fn.startswith('.#')):
mn = fn[0:-3]
foo = importlib.import_module('plugins.' + mn)
self.plugins[mn] = foo
self.plugin_instances.append(foo.SubPlugin())
def call_pre_suite(self, testcount, testidlist):
for pgn_inst in self.plugin_instances:
pgn_inst.pre_suite(testcount, testidlist)
def call_post_suite(self, index):
for pgn_inst in reversed(self.plugin_instances):
pgn_inst.post_suite(index)
def call_pre_case(self, test_ordinal, testid):
for pgn_inst in self.plugin_instances:
try:
pgn_inst.pre_case(test_ordinal, testid)
except Exception as ee:
print('exception {} in call to pre_case for {} plugin'.
format(ee, pgn_inst.__class__))
print('test_ordinal is {}'.format(test_ordinal))
print('testid is {}'.format(testid))
raise
def call_post_case(self):
for pgn_inst in reversed(self.plugin_instances):
pgn_inst.post_case()
def call_pre_execute(self):
for pgn_inst in self.plugin_instances:
pgn_inst.pre_execute()
def call_post_execute(self):
for pgn_inst in reversed(self.plugin_instances):
pgn_inst.post_execute()
def call_add_args(self, parser):
for pgn_inst in self.plugin_instances:
parser = pgn_inst.add_args(parser)
return parser
def call_check_args(self, args, remaining):
for pgn_inst in self.plugin_instances:
pgn_inst.check_args(args, remaining)
def call_adjust_command(self, stage, command):
for pgn_inst in self.plugin_instances:
command = pgn_inst.adjust_command(stage, command)
return command
@staticmethod
def _make_argparser(args):
self.argparser = argparse.ArgumentParser(
description='Linux TC unit tests')
def replace_keywords(cmd):
"""
For a given executable command, substitute any known
variables contained within NAMES with the correct values
"""
tcmd = Template(cmd)
subcmd = tcmd.safe_substitute(NAMES)
return subcmd
def exec_cmd(args, pm, stage, command):
"""
Perform any required modifications on an executable command, then run
it in a subprocess and return the results.
"""
if len(command.strip()) == 0:
return None, None
if '$' in command:
command = replace_keywords(command)
command = pm.call_adjust_command(stage, command)
if args.verbose > 0:
print('command "{}"'.format(command))
proc = subprocess.Popen(command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=ENVIR)
(rawout, serr) = proc.communicate()
if proc.returncode != 0 and len(serr) > 0:
foutput = serr.decode("utf-8", errors="ignore")
else:
foutput = rawout.decode("utf-8", errors="ignore")
proc.stdout.close()
proc.stderr.close()
return proc, foutput
def prepare_env(args, pm, stage, prefix, cmdlist, output = None):
"""
Execute the setup/teardown commands for a test case.
Optionally terminate test execution if the command fails.
"""
if args.verbose > 0:
print('{}'.format(prefix))
for cmdinfo in cmdlist:
if isinstance(cmdinfo, list):
exit_codes = cmdinfo[1:]
cmd = cmdinfo[0]
else:
exit_codes = [0]
cmd = cmdinfo
if not cmd:
continue
(proc, foutput) = exec_cmd(args, pm, stage, cmd)
if proc and (proc.returncode not in exit_codes):
print('', file=sys.stderr)
print("{} *** Could not execute: \"{}\"".format(prefix, cmd),
file=sys.stderr)
print("\n{} *** Error message: \"{}\"".format(prefix, foutput),
file=sys.stderr)
print("returncode {}; expected {}".format(proc.returncode,
exit_codes))
print("\n{} *** Aborting test run.".format(prefix), file=sys.stderr)
print("\n\n{} *** stdout ***".format(proc.stdout), file=sys.stderr)
print("\n\n{} *** stderr ***".format(proc.stderr), file=sys.stderr)
raise PluginMgrTestFail(
stage, output,
'"{}" did not complete successfully'.format(prefix))
def run_one_test(pm, args, index, tidx):
global NAMES
result = True
tresult = ""
tap = ""
if args.verbose > 0:
print("\t====================\n=====> ", end="")
print("Test " + tidx["id"] + ": " + tidx["name"])
# populate NAMES with TESTID for this test
NAMES['TESTID'] = tidx['id']
pm.call_pre_case(index, tidx['id'])
prepare_env(args, pm, 'setup', "-----> prepare stage", tidx["setup"])
if (args.verbose > 0):
print('-----> execute stage')
pm.call_pre_execute()
(p, procout) = exec_cmd(args, pm, 'execute', tidx["cmdUnderTest"])
if p:
exit_code = p.returncode
else:
exit_code = None
pm.call_post_execute()
if (exit_code is None or exit_code != int(tidx["expExitCode"])):
result = False
print("exit: {!r}".format(exit_code))
print("exit: {}".format(int(tidx["expExitCode"])))
#print("exit: {!r} {}".format(exit_code, int(tidx["expExitCode"])))
print(procout)
else:
if args.verbose > 0:
print('-----> verify stage')
match_pattern = re.compile(
str(tidx["matchPattern"]), re.DOTALL | re.MULTILINE)
(p, procout) = exec_cmd(args, pm, 'verify', tidx["verifyCmd"])
if procout:
match_index = re.findall(match_pattern, procout)
if len(match_index) != int(tidx["matchCount"]):
result = False
elif int(tidx["matchCount"]) != 0:
result = False
if not result:
tresult += 'not '
tresult += 'ok {} - {} # {}\n'.format(str(index), tidx['id'], tidx['name'])
tap += tresult
if result == False:
if procout:
tap += procout
else:
tap += 'No output!\n'
prepare_env(args, pm, 'teardown', '-----> teardown stage', tidx['teardown'], procout)
pm.call_post_case()
index += 1
# remove TESTID from NAMES
del(NAMES['TESTID'])
return tap
def test_runner(pm, args, filtered_tests):
"""
Driver function for the unit tests.
Prints information about the tests being run, executes the setup and
teardown commands and the command under test itself. Also determines
success/failure based on the information in the test case and generates
TAP output accordingly.
"""
testlist = filtered_tests
tcount = len(testlist)
index = 1
tap = ''
badtest = None
stage = None
emergency_exit = False
emergency_exit_message = ''
if args.notap:
if args.verbose:
tap = 'notap requested: omitting test plan\n'
else:
tap = str(index) + ".." + str(tcount) + "\n"
try:
pm.call_pre_suite(tcount, [tidx['id'] for tidx in testlist])
except Exception as ee:
ex_type, ex, ex_tb = sys.exc_info()
print('Exception {} {} (caught in pre_suite).'.
format(ex_type, ex))
# when the extra print statements are uncommented,
# the traceback does not appear between them
# (it appears way earlier in the tdc.py output)
# so don't bother ...
# print('--------------------(')
# print('traceback')
traceback.print_tb(ex_tb)
# print('--------------------)')
emergency_exit_message = 'EMERGENCY EXIT, call_pre_suite failed with exception {} {}\n'.format(ex_type, ex)
emergency_exit = True
stage = 'pre-SUITE'
if emergency_exit:
pm.call_post_suite(index)
return emergency_exit_message
if args.verbose > 1:
print('give test rig 2 seconds to stabilize')
time.sleep(2)
for tidx in testlist:
if "flower" in tidx["category"] and args.device == None:
if args.verbose > 1:
print('Not executing test {} {} because DEV2 not defined'.
format(tidx['id'], tidx['name']))
continue
try:
badtest = tidx # in case it goes bad
tap += run_one_test(pm, args, index, tidx)
except PluginMgrTestFail as pmtf:
ex_type, ex, ex_tb = sys.exc_info()
stage = pmtf.stage
message = pmtf.message
output = pmtf.output
print(message)
print('Exception {} {} (caught in test_runner, running test {} {} {} stage {})'.
format(ex_type, ex, index, tidx['id'], tidx['name'], stage))
print('---------------')
print('traceback')
traceback.print_tb(ex_tb)
print('---------------')
if stage == 'teardown':
print('accumulated output for this test:')
if pmtf.output:
print(pmtf.output)
print('---------------')
break
index += 1
# if we failed in setup or teardown,
# fill in the remaining tests with ok-skipped
count = index
if not args.notap:
tap += 'about to flush the tap output if tests need to be skipped\n'
if tcount + 1 != index:
for tidx in testlist[index - 1:]:
msg = 'skipped - previous {} failed'.format(stage)
tap += 'ok {} - {} # {} {} {}\n'.format(
count, tidx['id'], msg, index, badtest.get('id', '--Unknown--'))
count += 1
tap += 'done flushing skipped test tap output\n'
if args.pause:
print('Want to pause\nPress enter to continue ...')
if input(sys.stdin):
print('got something on stdin')
pm.call_post_suite(index)
return tap
def has_blank_ids(idlist):
"""
Search the list for empty ID fields and return true/false accordingly.
"""
return not(all(k for k in idlist))
def load_from_file(filename):
"""
Open the JSON file containing the test cases and return them
as list of ordered dictionary objects.
"""
try:
with open(filename) as test_data:
testlist = json.load(test_data, object_pairs_hook=OrderedDict)
except json.JSONDecodeError as jde:
print('IGNORING test case file {}\n\tBECAUSE: {}'.format(filename, jde))
testlist = list()
else:
idlist = get_id_list(testlist)
if (has_blank_ids(idlist)):
for k in testlist:
k['filename'] = filename
return testlist
def args_parse():
"""
Create the argument parser.
"""
parser = argparse.ArgumentParser(description='Linux TC unit tests')
return parser
def set_args(parser):
"""
Set the command line arguments for tdc.
"""
parser.add_argument(
'-p', '--path', type=str,
help='The full path to the tc executable to use')
sg = parser.add_argument_group(
'selection', 'select which test cases: ' +
'files plus directories; filtered by categories plus testids')
ag = parser.add_argument_group(
'action', 'select action to perform on selected test cases')
sg.add_argument(
'-D', '--directory', nargs='+', metavar='DIR',
help='Collect tests from the specified directory(ies) ' +
'(default [tc-tests])')
sg.add_argument(
'-f', '--file', nargs='+', metavar='FILE',
help='Run tests from the specified file(s)')
sg.add_argument(
'-c', '--category', nargs='*', metavar='CATG', default=['+c'],
help='Run tests only from the specified category/ies, ' +
'or if no category/ies is/are specified, list known categories.')
sg.add_argument(
'-e', '--execute', nargs='+', metavar='ID',
help='Execute the specified test cases with specified IDs')
ag.add_argument(
'-l', '--list', action='store_true',
help='List all test cases, or those only within the specified category')
ag.add_argument(
'-s', '--show', action='store_true', dest='showID',
help='Display the selected test cases')
ag.add_argument(
'-i', '--id', action='store_true', dest='gen_id',
help='Generate ID numbers for new test cases')
parser.add_argument(
'-v', '--verbose', action='count', default=0,
help='Show the commands that are being run')
parser.add_argument(
'-N', '--notap', action='store_true',
help='Suppress tap results for command under test')
parser.add_argument('-d', '--device',
help='Execute the test case in flower category')
parser.add_argument(
'-P', '--pause', action='store_true',
help='Pause execution just before post-suite stage')
return parser
def check_default_settings(args, remaining, pm):
"""
Process any arguments overriding the default settings,
and ensure the settings are correct.
"""
# Allow for overriding specific settings
global NAMES
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)
pm.call_check_args(args, remaining)
def get_id_list(alltests):
"""
Generate a list of all IDs in the test cases.
"""
return [x["id"] for x in alltests]
def check_case_id(alltests):
"""
Check for duplicate test case IDs.
"""
idl = get_id_list(alltests)
return [x for x in idl if idl.count(x) > 1]
def does_id_exist(alltests, newid):
"""
Check if a given ID already exists in the list of test cases.
"""
idl = get_id_list(alltests)
return (any(newid == x for x in idl))
def generate_case_ids(alltests):
"""
If a test case has a blank ID field, generate a random hex ID for it
and then write the test cases back to disk.
"""
import random
for c in alltests:
if (c["id"] == ""):
while True:
newid = str('{:04x}'.format(random.randrange(16**4)))
if (does_id_exist(alltests, newid)):
continue
else:
c['id'] = newid
break
ufilename = []
for c in alltests:
if ('filename' in c):
ufilename.append(c['filename'])
ufilename = get_unique_item(ufilename)
for f in ufilename:
testlist = []
for t in alltests:
if 'filename' in t:
if t['filename'] == f:
del t['filename']
testlist.append(t)
outfile = open(f, "w")
json.dump(testlist, outfile, indent=4)
outfile.write("\n")
outfile.close()
def filter_tests_by_id(args, testlist):
'''
Remove tests from testlist that are not in the named id list.
If id list is empty, return empty list.
'''
newlist = list()
if testlist and args.execute:
target_ids = args.execute
if isinstance(target_ids, list) and (len(target_ids) > 0):
newlist = list(filter(lambda x: x['id'] in target_ids, testlist))
return newlist
def filter_tests_by_category(args, testlist):
'''
Remove tests from testlist that are not in a named category.
'''
answer = list()
if args.category and testlist:
test_ids = list()
for catg in set(args.category):
if catg == '+c':
continue
print('considering category {}'.format(catg))
for tc in testlist:
if catg in tc['category'] and tc['id'] not in test_ids:
answer.append(tc)
test_ids.append(tc['id'])
return answer
def get_test_cases(args):
"""
If a test case file is specified, retrieve tests from that file.
Otherwise, glob for all json files in subdirectories and load from
each one.
Also, if requested, filter by category, and add tests matching
certain ids.
"""
import fnmatch
flist = []
testdirs = ['tc-tests']
if args.file:
# at least one file was specified - remove the default directory
testdirs = []
for ff in args.file:
if not os.path.isfile(ff):
print("IGNORING file " + ff + "\n\tBECAUSE does not exist.")
else:
flist.append(os.path.abspath(ff))
if args.directory:
testdirs = args.directory
for testdir in testdirs:
for root, dirnames, filenames in os.walk(testdir):
for filename in fnmatch.filter(filenames, '*.json'):
candidate = os.path.abspath(os.path.join(root, filename))
if candidate not in testdirs:
flist.append(candidate)
alltestcases = list()
for casefile in flist:
alltestcases = alltestcases + (load_from_file(casefile))
allcatlist = get_test_categories(alltestcases)
allidlist = get_id_list(alltestcases)
testcases_by_cats = get_categorized_testlist(alltestcases, allcatlist)
idtestcases = filter_tests_by_id(args, alltestcases)
cattestcases = filter_tests_by_category(args, alltestcases)
cat_ids = [x['id'] for x in cattestcases]
if args.execute:
if args.category:
alltestcases = cattestcases + [x for x in idtestcases if x['id'] not in cat_ids]
else:
alltestcases = idtestcases
else:
if cat_ids:
alltestcases = cattestcases
else:
# just accept the existing value of alltestcases,
# which has been filtered by file/directory
pass
return allcatlist, allidlist, testcases_by_cats, alltestcases
def set_operation_mode(pm, args):
"""
Load the test case data and process remaining arguments to determine
what the script should do for this run, and call the appropriate
function.
"""
ucat, idlist, testcases, alltests = get_test_cases(args)
if args.gen_id:
if (has_blank_ids(idlist)):
alltests = generate_case_ids(alltests)
else:
print("No empty ID fields found in test files.")
exit(0)
duplicate_ids = check_case_id(alltests)
if (len(duplicate_ids) > 0):
print("The following test case IDs are not unique:")
print(str(set(duplicate_ids)))
print("Please correct them before continuing.")
exit(1)
if args.showID:
for atest in alltests:
print_test_case(atest)
exit(0)
if isinstance(args.category, list) and (len(args.category) == 0):
print("Available categories:")
print_sll(ucat)
exit(0)
if args.list:
if args.list:
list_test_cases(alltests)
exit(0)
if len(alltests):
catresults = test_runner(pm, args, alltests)
else:
catresults = 'No tests found\n'
if args.notap:
print('Tap output suppression requested\n')
else:
print('All test results: \n\n{}'.format(catresults))
def main():
"""
Start of execution; set up argument parser and get the arguments,
and start operations.
"""
parser = args_parse()
parser = set_args(parser)
pm = PluginMgr(parser)
parser = pm.call_add_args(parser)
(args, remaining) = parser.parse_known_args()
args.NAMES = NAMES
check_default_settings(args, remaining, pm)
if args.verbose > 2:
print('args is {}'.format(args))
set_operation_mode(pm, args)
exit(0)
if __name__ == "__main__":
main()
+62
View File
@@ -0,0 +1,62 @@
#!/usr/bin/env python3
"""
tdc_batch.py - a script to generate TC batch file
Copyright (C) 2017 Chris Mi <chrism@mellanox.com>
"""
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}".format(i, j, k))
src_mac = "e4:11:00:" + mac
dst_mac = "e4:12:00:" + mac
cmd = ("filter add dev {} {} protocol ip parent ffff: flower {} "
"src_mac {} dst_mac {} action drop {}".format
(device, prio, skip, src_mac, dst_mac, share_action))
file.write("{}\n".format(cmd))
index += 1
if index >= number:
file.close()
exit(0)
@@ -0,0 +1,36 @@
"""
# SPDX-License-Identifier: GPL-2.0
tdc_config.py - tdc user-specified values
Copyright (C) 2017 Lucas Bates <lucasb@mojatatu.com>
"""
# Dictionary containing all values that can be substituted in executable
# commands.
NAMES = {
# Substitute your own tc path here
'TC': '/sbin/tc',
# 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',
# Directory containing eBPF test programs
'EBPFDIR': './bpf'
}
ENVIR = { }
# put customizations in tdc_config_local.py
try:
from tdc_config_local import *
except ImportError as ie:
pass
try:
NAMES.update(EXTRA_NAMES)
except NameError as ne:
pass
@@ -0,0 +1,23 @@
"""
tdc_config_local.py - tdc plugin-writer-specified values
Copyright (C) 2017 bjb@mojatatu.com
"""
import os
ENVIR = os.environ.copy()
ENV_LD_LIBRARY_PATH = os.getenv('LD_LIBRARY_PATH', '')
ENV_OTHER_LIB = os.getenv('OTHER_LIB', '')
# example adding value to NAMES, without editing tdc_config.py
EXTRA_NAMES = dict()
EXTRA_NAMES['SOME_BIN'] = os.path.join(os.getenv('OTHER_BIN', ''), 'some_bin')
# example adding values to ENVIR, without editing tdc_config.py
ENVIR['VALGRIND_LIB'] = '/usr/lib/valgrind'
ENVIR['VALGRIND_BIN'] = '/usr/bin/valgrind'
ENVIR['VGDB_BIN'] = '/usr/bin/vgdb'
@@ -0,0 +1,67 @@
"""
# SPDX-License-Identifier: GPL-2.0
tdc_helper.py - tdc helper functions
Copyright (C) 2017 Lucas Bates <lucasb@mojatatu.com>
"""
def get_categorized_testlist(alltests, ucat):
""" Sort the master test list into categories. """
testcases = dict()
for category in ucat:
testcases[category] = list(filter(lambda x: category in x['category'], alltests))
return(testcases)
def get_unique_item(lst):
""" For a list, return a list of the unique items in the list. """
return list(set(lst))
def get_test_categories(alltests):
""" Discover all unique test categories present in the test case file. """
ucat = []
for t in alltests:
ucat.extend(get_unique_item(t['category']))
ucat = get_unique_item(ucat)
return ucat
def list_test_cases(testlist):
""" Print IDs and names of all test cases. """
for curcase in testlist:
print(curcase['id'] + ': (' + ', '.join(curcase['category']) + ") " + curcase['name'])
def list_categories(testlist):
""" Show all categories that are present in a test case file. """
categories = set(map(lambda x: x['category'], testlist))
print("Available categories:")
print(", ".join(str(s) for s in categories))
print("")
def print_list(cmdlist):
""" Print a list of strings prepended with a tab. """
for l in cmdlist:
if (type(l) == list):
print("\t" + str(l[0]))
else:
print("\t" + str(l))
def print_sll(items):
print("\n".join(str(s) for s in items))
def print_test_case(tcase):
""" Pretty-printing of a given test case. """
print('\n==============\nTest {}\t{}\n'.format(tcase['id'], tcase['name']))
for k in tcase.keys():
if (isinstance(tcase[k], list)):
print(k + ":")
print_list(tcase[k])
else:
if not ((k == 'id') or (k == 'name')):
print(k + ": " + str(tcase[k]))