Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b07270d authored by Vlad Buslov's avatar Vlad Buslov Committed by David S. Miller
Browse files

selftests: tdc_batch.py: add options needed for concurrency tests



Extend tdc_batch.py with several optional CLI arguments that are used for
implementation of concurrency tests in following patches in this set:

- Add optional argument to specify range of filter handles used in batch
  file [fitler_handle, filter_handle+number). This is needed for testing
  filter deletion where it is necessary to know exact handles of configured
  filters.

- Add optional argument to specify filter operation type (possible values
  are ['add', 'del', 'replace']) instead of hardcoded "add" value. This
  allows generation of batches for filter addition, deletion and
  replacement.

- Add optional argument to allow user to change mac address prefix that is
  used for all filters in batch. This is necessary to allow generating
  multiple batches with unique flower classifier keys.

Signed-off-by: default avatarVlad Buslov <vladbu@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a0dce875
Loading
Loading
Loading
Loading
+54 −4
Original line number Diff line number Diff line
@@ -13,6 +13,12 @@ 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(
    "-a",
    "--handle_start",
    type=int,
    default=1,
    help="start handle range from (default: 1)")
parser.add_argument("-o", "--skip_sw",
                    help="skip_sw (offload), by default skip_hw",
                    action="store_true")
@@ -22,6 +28,21 @@ parser.add_argument("-s", "--share_action",
parser.add_argument("-p", "--prio",
                    help="all filters have different prio",
                    action="store_true")
parser.add_argument(
    "-e",
    "--operation",
    choices=['add', 'del', 'replace'],
    default='add',
    help="operation to perform on filters"
    "(default: add filter)")
parser.add_argument(
    "-m",
    "--mac_prefix",
    type=int,
    default=0,
    choices=range(0, 256),
    help="third byte of source MAC address of flower filter"
    "(default: 0)")
args = parser.parse_args()

device = args.device
@@ -31,6 +52,8 @@ number = 1
if args.number:
    number = args.number

handle_start = args.handle_start

skip = "skip_hw"
if args.skip_sw:
    skip = "skip_sw"
@@ -45,16 +68,43 @@ if args.prio:
    if number > 0x4000:
        number = 0x4000

mac_prefix = args.mac_prefix

def format_add_filter(device, prio, handle, skip, src_mac, dst_mac,
                      share_action):
    return ("filter add dev {} {} protocol ip parent ffff: handle {} "
            " flower {} src_mac {} dst_mac {} action drop {}".format(
                device, prio, handle, skip, src_mac, dst_mac, share_action))


def format_rep_filter(device, prio, handle, skip, src_mac, dst_mac,
                      share_action):
    return ("filter replace dev {} {} protocol ip parent ffff: handle {} "
            " flower {} src_mac {} dst_mac {} action drop {}".format(
                device, prio, handle, skip, src_mac, dst_mac, share_action))


def format_del_filter(device, prio, handle, skip, src_mac, dst_mac,
                      share_action):
    return ("filter del dev {} {} protocol ip parent ffff: handle {} "
            "flower".format(device, prio, handle))


formatter = format_add_filter
if args.operation == "del":
    formatter = format_del_filter
elif args.operation == "replace":
    formatter = format_rep_filter

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
            src_mac = "e4:11:{:02x}:{}".format(mac_prefix, 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))
            cmd = formatter(device, prio, handle_start + index, skip, src_mac,
                            dst_mac, share_action)
            file.write("{}\n".format(cmd))
            index += 1
            if index >= number: