162306a36Sopenharmony_ci#!/usr/bin/env python3
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
362306a36Sopenharmony_ci"""
462306a36Sopenharmony_citdc_multibatch.py - a thin wrapper over tdc_batch.py to generate multiple batch
562306a36Sopenharmony_cifiles
662306a36Sopenharmony_ci
762306a36Sopenharmony_ciCopyright (C) 2019 Vlad Buslov <vladbu@mellanox.com>
862306a36Sopenharmony_ci"""
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciimport argparse
1162306a36Sopenharmony_ciimport os
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ciparser = argparse.ArgumentParser(
1462306a36Sopenharmony_ci    description='TC multiple batch file generator')
1562306a36Sopenharmony_ciparser.add_argument("device", help="device name")
1662306a36Sopenharmony_ciparser.add_argument("dir", help="where to put batch files")
1762306a36Sopenharmony_ciparser.add_argument(
1862306a36Sopenharmony_ci    "num_filters", type=int, help="how many lines per batch file")
1962306a36Sopenharmony_ciparser.add_argument("num_files", type=int, help="how many batch files")
2062306a36Sopenharmony_ciparser.add_argument(
2162306a36Sopenharmony_ci    "operation",
2262306a36Sopenharmony_ci    choices=['add', 'del', 'replace'],
2362306a36Sopenharmony_ci    help="operation to perform on filters")
2462306a36Sopenharmony_ciparser.add_argument(
2562306a36Sopenharmony_ci    "-x",
2662306a36Sopenharmony_ci    "--file_prefix",
2762306a36Sopenharmony_ci    default="",
2862306a36Sopenharmony_ci    help="prefix for generated batch file names")
2962306a36Sopenharmony_ciparser.add_argument(
3062306a36Sopenharmony_ci    "-d",
3162306a36Sopenharmony_ci    "--duplicate_handles",
3262306a36Sopenharmony_ci    action="store_true",
3362306a36Sopenharmony_ci    help="duplicate filter handle range in all files")
3462306a36Sopenharmony_ciparser.add_argument(
3562306a36Sopenharmony_ci    "-a",
3662306a36Sopenharmony_ci    "--handle_start",
3762306a36Sopenharmony_ci    type=int,
3862306a36Sopenharmony_ci    default=1,
3962306a36Sopenharmony_ci    help="start handle range from (default: 1)")
4062306a36Sopenharmony_ciparser.add_argument(
4162306a36Sopenharmony_ci    "-m",
4262306a36Sopenharmony_ci    "--mac_prefix",
4362306a36Sopenharmony_ci    type=int,
4462306a36Sopenharmony_ci    default=0,
4562306a36Sopenharmony_ci    choices=range(0, 256),
4662306a36Sopenharmony_ci    help="add this value to third byte of source MAC address of flower filter"
4762306a36Sopenharmony_ci    "(default: 0)")
4862306a36Sopenharmony_ciargs = parser.parse_args()
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_cidevice = args.device
5162306a36Sopenharmony_cidir = args.dir
5262306a36Sopenharmony_cifile_prefix = args.file_prefix + args.operation + "_"
5362306a36Sopenharmony_cinum_filters = args.num_filters
5462306a36Sopenharmony_cinum_files = args.num_files
5562306a36Sopenharmony_cioperation = args.operation
5662306a36Sopenharmony_ciduplicate_handles = args.duplicate_handles
5762306a36Sopenharmony_cihandle = args.handle_start
5862306a36Sopenharmony_cimac_prefix = args.mac_prefix
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cifor i in range(num_files):
6162306a36Sopenharmony_ci    file = dir + '/' + file_prefix + str(i)
6262306a36Sopenharmony_ci    os.system("./tdc_batch.py -n {} -a {} -e {} -m {} {} {}".format(
6362306a36Sopenharmony_ci        num_filters, handle, operation, i + mac_prefix, device, file))
6462306a36Sopenharmony_ci    if not duplicate_handles:
6562306a36Sopenharmony_ci        handle += num_filters
66