diff options
Diffstat (limited to 'tools/testing/selftests/net/msg_zerocopy.c')
-rw-r--r-- | tools/testing/selftests/net/msg_zerocopy.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/tools/testing/selftests/net/msg_zerocopy.c b/tools/testing/selftests/net/msg_zerocopy.c index 3ab6ec403905..e11fe84de0fd 100644 --- a/tools/testing/selftests/net/msg_zerocopy.c +++ b/tools/testing/selftests/net/msg_zerocopy.c | |||
@@ -259,22 +259,28 @@ static int setup_ip6h(struct ipv6hdr *ip6h, uint16_t payload_len) | |||
259 | return sizeof(*ip6h); | 259 | return sizeof(*ip6h); |
260 | } | 260 | } |
261 | 261 | ||
262 | static void setup_sockaddr(int domain, const char *str_addr, void *sockaddr) | 262 | |
263 | static void setup_sockaddr(int domain, const char *str_addr, | ||
264 | struct sockaddr_storage *sockaddr) | ||
263 | { | 265 | { |
264 | struct sockaddr_in6 *addr6 = (void *) sockaddr; | 266 | struct sockaddr_in6 *addr6 = (void *) sockaddr; |
265 | struct sockaddr_in *addr4 = (void *) sockaddr; | 267 | struct sockaddr_in *addr4 = (void *) sockaddr; |
266 | 268 | ||
267 | switch (domain) { | 269 | switch (domain) { |
268 | case PF_INET: | 270 | case PF_INET: |
271 | memset(addr4, 0, sizeof(*addr4)); | ||
269 | addr4->sin_family = AF_INET; | 272 | addr4->sin_family = AF_INET; |
270 | addr4->sin_port = htons(cfg_port); | 273 | addr4->sin_port = htons(cfg_port); |
271 | if (inet_pton(AF_INET, str_addr, &(addr4->sin_addr)) != 1) | 274 | if (str_addr && |
275 | inet_pton(AF_INET, str_addr, &(addr4->sin_addr)) != 1) | ||
272 | error(1, 0, "ipv4 parse error: %s", str_addr); | 276 | error(1, 0, "ipv4 parse error: %s", str_addr); |
273 | break; | 277 | break; |
274 | case PF_INET6: | 278 | case PF_INET6: |
279 | memset(addr6, 0, sizeof(*addr6)); | ||
275 | addr6->sin6_family = AF_INET6; | 280 | addr6->sin6_family = AF_INET6; |
276 | addr6->sin6_port = htons(cfg_port); | 281 | addr6->sin6_port = htons(cfg_port); |
277 | if (inet_pton(AF_INET6, str_addr, &(addr6->sin6_addr)) != 1) | 282 | if (str_addr && |
283 | inet_pton(AF_INET6, str_addr, &(addr6->sin6_addr)) != 1) | ||
278 | error(1, 0, "ipv6 parse error: %s", str_addr); | 284 | error(1, 0, "ipv6 parse error: %s", str_addr); |
279 | break; | 285 | break; |
280 | default: | 286 | default: |
@@ -603,6 +609,7 @@ static void parse_opts(int argc, char **argv) | |||
603 | sizeof(struct tcphdr) - | 609 | sizeof(struct tcphdr) - |
604 | 40 /* max tcp options */; | 610 | 40 /* max tcp options */; |
605 | int c; | 611 | int c; |
612 | char *daddr = NULL, *saddr = NULL; | ||
606 | 613 | ||
607 | cfg_payload_len = max_payload_len; | 614 | cfg_payload_len = max_payload_len; |
608 | 615 | ||
@@ -627,7 +634,7 @@ static void parse_opts(int argc, char **argv) | |||
627 | cfg_cpu = strtol(optarg, NULL, 0); | 634 | cfg_cpu = strtol(optarg, NULL, 0); |
628 | break; | 635 | break; |
629 | case 'D': | 636 | case 'D': |
630 | setup_sockaddr(cfg_family, optarg, &cfg_dst_addr); | 637 | daddr = optarg; |
631 | break; | 638 | break; |
632 | case 'i': | 639 | case 'i': |
633 | cfg_ifindex = if_nametoindex(optarg); | 640 | cfg_ifindex = if_nametoindex(optarg); |
@@ -638,7 +645,7 @@ static void parse_opts(int argc, char **argv) | |||
638 | cfg_cork_mixed = true; | 645 | cfg_cork_mixed = true; |
639 | break; | 646 | break; |
640 | case 'p': | 647 | case 'p': |
641 | cfg_port = htons(strtoul(optarg, NULL, 0)); | 648 | cfg_port = strtoul(optarg, NULL, 0); |
642 | break; | 649 | break; |
643 | case 'r': | 650 | case 'r': |
644 | cfg_rx = true; | 651 | cfg_rx = true; |
@@ -647,7 +654,7 @@ static void parse_opts(int argc, char **argv) | |||
647 | cfg_payload_len = strtoul(optarg, NULL, 0); | 654 | cfg_payload_len = strtoul(optarg, NULL, 0); |
648 | break; | 655 | break; |
649 | case 'S': | 656 | case 'S': |
650 | setup_sockaddr(cfg_family, optarg, &cfg_src_addr); | 657 | saddr = optarg; |
651 | break; | 658 | break; |
652 | case 't': | 659 | case 't': |
653 | cfg_runtime_ms = 200 + strtoul(optarg, NULL, 10) * 1000; | 660 | cfg_runtime_ms = 200 + strtoul(optarg, NULL, 10) * 1000; |
@@ -660,6 +667,8 @@ static void parse_opts(int argc, char **argv) | |||
660 | break; | 667 | break; |
661 | } | 668 | } |
662 | } | 669 | } |
670 | setup_sockaddr(cfg_family, daddr, &cfg_dst_addr); | ||
671 | setup_sockaddr(cfg_family, saddr, &cfg_src_addr); | ||
663 | 672 | ||
664 | if (cfg_payload_len > max_payload_len) | 673 | if (cfg_payload_len > max_payload_len) |
665 | error(1, 0, "-s: payload exceeds max (%d)", max_payload_len); | 674 | error(1, 0, "-s: payload exceeds max (%d)", max_payload_len); |