Fetch the repository succeeded.
This action will force synchronization from src-openEuler/criu, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
From b766a8d6b04e9c358cd221b68405a205156c1fe2 Mon Sep 17 00:00:00 2001
From: "fu.lin" <fulin10@huawei.com>
Date: Thu, 17 Feb 2022 17:19:46 +0800
Subject: [PATCH 69/72] zdtm: add share port testcase
---
test/zdtm/customization/Makefile | 3 +-
test/zdtm/customization/tcp00.c | 101 +++++++++++++++++++++++++++++
test/zdtm/customization/tcp00.desc | 1 +
3 files changed, 104 insertions(+), 1 deletion(-)
create mode 100644 test/zdtm/customization/tcp00.c
create mode 100644 test/zdtm/customization/tcp00.desc
diff --git a/test/zdtm/customization/Makefile b/test/zdtm/customization/Makefile
index 728646b..1111908 100644
--- a/test/zdtm/customization/Makefile
+++ b/test/zdtm/customization/Makefile
@@ -13,7 +13,8 @@ TST_NOFILE = \
maps008 \
notifier00 \
chardev00 \
- infiniband_with_unix_sk
+ infiniband_with_unix_sk \
+ tcp00
TST_FILE = \
maps00 \
diff --git a/test/zdtm/customization/tcp00.c b/test/zdtm/customization/tcp00.c
new file mode 100644
index 0000000..d1ead82
--- /dev/null
+++ b/test/zdtm/customization/tcp00.c
@@ -0,0 +1,101 @@
+#include <stdio.h>
+#include <stdbool.h>
+#include <unistd.h>
+#include <string.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include "zdtmtst.h"
+
+#define PORT 17173
+
+const char *test_doc = "Test TCP SO_REUSEADDR checkpoint/restore using `share_{src,dst}_ports`";
+
+static int sock_bind_and_listen(void)
+{
+ int serv_sk;
+ int optval = 1;
+ struct sockaddr_in serv = {
+ .sin_family = AF_INET,
+ .sin_addr.s_addr = htonl(INADDR_ANY),
+ .sin_port = htons(PORT),
+ };
+
+ serv_sk = socket(AF_INET, SOCK_STREAM, 0);
+ if (serv_sk < 0) {
+ pr_perror("server socket failed");
+ exit(1);
+ }
+
+ if (setsockopt(serv_sk, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0) {
+ pr_perror("setsockopt");
+ exit(1);
+ }
+
+ if (bind(serv_sk, (struct sockaddr *)&serv, sizeof(serv)) < 0) {
+ pr_perror("bind");
+ exit(1);
+ }
+
+ if (listen(serv_sk, 5) != 0) {
+ pr_perror("listen");
+ exit(1);
+ }
+
+ return serv_sk;
+}
+
+static void client_connect(void)
+{
+ int sk;
+ struct sockaddr_in sockaddr = {
+ .sin_family = AF_INET,
+ };
+
+ sk = socket(AF_INET, SOCK_STREAM, 0);
+ if (sk < 0) {
+ pr_perror("client socket failed");
+ exit(1);
+ }
+
+ sockaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
+ sockaddr.sin_port = htons(PORT);
+
+ if (connect(sk, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) < 0) {
+ pr_perror("connect failed");
+ exit(1);
+ }
+
+ close(sk);
+}
+
+int main(int argc, char *argv[])
+{
+ int serv_sk;
+ int optval = 0;
+ socklen_t len = sizeof(optval);
+
+ test_init(argc, argv);
+
+ serv_sk = sock_bind_and_listen();
+
+ test_msg("listen 0.0.0.0: %d\n", PORT);
+ /* create CLOSE-WAIT status socket */
+ client_connect();
+
+ test_daemon();
+ test_waitsig();
+
+ if (getsockopt(serv_sk, SOL_SOCKET, SO_REUSEADDR, &optval, &len) != 0) {
+ pr_perror("getsockopt failed");
+ return -1;
+ }
+
+ if (optval != 1) {
+ pr_err("SO_REUSEADDR flag is %d, should 1", optval);
+ } else
+ pass();
+
+ return 0;
+}
\ No newline at end of file
diff --git a/test/zdtm/customization/tcp00.desc b/test/zdtm/customization/tcp00.desc
new file mode 100644
index 0000000..bc3b4a8
--- /dev/null
+++ b/test/zdtm/customization/tcp00.desc
@@ -0,0 +1 @@
+{'arch': 'aarch64', 'opts': '--use-fork-pid --share-src-ports=17173 --share-dst-ports=17173 --skip-in-flight', 'flavor': 'h', 'sysfs': '/sys/kernel/repair_share_socket'}
--
2.34.1
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。