From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-19.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A4B12C433E0 for ; Thu, 14 Jan 2021 03:10:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5F0792368A for ; Thu, 14 Jan 2021 03:10:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726003AbhANDKl (ORCPT ); Wed, 13 Jan 2021 22:10:41 -0500 Received: from mail.kernel.org ([198.145.29.99]:52756 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726113AbhANDKg (ORCPT ); Wed, 13 Jan 2021 22:10:36 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 4565123715; Thu, 14 Jan 2021 03:09:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1610593795; bh=AXL/SfAhp3iipMrDDhPgxZ5OeO7xe0IeTSwbThZ9jfU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SbO43dEffUsTzN7g5jFF4HIHMeBx6stdZnVNGIwixyABVBjWBv9Mjbf6vkTG3MYdc mtIoCuKQWdZSRyV8Nt204AMTbYBOD8Zt3wgPROLCbrLiwFHf/MOD+ST1LHvcM3uq5N ZCqBi3TWhExMsra/SU4sZ0yhjj5yNOgvGm1RmIGth8I+ghZUUc1KPYA3g56PR77YyC 3ZXkL0+oUptrNhA+wRRjWY3mmekgkZ7KUmXSNtpvsO5HxHSV9YMs49uoTkiv+hMHna gTTZAR07CiJcXnPKrwuT2HwUldzkYZ2p8uzUdhFhsMVwyLaVcyU+JC1FjqSHQ7EQXe xFgXima9MvdMw== From: David Ahern To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, schoen@loyalty.org, David Ahern Subject: [PATCH net-next v4 01/13] selftests: Move device validation in nettest Date: Wed, 13 Jan 2021 20:09:37 -0700 Message-Id: <20210114030949.54425-2-dsahern@kernel.org> X-Mailer: git-send-email 2.24.3 (Apple Git-128) In-Reply-To: <20210114030949.54425-1-dsahern@kernel.org> References: <20210114030949.54425-1-dsahern@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: David Ahern Later patch adds support for switching network namespaces before running client, server or both. Device validations need to be done after the network namespace switch, so add a helper to do it and invoke in server and client code versus inline with argument parsing. Move related argument checks as well. Signed-off-by: David Ahern --- tools/testing/selftests/net/nettest.c | 64 ++++++++++++++++++--------- 1 file changed, 42 insertions(+), 22 deletions(-) diff --git a/tools/testing/selftests/net/nettest.c b/tools/testing/selftests/net/nettest.c index f75c53ce0a2d..2bb06a3e6880 100644 --- a/tools/testing/selftests/net/nettest.c +++ b/tools/testing/selftests/net/nettest.c @@ -84,6 +84,7 @@ struct sock_args { unsigned int prefix_len; /* expected addresses and device index for connection */ + const char *expected_dev; int expected_ifindex; /* local address */ @@ -522,6 +523,33 @@ static int str_to_uint(const char *str, int min, int max, unsigned int *value) return -1; } +static int resolve_devices(struct sock_args *args) +{ + if (args->dev) { + args->ifindex = get_ifidx(args->dev); + if (args->ifindex < 0) { + log_error("Invalid device name\n"); + return 1; + } + } + + if (args->expected_dev) { + unsigned int tmp; + + if (str_to_uint(args->expected_dev, 0, INT_MAX, &tmp) == 0) { + args->expected_ifindex = (int)tmp; + } else { + args->expected_ifindex = get_ifidx(args->expected_dev); + if (args->expected_ifindex < 0) { + fprintf(stderr, "Invalid expected device\n"); + return 1; + } + } + } + + return 0; +} + static int expected_addr_match(struct sockaddr *sa, void *expected, const char *desc) { @@ -1190,6 +1218,9 @@ static int do_server(struct sock_args *args) fd_set rfds; int rc; + if (resolve_devices(args)) + return 1; + if (prog_timeout) ptval = &timeout; @@ -1375,6 +1406,16 @@ static int do_client(struct sock_args *args) return 1; } + if (resolve_devices(args)) + return 1; + + if ((args->use_setsockopt || args->use_cmsg) && !args->ifindex) { + fprintf(stderr, "Device binding not specified\n"); + return 1; + } + if (args->use_setsockopt || args->use_cmsg) + args->dev = NULL; + switch (args->version) { case AF_INET: sin.sin_port = htons(args->port); @@ -1703,11 +1744,6 @@ int main(int argc, char *argv[]) break; case 'd': args.dev = optarg; - args.ifindex = get_ifidx(optarg); - if (args.ifindex < 0) { - fprintf(stderr, "Invalid device name\n"); - return 1; - } break; case 'i': interactive = 1; @@ -1738,16 +1774,7 @@ int main(int argc, char *argv[]) break; case '2': - if (str_to_uint(optarg, 0, INT_MAX, &tmp) == 0) { - args.expected_ifindex = (int)tmp; - } else { - args.expected_ifindex = get_ifidx(optarg); - if (args.expected_ifindex < 0) { - fprintf(stderr, - "Invalid expected device\n"); - return 1; - } - } + args.expected_dev = optarg; break; case 'q': quiet = 1; @@ -1769,13 +1796,6 @@ int main(int argc, char *argv[]) return 1; } - if ((args.use_setsockopt || args.use_cmsg) && !args.ifindex) { - fprintf(stderr, "Device binding not specified\n"); - return 1; - } - if (args.use_setsockopt || args.use_cmsg) - args.dev = NULL; - if (iter == 0) { fprintf(stderr, "Invalid number of messages to send\n"); return 1; -- 2.24.3 (Apple Git-128)