diff options
Diffstat (limited to 'tools/testing/selftests/bpf/network_helpers.c')
| -rw-r--r-- | tools/testing/selftests/bpf/network_helpers.c | 29 | 
1 files changed, 21 insertions, 8 deletions
diff --git a/tools/testing/selftests/bpf/network_helpers.c b/tools/testing/selftests/bpf/network_helpers.c index a105c0cd008a..da72a3a66230 100644 --- a/tools/testing/selftests/bpf/network_helpers.c +++ b/tools/testing/selftests/bpf/network_helpers.c @@ -270,14 +270,23 @@ int connect_to_fd_opts(int server_fd, const struct network_helper_opts *opts)  		opts = &default_opts;  	optlen = sizeof(type); -	if (getsockopt(server_fd, SOL_SOCKET, SO_TYPE, &type, &optlen)) { -		log_err("getsockopt(SOL_TYPE)"); -		return -1; + +	if (opts->type) { +		type = opts->type; +	} else { +		if (getsockopt(server_fd, SOL_SOCKET, SO_TYPE, &type, &optlen)) { +			log_err("getsockopt(SOL_TYPE)"); +			return -1; +		}  	} -	if (getsockopt(server_fd, SOL_SOCKET, SO_PROTOCOL, &protocol, &optlen)) { -		log_err("getsockopt(SOL_PROTOCOL)"); -		return -1; +	if (opts->proto) { +		protocol = opts->proto; +	} else { +		if (getsockopt(server_fd, SOL_SOCKET, SO_PROTOCOL, &protocol, &optlen)) { +			log_err("getsockopt(SOL_PROTOCOL)"); +			return -1; +		}  	}  	addrlen = sizeof(addr); @@ -301,8 +310,9 @@ int connect_to_fd_opts(int server_fd, const struct network_helper_opts *opts)  		       strlen(opts->cc) + 1))  		goto error_close; -	if (connect_fd_to_addr(fd, &addr, addrlen, opts->must_fail)) -		goto error_close; +	if (!opts->noconnect) +		if (connect_fd_to_addr(fd, &addr, addrlen, opts->must_fail)) +			goto error_close;  	return fd; @@ -423,6 +433,9 @@ fail:  void close_netns(struct nstoken *token)  { +	if (!token) +		return; +  	ASSERT_OK(setns(token->orig_netns_fd, CLONE_NEWNET), "setns");  	close(token->orig_netns_fd);  	free(token);  |