Skip to content

Commit c1aec37

Browse files
helpers/labgrid-raw-interface: introduce subparsers per program, pass options
Adding a subparser per program keeps the code cleaner, especially when introducing ethtool commands in the future. To keep up with various options, pass the args namespace instead of adding kwargs for each new setting. Signed-off-by: Bastian Krause <[email protected]>
1 parent ea40a22 commit c1aec37

File tree

1 file changed

+24
-16
lines changed

1 file changed

+24
-16
lines changed

helpers/labgrid-raw-interface

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,18 @@ def get_denylist():
3232
return denylist
3333

3434

35-
def main(program, ifname, count):
36-
if not ifname:
35+
def main(program, options):
36+
if not options.ifname:
3737
raise ValueError("Empty interface name.")
38-
if any((c == "/" or c.isspace()) for c in ifname):
39-
raise ValueError(f"Interface name '{ifname}' contains invalid characters.")
40-
if len(ifname) > 16:
41-
raise ValueError(f"Interface name '{ifname}' is too long.")
38+
if any((c == "/" or c.isspace()) for c in options.ifname):
39+
raise ValueError(f"Interface name '{options.ifname}' contains invalid characters.")
40+
if len(options.ifname) > 16:
41+
raise ValueError(f"Interface name '{options.ifname}' is too long.")
4242

4343
denylist = get_denylist()
4444

45-
if ifname in denylist:
46-
raise ValueError(f"Interface name '{ifname}' is denied in denylist.")
45+
if options.ifname in denylist:
46+
raise ValueError(f"Interface name '{options.ifname}' is denied in denylist.")
4747

4848
programs = ["tcpreplay", "tcpdump"]
4949
if program not in programs:
@@ -54,18 +54,18 @@ def main(program, ifname, count):
5454
]
5555

5656
if program == "tcpreplay":
57-
args.append(f"--intf1={ifname}")
57+
args.append(f"--intf1={options.ifname}")
5858
args.append("-")
5959

6060
if program == "tcpdump":
6161
args.append("-n")
62-
args.append(f"--interface={ifname}")
62+
args.append(f"--interface={options.ifname}")
6363
args.append("-w")
6464
args.append("-")
6565

66-
if count:
66+
if options.count:
6767
args.append("-c")
68-
args.append(str(count))
68+
args.append(str(options.count))
6969

7070
try:
7171
os.execvp(args[0], args)
@@ -76,12 +76,20 @@ def main(program, ifname, count):
7676
if __name__ == "__main__":
7777
parser = argparse.ArgumentParser()
7878
parser.add_argument("-d", "--debug", action="store_true", default=False, help="enable debug mode")
79-
parser.add_argument("program", type=str, help="program to run, either tcpreplay or tcpdump")
80-
parser.add_argument("interface", type=str, help="interface name")
81-
parser.add_argument("count", nargs="?", type=int, default=None, help="amount of frames to capture while recording")
79+
subparsers = parser.add_subparsers(dest="program", help="program to run")
80+
81+
# tcpdump
82+
tcpdump_parser = subparsers.add_parser("tcpdump")
83+
tcpdump_parser.add_argument("ifname", type=str, help="interface name")
84+
tcpdump_parser.add_argument("count", type=int, default=None, help="amount of frames to capture while recording")
85+
86+
# tcpreplay
87+
tcpreplay_parser = subparsers.add_parser("tcpreplay")
88+
tcpreplay_parser.add_argument("ifname", type=str, help="interface name")
89+
8290
args = parser.parse_args()
8391
try:
84-
main(args.program, args.interface, args.count)
92+
main(args.program, args)
8593
except Exception as e: # pylint: disable=broad-except
8694
if args.debug:
8795
import traceback

0 commit comments

Comments
 (0)