aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/net/nettest.c
diff options
context:
space:
mode:
authorDavid Ahern <dsahern@gmail.com>2021-01-13 20:09:37 -0700
committerJakub Kicinski <kuba@kernel.org>2021-01-14 16:26:47 -0800
commit3a70a6451551c974b1e9237c9ceb04777c83a12e (patch)
tree7c42a283f033080781114efe1a61419b4bd04e67 /tools/testing/selftests/net/nettest.c
parentMerge branch 'add-100-base-x-mode' (diff)
downloadlinux-dev-3a70a6451551c974b1e9237c9ceb04777c83a12e.tar.xz
linux-dev-3a70a6451551c974b1e9237c9ceb04777c83a12e.zip
selftests: Move device validation in nettest
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 <dsahern@gmail.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'tools/testing/selftests/net/nettest.c')
-rw-r--r--tools/testing/selftests/net/nettest.c64
1 files 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;