diff --git a/0243-virtio_user-check-netif-status.patch b/0243-virtio_user-check-netif-status.patch new file mode 100644 index 0000000..8d2273d --- /dev/null +++ b/0243-virtio_user-check-netif-status.patch @@ -0,0 +1,73 @@ +From 1b994a0e9cd2dfa59076b35e3e4c82b1a18c9e1d Mon Sep 17 00:00:00 2001 +From: hkk +Date: Mon, 19 Aug 2024 16:34:54 +0800 +Subject: [PATCH] virtio_user: check netif status + +--- + src/lstack/core/lstack_virtio.c | 35 +++++++++++++++++++++++++++++++-- + 1 file changed, 33 insertions(+), 2 deletions(-) + +diff --git a/src/lstack/core/lstack_virtio.c b/src/lstack/core/lstack_virtio.c +index 9862b48..4a91ed7 100644 +--- a/src/lstack/core/lstack_virtio.c ++++ b/src/lstack/core/lstack_virtio.c +@@ -26,6 +26,9 @@ + #define VIRTIO_DPDK_PARA_LEN 256 + #define VIRTIO_TX_RX_RING_SIZE 1024 + ++#define VIRTIO_NETIF_CHECK_MAX_TIMES 10 ++#define VIRTIO_NETIF_CMD_OUTPUT 4096 ++ + #define VIRTIO_MASK_BITS(mask) (32 - __builtin_clz(mask)) + + static struct virtio_instance g_virtio_instance = {0}; +@@ -123,6 +126,27 @@ static int virtio_set_ipv4_addr(void) + return 0; + } + ++static int virtio_ipv6_is_tentative(void) ++{ ++ FILE *fp; ++ char output[VIRTIO_NETIF_CMD_OUTPUT] = {0}; ++ int not_ready = 0; ++ /* ipv6 tentative state means not ready */ ++ const char *cmd = "ip a |grep tentative"; ++ ++ fp = popen(cmd, "r"); ++ if (fp == NULL) { ++ LSTACK_LOG(ERR, LSTACK, "%s execution failed \n", cmd); ++ return -1; ++ } ++ ++ if (fgets(output, sizeof(output), fp) != NULL) { ++ not_ready = 1; ++ } ++ pclose(fp); ++ return not_ready; ++} ++ + static int virtio_netif_up(void) + { + int sockfd = posix_api->socket_fn(AF_INET, SOCK_DGRAM, 0); +@@ -151,9 +175,16 @@ static int virtio_netif_up(void) + /* + * For virtio_user IPv6 addresses, the kernel will check if they are valid, + * so wait a few seconds for the address status to change from scope global tentative to scope global. +- * 3:systerm check ipv6 addr + */ +- sleep(3); ++ for (int i = 0; i < VIRTIO_NETIF_CHECK_MAX_TIMES; i++) { ++ ret = virtio_ipv6_is_tentative(); ++ if (ret == 0) { ++ break; ++ } else if (ret < 0) { ++ return -1; ++ } ++ sleep(1); ++ } + + return 0; + } +-- +2.33.0 + diff --git a/0244-virtio-solve-compilation-error-in-2003sp3.patch b/0244-virtio-solve-compilation-error-in-2003sp3.patch new file mode 100644 index 0000000..9112e37 --- /dev/null +++ b/0244-virtio-solve-compilation-error-in-2003sp3.patch @@ -0,0 +1,24 @@ +From 4a30424a4ce6135cbd118bc36f00b35955255f41 Mon Sep 17 00:00:00 2001 +From: hantwofish +Date: Tue, 20 Aug 2024 17:28:37 +0800 +Subject: [PATCH] virtio: solve compilation error in 2003sp3 + +--- + src/lstack/core/lstack_virtio.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/lstack/core/lstack_virtio.c b/src/lstack/core/lstack_virtio.c +index 4a91ed7..7a8d947 100644 +--- a/src/lstack/core/lstack_virtio.c ++++ b/src/lstack/core/lstack_virtio.c +@@ -15,6 +15,7 @@ + #include + #include + #include ++#include + #include + #include "lstack_cfg.h" + #include "lstack_log.h" +-- +2.33.0 + diff --git a/gazelle.spec b/gazelle.spec index 866b8dc..c7fec3a 100644 --- a/gazelle.spec +++ b/gazelle.spec @@ -2,7 +2,7 @@ Name: gazelle Version: 1.0.2 -Release: 55 +Release: 56 Summary: gazelle is a high performance user-mode stack License: MulanPSL-2.0 URL: https://gitee.com/openeuler/gazelle @@ -259,6 +259,8 @@ Patch9239: 0239-WRAP-fix-ltran-mode-did-not-bind-kernel-while-open-k.patch Patch9240: 0240-WRAP-fix-bind-log-error.patch Patch9241: 0241-virtio-mod-virtio_user_name-when-multi-process-is-on.patch Patch9242: 0242-fix-redis-coredump-ctrl-c-during-the-pressure-test.patch +Patch9243: 0243-virtio_user-check-netif-status.patch +Patch9244: 0244-virtio-solve-compilation-error-in-2003sp3.patch %description %{name} is a high performance user-mode stack. @@ -300,6 +302,10 @@ install -Dpm 0640 %{_builddir}/%{name}-%{version}/src/ltran/ltran.conf %{b %config(noreplace) %{conf_path}/ltran.conf %changelog +* Fri Aug 23 2024 yinbin6 - 1.0.2-56 +- virtio: solve compilation error in 2003sp3 +- virtio_user: check netif status + * Fri Aug 16 2024 yinbin6 - 1.0.2-55 - virtio: mod virtio_user_name when multi process is on - WRAP: fix bind log error