diff options
Diffstat (limited to 'tools/testing/selftests/net/nettest.c')
| -rw-r--r-- | tools/testing/selftests/net/nettest.c | 28 | 
1 files changed, 26 insertions, 2 deletions
diff --git a/tools/testing/selftests/net/nettest.c b/tools/testing/selftests/net/nettest.c index bd6288302094..b599003eb5ba 100644 --- a/tools/testing/selftests/net/nettest.c +++ b/tools/testing/selftests/net/nettest.c @@ -28,6 +28,7 @@  #include <unistd.h>  #include <time.h>  #include <errno.h> +#include <getopt.h>  #include <linux/xfrm.h>  #include <linux/ipsec.h> @@ -101,6 +102,8 @@ struct sock_args {  		struct sockaddr_in6 v6;  	} md5_prefix;  	unsigned int prefix_len; +	/* 0: default, -1: force off, +1: force on */ +	int bind_key_ifindex;  	/* expected addresses and device index for connection */  	const char *expected_dev; @@ -271,11 +274,14 @@ static int tcp_md5sig(int sd, void *addr, socklen_t alen, struct sock_args *args  	}  	memcpy(&md5sig.tcpm_addr, addr, alen); -	if (args->ifindex) { +	if ((args->ifindex && args->bind_key_ifindex >= 0) || args->bind_key_ifindex >= 1) {  		opt = TCP_MD5SIG_EXT;  		md5sig.tcpm_flags |= TCP_MD5SIG_FLAG_IFINDEX;  		md5sig.tcpm_ifindex = args->ifindex; +		log_msg("TCP_MD5SIG_FLAG_IFINDEX set tcpm_ifindex=%d\n", md5sig.tcpm_ifindex); +	} else { +		log_msg("TCP_MD5SIG_FLAG_IFINDEX off\n", md5sig.tcpm_ifindex);  	}  	rc = setsockopt(sd, IPPROTO_TCP, opt, &md5sig, sizeof(md5sig)); @@ -1822,6 +1828,14 @@ static int ipc_parent(int cpid, int fd, struct sock_args *args)  }  #define GETOPT_STR  "sr:l:c:p:t:g:P:DRn:M:X:m:d:I:BN:O:SCi6xL:0:1:2:3:Fbq" +#define OPT_FORCE_BIND_KEY_IFINDEX 1001 +#define OPT_NO_BIND_KEY_IFINDEX 1002 + +static struct option long_opts[] = { +	{"force-bind-key-ifindex", 0, 0, OPT_FORCE_BIND_KEY_IFINDEX}, +	{"no-bind-key-ifindex", 0, 0, OPT_NO_BIND_KEY_IFINDEX}, +	{0, 0, 0, 0} +};  static void print_usage(char *prog)  { @@ -1858,6 +1872,10 @@ static void print_usage(char *prog)  	"    -M password   use MD5 sum protection\n"  	"    -X password   MD5 password for client mode\n"  	"    -m prefix/len prefix and length to use for MD5 key\n" +	"    --no-bind-key-ifindex: Force TCP_MD5SIG_FLAG_IFINDEX off\n" +	"    --force-bind-key-ifindex: Force TCP_MD5SIG_FLAG_IFINDEX on\n" +	"        (default: only if -I is passed)\n" +	"\n"  	"    -g grp        multicast group (e.g., 239.1.1.1)\n"  	"    -i            interactive mode (default is echo and terminate)\n"  	"\n" @@ -1893,7 +1911,7 @@ int main(int argc, char *argv[])  	 * process input args  	 */ -	while ((rc = getopt(argc, argv, GETOPT_STR)) != -1) { +	while ((rc = getopt_long(argc, argv, GETOPT_STR, long_opts, NULL)) != -1) {  		switch (rc) {  		case 'B':  			both_mode = 1; @@ -1966,6 +1984,12 @@ int main(int argc, char *argv[])  		case 'M':  			args.password = optarg;  			break; +		case OPT_FORCE_BIND_KEY_IFINDEX: +			args.bind_key_ifindex = 1; +			break; +		case OPT_NO_BIND_KEY_IFINDEX: +			args.bind_key_ifindex = -1; +			break;  		case 'X':  			args.client_pw = optarg;  			break;  | 
