1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-11-28 08:02:54 +00:00

pf tests: Remove nargs from single arguments

Using nargs=1 causes arguments to produce lists from which we must then
get the real value. The same applies to defaults, the must be provided
as arrays too.

Remove nargs=1 so that values and defaults can be accessed directly.

Reviewed by:	kp
Differential Revision:	https://reviews.freebsd.org/D46772
This commit is contained in:
Kajetan Staszkiewicz 2024-09-25 10:35:33 +02:00 committed by Kristof Provost
parent 930a1e6f3d
commit 6aeaadf68d

View File

@ -408,17 +408,15 @@ def parse_args():
description="Ping test tool")
# Parameters of sent ping request
parser.add_argument('--sendif', nargs=1,
required=True,
parser.add_argument('--sendif', required=True,
help='The interface through which the packet(s) will be sent')
parser.add_argument('--to', nargs=1,
required=True,
parser.add_argument('--to', required=True,
help='The destination IP address for the ping request')
parser.add_argument('--ping-type',
choices=('icmp', 'tcpsyn'),
help='Type of ping: ICMP (default) or TCP SYN',
default='icmp')
parser.add_argument('--fromaddr', nargs=1,
parser.add_argument('--fromaddr',
help='The source IP address for the ping request')
# Where to look for packets to analyze.
@ -431,36 +429,36 @@ def parse_args():
# Packet settings
parser_send = parser.add_argument_group('Values set in transmitted packets')
parser_send.add_argument('--send-flags', nargs=1, type=str,
parser_send.add_argument('--send-flags', type=str,
help='IPv4 fragmentation flags')
parser_send.add_argument('--send-frag-length', nargs=1, type=int,
help='Force IP fragmentation with given fragment length')
parser_send.add_argument('--send-hlim', nargs=1, type=int,
parser_send.add_argument('--send-frag-length', type=int,
help='Force IP fragmentation with given fragment length')
parser_send.add_argument('--send-hlim', type=int,
help='IPv6 Hop Limit or IPv4 Time To Live')
parser_send.add_argument('--send-mss', nargs=1, type=int,
parser_send.add_argument('--send-mss', type=int,
help='TCP Maximum Segment Size')
parser_send.add_argument('--send-seq', nargs=1, type=int,
parser_send.add_argument('--send-seq', type=int,
help='TCP sequence number')
parser_send.add_argument('--send-length', nargs=1, type=int,
default=[len(PAYLOAD_MAGIC)], help='ICMP Echo Request payload size')
parser_send.add_argument('--send-tc', nargs=1, type=int,
parser_send.add_argument('--send-length', type=int, default=len(PAYLOAD_MAGIC),
help='ICMP Echo Request payload size')
parser_send.add_argument('--send-tc', type=int,
help='IPv6 Traffic Class or IPv4 DiffServ / ToS')
parser_send.add_argument('--send-tcpopt-unaligned', action='store_true',
help='Include unaligned TCP options')
help='Include unaligned TCP options')
parser_send.add_argument('--send-nop', action='store_true',
help='Include a NOP IPv4 option')
help='Include a NOP IPv4 option')
# Expectations
parser_expect = parser.add_argument_group('Values expected in sniffed packets')
parser_expect.add_argument('--expect-flags', nargs=1, type=str,
parser_expect.add_argument('--expect-flags', type=str,
help='IPv4 fragmentation flags')
parser_expect.add_argument('--expect-hlim', nargs=1, type=int,
parser_expect.add_argument('--expect-hlim', type=int,
help='IPv6 Hop Limit or IPv4 Time To Live')
parser_expect.add_argument('--expect-mss', nargs=1, type=int,
parser_expect.add_argument('--expect-mss', type=int,
help='TCP Maximum Segment Size')
parser_send.add_argument('--expect-seq', nargs=1, type=int,
parser_send.add_argument('--expect-seq', type=int,
help='TCP sequence number')
parser_expect.add_argument('--expect-tc', nargs=1, type=int,
parser_expect.add_argument('--expect-tc', type=int,
help='IPv6 Traffic Class or IPv4 DiffServ / ToS')
parser.add_argument('-v', '--verbose', action='store_true',
@ -478,31 +476,26 @@ def main():
if args.verbose:
LOGGER.setLevel(logging.DEBUG)
# Dig out real values of program arguments
send_if = args.sendif[0]
reply_ifs = args.replyif
recv_ifs = args.recvif
dst_address = args.to[0]
# Standardize parameters which have nargs=1.
# Split parameters into send and expect parameters. Parameters might be
# missing from the command line, always fill the dictionaries with None.
send_params = {}
expect_params = {}
for param_name in ('flags', 'hlim', 'length', 'mss', 'seq', 'tc', 'frag_length'):
param_arg = vars(args).get(f'send_{param_name}')
send_params[param_name] = param_arg[0] if param_arg else None
send_params[param_name] = param_arg if param_arg else None
param_arg = vars(args).get(f'expect_{param_name}')
expect_params[param_name] = param_arg[0] if param_arg else None
expect_params[param_name] = param_arg if param_arg else None
expect_params['length'] = send_params['length']
send_params['tcpopt_unaligned'] = args.send_tcpopt_unaligned
send_params['nop'] = args.send_nop
send_params['src_address'] = args.fromaddr[0] if args.fromaddr else None
send_params['src_address'] = args.fromaddr if args.fromaddr else None
# We may not have a default route. Tell scapy where to start looking for routes
sp.conf.iface6 = send_if
sp.conf.iface6 = args.sendif
# Configuration sanity checking.
if not (reply_ifs or recv_ifs):
if not (args.replyif or args.recvif):
raise Exception('With no reply or recv interface specified no traffic '
'can be sniffed and verified!'
)
@ -514,22 +507,22 @@ def main():
else:
defrag = False
if recv_ifs:
if args.recvif:
sniffer_params = copy(expect_params)
sniffer_params['src_address'] = None
sniffer_params['dst_address'] = dst_address
for iface in recv_ifs:
sniffer_params['dst_address'] = args.to
for iface in args.recvif:
LOGGER.debug(f'Installing receive sniffer on {iface}')
sniffers.append(
setup_sniffer(iface, args.ping_type, 'request',
sniffer_params, defrag,
))
if reply_ifs:
if args.replyif:
sniffer_params = copy(expect_params)
sniffer_params['src_address'] = dst_address
sniffer_params['src_address'] = args.to
sniffer_params['dst_address'] = None
for iface in reply_ifs:
for iface in args.replyif:
LOGGER.debug(f'Installing reply sniffer on {iface}')
sniffers.append(
setup_sniffer(iface, args.ping_type, 'reply',
@ -538,7 +531,7 @@ def main():
LOGGER.debug(f'Installed {len(sniffers)} sniffers')
send_ping(dst_address, send_if, args.ping_type, send_params)
send_ping(args.to, args.sendif, args.ping_type, send_params)
err = 0
sniffer_num = 0