From: Geliang Tang <tanggeliang@kylinos.cn>
To enable easy MPTCP socket creation in MPTCP TLS tests, two protocol
parameters (cli_proto and srv_proto) have been added to ulp_sock_pair().
These are passed as third arguments of socket(): 0 creates TCP sockets,
IPPROTO_MPTCP creates MPTCP sockets.
A new variant "mptcp" is added both in FIXTURE_VARIANT(tls) to control
whether to create MPTCP sockets or not for tests.
Co-developed-by: Gang Yan <yangang@kylinos.cn>
Signed-off-by: Gang Yan <yangang@kylinos.cn>
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
tools/testing/selftests/net/tls.c | 45 +++++++++++++++++++++++++++----
1 file changed, 40 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/net/tls.c b/tools/testing/selftests/net/tls.c
index 9e2ccea13d70..0d19e5582d3d 100644
--- a/tools/testing/selftests/net/tls.c
+++ b/tools/testing/selftests/net/tls.c
@@ -26,6 +26,10 @@
#define TLS_PAYLOAD_MAX_LEN 16384
#define SOL_TLS 282
+#ifndef IPPROTO_MPTCP
+#define IPPROTO_MPTCP 262
+#endif
+
static int fips_enabled;
struct tls_crypto_info_keys {
@@ -108,8 +112,9 @@ static void memrnd(void *s, size_t n)
*byte++ = rand();
}
-static void ulp_sock_pair(struct __test_metadata *_metadata,
- int *fd, int *cfd, bool *notls)
+static void __ulp_sock_pair(struct __test_metadata *_metadata,
+ int *fd, int *cfd, bool *notls,
+ int cli_proto, int srv_proto)
{
struct sockaddr_in addr;
socklen_t len;
@@ -122,8 +127,8 @@ static void ulp_sock_pair(struct __test_metadata *_metadata,
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = 0;
- *fd = socket(AF_INET, SOCK_STREAM, 0);
- sfd = socket(AF_INET, SOCK_STREAM, 0);
+ *fd = socket(AF_INET, SOCK_STREAM, cli_proto);
+ sfd = socket(AF_INET, SOCK_STREAM, srv_proto);
ret = bind(sfd, &addr, sizeof(addr));
ASSERT_EQ(ret, 0);
@@ -153,6 +158,12 @@ static void ulp_sock_pair(struct __test_metadata *_metadata,
ASSERT_EQ(ret, 0);
}
+static void ulp_sock_pair(struct __test_metadata *_metadata,
+ int *fd, int *cfd, bool *notls)
+{
+ __ulp_sock_pair(_metadata, fd, cfd, notls, 0, 0);
+}
+
/* Produce a basic cmsg */
static int tls_send_cmsg(int fd, unsigned char record_type,
void *data, size_t len, int flags)
@@ -310,6 +321,7 @@ FIXTURE_VARIANT(tls)
uint16_t tls_version;
uint16_t cipher_type;
bool nopad, fips_non_compliant;
+ bool mptcp;
};
FIXTURE_VARIANT_ADD(tls, 12_aes_gcm)
@@ -395,6 +407,24 @@ FIXTURE_VARIANT_ADD(tls, 12_aria_gcm_256)
.cipher_type = TLS_CIPHER_ARIA_GCM_256,
};
+static bool is_mptcp_enable(struct __test_metadata *_metadata)
+{
+ char buf[16] = { 0 };
+ ssize_t n;
+ int fd;
+
+ fd = open("/proc/sys/net/mptcp/enabled", O_RDONLY);
+ if (fd <= 0)
+ return false;
+
+ n = read(fd, buf, sizeof(buf) - 1);
+ if (n <= 0)
+ return false;
+
+ close(fd);
+ return (atoi(buf) == 1);
+}
+
FIXTURE_SETUP(tls)
{
struct tls_crypto_info_keys tls12;
@@ -404,10 +434,15 @@ FIXTURE_SETUP(tls)
if (fips_enabled && variant->fips_non_compliant)
SKIP(return, "Unsupported cipher in FIPS mode");
+ if (variant->mptcp && !is_mptcp_enable(_metadata))
+ SKIP(return, "no MPTCP support");
+
tls_crypto_info_init(variant->tls_version, variant->cipher_type,
&tls12, 0);
- ulp_sock_pair(_metadata, &self->fd, &self->cfd, &self->notls);
+ __ulp_sock_pair(_metadata, &self->fd, &self->cfd, &self->notls,
+ variant->mptcp ? IPPROTO_MPTCP : 0,
+ variant->mptcp ? IPPROTO_MPTCP : 0);
if (self->notls)
return;
--
2.51.0