add muti nic and fix bugs
(cherry picked from commit 680f9fbf06160e2e9dda88d3b8238c53680ab899)
This commit is contained in:
parent
1bb2ace36f
commit
e417d29170
46
0122-fix-uninit-stack-port_id-when-use-mutil-NIC.patch
Normal file
46
0122-fix-uninit-stack-port_id-when-use-mutil-NIC.patch
Normal file
@ -0,0 +1,46 @@
|
||||
From a5c1ea6f66d8ae22b411154409c463899b8076c4 Mon Sep 17 00:00:00 2001
|
||||
From: kircher <majun65@huawei.com>
|
||||
Date: Thu, 10 Nov 2022 10:21:05 +0800
|
||||
Subject: [PATCH 07/20] fix uninit stack->port_id when use mutil NIC
|
||||
|
||||
---
|
||||
src/lstack/core/lstack_dpdk.c | 10 ++++++++++
|
||||
src/lstack/core/lstack_protocol_stack.c | 1 -
|
||||
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/lstack/core/lstack_dpdk.c b/src/lstack/core/lstack_dpdk.c
|
||||
index 77ae3eb..e187bca 100644
|
||||
--- a/src/lstack/core/lstack_dpdk.c
|
||||
+++ b/src/lstack/core/lstack_dpdk.c
|
||||
@@ -446,6 +446,16 @@ int32_t dpdk_ethdev_init(void)
|
||||
stack_group->rx_offload = eth_params->conf.rxmode.offloads;
|
||||
stack_group->tx_offload = eth_params->conf.txmode.offloads;
|
||||
|
||||
+ for (uint32_t i = 0; i < stack_group->stack_num; i++) {
|
||||
+ struct protocol_stack *stack = stack_group->stacks[i];
|
||||
+ if (likely(stack)) {
|
||||
+ stack->port_id = stack_group->port_id;
|
||||
+ } else {
|
||||
+ LSTACK_LOG(ERR, LSTACK, "empty stack at stack_num %d\n", i);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
ret = rte_eth_dev_configure(port_id, nb_queues, nb_queues, ð_params->conf);
|
||||
if (ret < 0) {
|
||||
LSTACK_LOG(ERR, LSTACK, "cannot config eth dev at port %d: %s\n", port_id, rte_strerror(-ret));
|
||||
diff --git a/src/lstack/core/lstack_protocol_stack.c b/src/lstack/core/lstack_protocol_stack.c
|
||||
index 3daa09f..03ed18e 100644
|
||||
--- a/src/lstack/core/lstack_protocol_stack.c
|
||||
+++ b/src/lstack/core/lstack_protocol_stack.c
|
||||
@@ -280,7 +280,6 @@ static int32_t init_stack_value(struct protocol_stack *stack, uint16_t queue_id)
|
||||
|
||||
stack->tid = rte_gettid();
|
||||
stack->queue_id = queue_id;
|
||||
- stack->port_id = stack_group->port_id;
|
||||
stack->cpu_id = get_global_cfg_params()->cpus[queue_id];
|
||||
stack->lwip_stats = &lwip_stats;
|
||||
|
||||
--
|
||||
2.23.0
|
||||
|
||||
25
0123-fix-memleak-in-dpdk_ethdev_init-unlikely-path.patch
Normal file
25
0123-fix-memleak-in-dpdk_ethdev_init-unlikely-path.patch
Normal file
@ -0,0 +1,25 @@
|
||||
From b82f1facd8fabf299719705602b0a2e354573af3 Mon Sep 17 00:00:00 2001
|
||||
From: kircher <majun65@huawei.com>
|
||||
Date: Thu, 10 Nov 2022 17:34:43 +0800
|
||||
Subject: [PATCH 09/20] fix memleak in dpdk_ethdev_init unlikely path
|
||||
|
||||
---
|
||||
src/lstack/core/lstack_dpdk.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/src/lstack/core/lstack_dpdk.c b/src/lstack/core/lstack_dpdk.c
|
||||
index e187bca..0198655 100644
|
||||
--- a/src/lstack/core/lstack_dpdk.c
|
||||
+++ b/src/lstack/core/lstack_dpdk.c
|
||||
@@ -452,6 +452,8 @@ int32_t dpdk_ethdev_init(void)
|
||||
stack->port_id = stack_group->port_id;
|
||||
} else {
|
||||
LSTACK_LOG(ERR, LSTACK, "empty stack at stack_num %d\n", i);
|
||||
+ stack_group->eth_params = NULL;
|
||||
+ free(eth_params);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
--
|
||||
2.23.0
|
||||
|
||||
38
0124-fix-epoll_wait-return-when-timeout-is-0.patch
Normal file
38
0124-fix-epoll_wait-return-when-timeout-is-0.patch
Normal file
@ -0,0 +1,38 @@
|
||||
From b37eb61864e0f54aff78ac11d20828cb57278753 Mon Sep 17 00:00:00 2001
|
||||
From: wu-changsheng <wuchangsheng2@huawei.com>
|
||||
Date: Sat, 12 Nov 2022 14:42:56 +0800
|
||||
Subject: [PATCH 10/20] fix epoll_wait return when timeout is 0
|
||||
|
||||
---
|
||||
src/lstack/api/lstack_epoll.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/src/lstack/api/lstack_epoll.c b/src/lstack/api/lstack_epoll.c
|
||||
index 6979e12..20ed224 100644
|
||||
--- a/src/lstack/api/lstack_epoll.c
|
||||
+++ b/src/lstack/api/lstack_epoll.c
|
||||
@@ -453,6 +453,10 @@ int32_t lstack_epoll_wait(int32_t epfd, struct epoll_event* events, int32_t maxe
|
||||
return lwip_num + kernel_num;
|
||||
}
|
||||
|
||||
+ if (timeout == 0) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
if (timeout < 0) {
|
||||
ret = pthread_mutex_lock(&wakeup->wait);
|
||||
} else {
|
||||
@@ -654,6 +658,10 @@ int32_t lstack_poll(struct pollfd *fds, nfds_t nfds, int32_t timeout)
|
||||
return lwip_num + kernel_num;
|
||||
}
|
||||
|
||||
+ if (timeout == 0) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
if (timeout < 0) {
|
||||
ret = pthread_mutex_lock(&wakeup->wait);
|
||||
} else {
|
||||
--
|
||||
2.23.0
|
||||
|
||||
46
0125-fix-gazelle-pdump-init-fail-with-dpdk-21.11.patch
Normal file
46
0125-fix-gazelle-pdump-init-fail-with-dpdk-21.11.patch
Normal file
@ -0,0 +1,46 @@
|
||||
From 732557e3671bed8a71153f4d4f81a650d5a2ecb9 Mon Sep 17 00:00:00 2001
|
||||
From: kircher <majun65@huawei.com>
|
||||
Date: Sat, 12 Nov 2022 16:09:49 +0800
|
||||
Subject: [PATCH 11/20] fix gazelle pdump init fail with dpdk-21.11
|
||||
|
||||
---
|
||||
src/lstack/core/lstack_dpdk.c | 16 ++++++++--------
|
||||
1 file changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/lstack/core/lstack_dpdk.c b/src/lstack/core/lstack_dpdk.c
|
||||
index 0198655..5dc2e54 100644
|
||||
--- a/src/lstack/core/lstack_dpdk.c
|
||||
+++ b/src/lstack/core/lstack_dpdk.c
|
||||
@@ -106,14 +106,6 @@ int32_t dpdk_eal_init(void)
|
||||
int32_t ret;
|
||||
struct cfg_params *global_params = get_global_cfg_params();
|
||||
|
||||
- ret = rte_pdump_init();
|
||||
- if (ret < 0) {
|
||||
- LSTACK_PRE_LOG(LSTACK_ERR, "rte_pdump_init failed init, rte_errno %d\n", rte_errno);
|
||||
- /* We do not care whether the pdump is successfully loaded. So, just print an alarm. */
|
||||
- } else {
|
||||
- LSTACK_PRE_LOG(LSTACK_INFO, "rte_pdump_init success\n");
|
||||
- }
|
||||
-
|
||||
ret = rte_eal_init(global_params->dpdk_argc, global_params->dpdk_argv);
|
||||
if (ret < 0) {
|
||||
if (rte_errno == EALREADY) {
|
||||
@@ -127,6 +119,14 @@ int32_t dpdk_eal_init(void)
|
||||
LSTACK_PRE_LOG(LSTACK_INFO, "dpdk_eal_init success\n");
|
||||
}
|
||||
|
||||
+ ret = rte_pdump_init();
|
||||
+ if (ret < 0) {
|
||||
+ LSTACK_PRE_LOG(LSTACK_ERR, "rte_pdump_init failed init, rte_errno %d\n", rte_errno);
|
||||
+ /* We do not care whether the pdump is successfully loaded. So, just print an alarm. */
|
||||
+ } else {
|
||||
+ LSTACK_PRE_LOG(LSTACK_INFO, "rte_pdump_init success\n");
|
||||
+ }
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.23.0
|
||||
|
||||
32
0126-fix-add-outdated-event.patch
Normal file
32
0126-fix-add-outdated-event.patch
Normal file
@ -0,0 +1,32 @@
|
||||
From 9a7cb66fd9912c3073f3299e8db4167b4882c020 Mon Sep 17 00:00:00 2001
|
||||
From: wu-changsheng <wuchangsheng2@huawei.com>
|
||||
Date: Sat, 12 Nov 2022 16:48:50 +0800
|
||||
Subject: [PATCH 12/20] fix add outdated event
|
||||
|
||||
---
|
||||
src/lstack/api/lstack_epoll.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/src/lstack/api/lstack_epoll.c b/src/lstack/api/lstack_epoll.c
|
||||
index 20ed224..759b0c0 100644
|
||||
--- a/src/lstack/api/lstack_epoll.c
|
||||
+++ b/src/lstack/api/lstack_epoll.c
|
||||
@@ -55,6 +55,15 @@ void add_sock_event(struct lwip_sock *sock, uint32_t event)
|
||||
|
||||
if (wakeup->type == WAKEUP_EPOLL) {
|
||||
pthread_spin_lock(&wakeup->event_list_lock);
|
||||
+
|
||||
+ /* app thread have read/write, event is outdated */
|
||||
+ if (event == EPOLLIN && sock->conn->state == NETCONN_LISTEN && !NETCONN_IS_DATAIN(sock)) {
|
||||
+ return;
|
||||
+ }
|
||||
+ if (event == EPOLLOUT && !NETCONN_IS_OUTIDLE(sock)) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
sock->events |= (event == EPOLLERR) ? (EPOLLIN | EPOLLERR) : (event & sock->epoll_events);
|
||||
if (list_is_null(&sock->event_list)) {
|
||||
list_add_node(&wakeup->event_list, &sock->event_list);
|
||||
--
|
||||
2.23.0
|
||||
|
||||
27
0127-revert-write-usleep.patch
Normal file
27
0127-revert-write-usleep.patch
Normal file
@ -0,0 +1,27 @@
|
||||
From fb2c23cc1be1171a70f650d2de6c7dad7539d2db Mon Sep 17 00:00:00 2001
|
||||
From: wu-changsheng <wuchangsheng2@huawei.com>
|
||||
Date: Sat, 12 Nov 2022 16:58:10 +0800
|
||||
Subject: [PATCH 13/20] revert write usleep
|
||||
|
||||
---
|
||||
src/lstack/core/lstack_lwip.c | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
diff --git a/src/lstack/core/lstack_lwip.c b/src/lstack/core/lstack_lwip.c
|
||||
index 0437187..087d09b 100644
|
||||
--- a/src/lstack/core/lstack_lwip.c
|
||||
+++ b/src/lstack/core/lstack_lwip.c
|
||||
@@ -307,10 +307,6 @@ ssize_t write_stack_data(struct lwip_sock *sock, const void *buf, size_t len)
|
||||
sock->wakeup->stat.app_write_cnt += send_pkt;
|
||||
}
|
||||
|
||||
- if (send_len == 0) {
|
||||
- /* 100: give up cpu to other threads, when send_ring is full */
|
||||
- usleep(100);
|
||||
- }
|
||||
return send_len;
|
||||
}
|
||||
|
||||
--
|
||||
2.23.0
|
||||
|
||||
83
0128-reduce-thread-variable-access.patch
Normal file
83
0128-reduce-thread-variable-access.patch
Normal file
@ -0,0 +1,83 @@
|
||||
From 16d35b610e00b18005049d80ad91bedb2ca64501 Mon Sep 17 00:00:00 2001
|
||||
From: wu-changsheng <wuchangsheng2@huawei.com>
|
||||
Date: Sat, 12 Nov 2022 17:24:02 +0800
|
||||
Subject: [PATCH 14/20] reduce thread variable access
|
||||
|
||||
---
|
||||
src/lstack/api/lstack_epoll.c | 4 ++--
|
||||
src/lstack/core/lstack_protocol_stack.c | 8 +++++---
|
||||
src/lstack/include/posix/lstack_epoll.h | 2 +-
|
||||
3 files changed, 8 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/lstack/api/lstack_epoll.c b/src/lstack/api/lstack_epoll.c
|
||||
index 759b0c0..ebad98e 100644
|
||||
--- a/src/lstack/api/lstack_epoll.c
|
||||
+++ b/src/lstack/api/lstack_epoll.c
|
||||
@@ -77,14 +77,14 @@ void add_sock_event(struct lwip_sock *sock, uint32_t event)
|
||||
}
|
||||
}
|
||||
|
||||
-void wakeup_stack_epoll(struct protocol_stack *stack)
|
||||
+void wakeup_stack_epoll(struct protocol_stack *stack, bool wakeup_thread_enable)
|
||||
{
|
||||
struct list_node *node, *temp;
|
||||
|
||||
list_for_each_safe(node, temp, &stack->wakeup_list) {
|
||||
struct wakeup_poll *wakeup = container_of((node - stack->queue_id), struct wakeup_poll, wakeup_list);
|
||||
|
||||
- if (!get_protocol_stack_group()->wakeup_enable) {
|
||||
+ if (!wakeup_thread_enable) {
|
||||
if (__atomic_load_n(&wakeup->in_wait, __ATOMIC_ACQUIRE)) {
|
||||
__atomic_store_n(&wakeup->in_wait, false, __ATOMIC_RELEASE);
|
||||
rte_mb();
|
||||
diff --git a/src/lstack/core/lstack_protocol_stack.c b/src/lstack/core/lstack_protocol_stack.c
|
||||
index 03ed18e..7a3955d 100644
|
||||
--- a/src/lstack/core/lstack_protocol_stack.c
|
||||
+++ b/src/lstack/core/lstack_protocol_stack.c
|
||||
@@ -423,17 +423,19 @@ static void* gazelle_stack_thread(void *arg)
|
||||
bool use_ltran_flag = use_ltran();
|
||||
bool kni_switch = get_global_cfg_params()->kni_switch;
|
||||
uint32_t wakeup_tick = 0;
|
||||
+ struct protocol_stack_group *stack_group = get_protocol_stack_group();
|
||||
+ bool wakeup_thread_enable = stack_group->wakeup_enable;
|
||||
|
||||
struct protocol_stack *stack = stack_thread_init(queue_id);
|
||||
if (stack == NULL) {
|
||||
/* exit in main thread, avoid create mempool and exit at the same time */
|
||||
set_init_fail();
|
||||
- sem_post(&get_protocol_stack_group()->all_init);
|
||||
+ sem_post(&stack_group->all_init);
|
||||
LSTACK_LOG(ERR, LSTACK, "stack_thread_init failed queue_id=%hu\n", queue_id);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- sem_post(&get_protocol_stack_group()->all_init);
|
||||
+ sem_post(&stack_group->all_init);
|
||||
LSTACK_LOG(INFO, LSTACK, "stack_%02hu init success\n", queue_id);
|
||||
|
||||
for (;;) {
|
||||
@@ -447,7 +449,7 @@ static void* gazelle_stack_thread(void *arg)
|
||||
|
||||
if ((wakeup_tick & 0xf) == 0) {
|
||||
wakeup_kernel_event(stack);
|
||||
- wakeup_stack_epoll(stack);
|
||||
+ wakeup_stack_epoll(stack, wakeup_thread_enable);
|
||||
}
|
||||
|
||||
/* KNI requests are generally low-rate I/Os,
|
||||
diff --git a/src/lstack/include/posix/lstack_epoll.h b/src/lstack/include/posix/lstack_epoll.h
|
||||
index d6c81a7..6aa9d30 100644
|
||||
--- a/src/lstack/include/posix/lstack_epoll.h
|
||||
+++ b/src/lstack/include/posix/lstack_epoll.h
|
||||
@@ -64,7 +64,7 @@ struct wakeup_poll {
|
||||
struct netconn;
|
||||
struct lwip_sock;
|
||||
void add_sock_event(struct lwip_sock *sock, uint32_t event);
|
||||
-void wakeup_stack_epoll(struct protocol_stack *stack);
|
||||
+void wakeup_stack_epoll(struct protocol_stack *stack, bool wakeup_thread_enable);
|
||||
int32_t lstack_epoll_create(int32_t size);
|
||||
int32_t lstack_epoll_create1(int32_t flags);
|
||||
int32_t lstack_epoll_ctl(int32_t epfd, int32_t op, int32_t fd, struct epoll_event *event);
|
||||
--
|
||||
2.23.0
|
||||
|
||||
38
0129-add-readv-and-readv-kernel.patch
Normal file
38
0129-add-readv-and-readv-kernel.patch
Normal file
@ -0,0 +1,38 @@
|
||||
From 9a07e4017b13fa4e502ea18f16d7e7f4b49e088e Mon Sep 17 00:00:00 2001
|
||||
From: compile_success <980965867@qq.com>
|
||||
Date: Sat, 12 Nov 2022 09:58:25 +0000
|
||||
Subject: [PATCH 15/20] add readv and readv kernel
|
||||
|
||||
---
|
||||
src/lstack/api/lstack_wrap.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/src/lstack/api/lstack_wrap.c b/src/lstack/api/lstack_wrap.c
|
||||
index 1a654e9..d48fee0 100644
|
||||
--- a/src/lstack/api/lstack_wrap.c
|
||||
+++ b/src/lstack/api/lstack_wrap.c
|
||||
@@ -339,6 +339,10 @@ static inline ssize_t do_read(int32_t s, void *mem, size_t len)
|
||||
|
||||
static inline ssize_t do_readv(int32_t s, const struct iovec *iov, int iovcnt)
|
||||
{
|
||||
+ if (select_path(s) != PATH_LWIP) {
|
||||
+ return posix_api->readv_fn(s, iov, iovcnt);
|
||||
+ }
|
||||
+
|
||||
struct msghdr msg;
|
||||
|
||||
msg.msg_name = NULL;
|
||||
@@ -371,6 +375,10 @@ static inline ssize_t do_write(int32_t s, const void *mem, size_t size)
|
||||
|
||||
static inline ssize_t do_writev(int32_t s, const struct iovec *iov, int iovcnt)
|
||||
{
|
||||
+ if (select_path(s) != PATH_LWIP) {
|
||||
+ return posix_api->writev_fn(s, iov, iovcnt);
|
||||
+ }
|
||||
+
|
||||
struct msghdr msg;
|
||||
|
||||
msg.msg_name = NULL;
|
||||
--
|
||||
2.23.0
|
||||
|
||||
30
0130-add-unlock-before-after.patch
Normal file
30
0130-add-unlock-before-after.patch
Normal file
@ -0,0 +1,30 @@
|
||||
From f77823af16f5eff88203a1c183d4bb5c67e3d3b0 Mon Sep 17 00:00:00 2001
|
||||
From: compile_success <980965867@qq.com>
|
||||
Date: Sat, 12 Nov 2022 13:27:36 +0000
|
||||
Subject: [PATCH 16/20] add unlock before after
|
||||
|
||||
---
|
||||
src/lstack/api/lstack_epoll.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/lstack/api/lstack_epoll.c b/src/lstack/api/lstack_epoll.c
|
||||
index ebad98e..8d5439b 100644
|
||||
--- a/src/lstack/api/lstack_epoll.c
|
||||
+++ b/src/lstack/api/lstack_epoll.c
|
||||
@@ -57,10 +57,12 @@ void add_sock_event(struct lwip_sock *sock, uint32_t event)
|
||||
pthread_spin_lock(&wakeup->event_list_lock);
|
||||
|
||||
/* app thread have read/write, event is outdated */
|
||||
- if (event == EPOLLIN && sock->conn->state == NETCONN_LISTEN && !NETCONN_IS_DATAIN(sock)) {
|
||||
+ if (event == EPOLLIN && sock->conn->state != NETCONN_LISTEN && !NETCONN_IS_DATAIN(sock)) {
|
||||
+ pthread_spin_unlock(&wakeup->event_list_lock);
|
||||
return;
|
||||
}
|
||||
if (event == EPOLLOUT && !NETCONN_IS_OUTIDLE(sock)) {
|
||||
+ pthread_spin_unlock(&wakeup->event_list_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
--
|
||||
2.23.0
|
||||
|
||||
432
0131-add-mutil-NIC-support-in-gazelle.patch
Normal file
432
0131-add-mutil-NIC-support-in-gazelle.patch
Normal file
@ -0,0 +1,432 @@
|
||||
From 29ce2b92248fce0ce90abbcf0625653a5327b232 Mon Sep 17 00:00:00 2001
|
||||
From: kircher <majun65@huawei.com>
|
||||
Date: Sat, 12 Nov 2022 21:12:03 +0800
|
||||
Subject: [PATCH 17/20] add mutil NIC support in gazelle
|
||||
|
||||
---
|
||||
src/common/gazelle_base_func.h | 2 +
|
||||
src/common/gazelle_opt.h | 2 +
|
||||
src/common/gazelle_parse_config.c | 31 +++++++++++
|
||||
src/lstack/core/lstack_cfg.c | 46 ++++++++++++++++
|
||||
src/lstack/core/lstack_control_plane.c | 17 ++++--
|
||||
src/lstack/include/lstack_cfg.h | 1 +
|
||||
src/ltran/ltran_base.h | 1 +
|
||||
src/ltran/ltran_dfx.c | 35 +++++++++++-
|
||||
src/ltran/ltran_param.c | 75 +++++++++++++++++++++++++-
|
||||
src/ltran/ltran_param.h | 2 +
|
||||
src/ltran/main.c | 9 ++++
|
||||
11 files changed, 215 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/common/gazelle_base_func.h b/src/common/gazelle_base_func.h
|
||||
index fe3411a..22d7a7f 100644
|
||||
--- a/src/common/gazelle_base_func.h
|
||||
+++ b/src/common/gazelle_base_func.h
|
||||
@@ -32,6 +32,8 @@ int32_t separate_str_to_array(char *args, uint32_t *array, int32_t array_size);
|
||||
|
||||
int32_t check_and_set_run_dir(void);
|
||||
|
||||
+int32_t filename_check(const char* args);
|
||||
+
|
||||
#undef container_of
|
||||
#define container_of(ptr, type, field) ((type *)(void*)(((char *)(ptr)) - offsetof(type, field)))
|
||||
|
||||
diff --git a/src/common/gazelle_opt.h b/src/common/gazelle_opt.h
|
||||
index 7521e8c..e9e3676 100644
|
||||
--- a/src/common/gazelle_opt.h
|
||||
+++ b/src/common/gazelle_opt.h
|
||||
@@ -75,6 +75,8 @@
|
||||
#define GAZELLE_MAX_STACK_ARRAY_SIZE GAZELLE_CLIENT_NUM
|
||||
|
||||
#define GAZELLE_REG_SOCK_PATHNAME "/var/run/gazelle/gazelle_client.sock"
|
||||
+#define GAZELLE_REG_SOCK_FILENAME "gazelle_client.sock"
|
||||
+#define GAZELLE_SOCK_FILENAME_MAXLEN 128
|
||||
|
||||
#define GAZELLE_RUN_DIR "/var/run/gazelle/"
|
||||
#define GAZELLE_FILE_PERMISSION 0700
|
||||
diff --git a/src/common/gazelle_parse_config.c b/src/common/gazelle_parse_config.c
|
||||
index 8556e37..fc286d9 100644
|
||||
--- a/src/common/gazelle_parse_config.c
|
||||
+++ b/src/common/gazelle_parse_config.c
|
||||
@@ -21,6 +21,16 @@
|
||||
#include "gazelle_opt.h"
|
||||
#include "gazelle_base_func.h"
|
||||
|
||||
+#ifdef LTRAN_COMPILE
|
||||
+#include "ltran_log.h"
|
||||
+#define COMMON_ERR(fmt, ...) LTRAN_ERR(fmt, ##__VA_ARGS__)
|
||||
+#define COMMON_INFO(fmt, ...) LTRAN_INFO(fmt, ##__VA_ARGS__)
|
||||
+#else
|
||||
+#include "lstack_log.h"
|
||||
+#define COMMON_ERR(fmt, ...) LSTACK_LOG(ERR, LSTACK, fmt, ##__VA_ARGS__)
|
||||
+#define COMMON_INFO(fmt, ...) LSTACK_LOG(INFO, LSTACK, fmt, ##__VA_ARGS__)
|
||||
+#endif
|
||||
+
|
||||
static int32_t parse_str_data(char *args, uint32_t *array, int32_t array_size)
|
||||
{
|
||||
const char *delim = "-";
|
||||
@@ -87,3 +97,24 @@ int32_t check_and_set_run_dir(void)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+/* return 1 for check error */
|
||||
+int32_t filename_check(const char* args)
|
||||
+{
|
||||
+ if (args == NULL) {
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ if (strlen(args) <= 0 || strlen(args) > GAZELLE_SOCK_FILENAME_MAXLEN - 1) {
|
||||
+ COMMON_ERR("socket_filename_check: invalid unix sock name %s, filename exceeds the limit %d.\n", args, GAZELLE_SOCK_FILENAME_MAXLEN);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ char* sensitive_chars = strpbrk(args, "|;&$><`\\!\n");
|
||||
+ if (sensitive_chars != NULL) {
|
||||
+ COMMON_ERR("socket_filename_check: invalid unix sock name %s, filename contains sensitive characters.\n", args);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/src/lstack/core/lstack_cfg.c b/src/lstack/core/lstack_cfg.c
|
||||
index 2cd9989..1ff3794 100644
|
||||
--- a/src/lstack/core/lstack_cfg.c
|
||||
+++ b/src/lstack/core/lstack_cfg.c
|
||||
@@ -56,6 +56,7 @@ static int32_t parse_gateway_addr(void);
|
||||
static int32_t parse_kni_switch(void);
|
||||
static int32_t parse_listen_shadow(void);
|
||||
static int32_t parse_app_bind_numa(void);
|
||||
+static int32_t parse_unix_prefix(void);
|
||||
|
||||
struct config_vector_t {
|
||||
const char *name;
|
||||
@@ -75,6 +76,7 @@ static struct config_vector_t g_config_tbl[] = {
|
||||
{ "kni_switch", parse_kni_switch },
|
||||
{ "listen_shadow", parse_listen_shadow },
|
||||
{ "app_bind_numa", parse_app_bind_numa },
|
||||
+ { "unix_prefix", parse_unix_prefix },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
@@ -803,3 +805,47 @@ int32_t cfg_init(void)
|
||||
free(config_file);
|
||||
return ret;
|
||||
}
|
||||
+
|
||||
+static int32_t parse_unix_prefix(void)
|
||||
+{
|
||||
+ const config_setting_t *unix_prefix = NULL;
|
||||
+ const char *args = NULL;
|
||||
+ int32_t ret = 0;
|
||||
+
|
||||
+ ret = memset_s(g_config_params.unix_socket_filename, sizeof(g_config_params.unix_socket_filename),
|
||||
+ 0, sizeof(g_config_params.unix_socket_filename));
|
||||
+ if (ret != EOK) {
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ ret = strncpy_s(g_config_params.unix_socket_filename, sizeof(g_config_params.unix_socket_filename),
|
||||
+ GAZELLE_RUN_DIR, strlen(GAZELLE_RUN_DIR) + 1);
|
||||
+ if (ret != EOK) {
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ unix_prefix = config_lookup(&g_config, "unix_prefix");
|
||||
+
|
||||
+ if (unix_prefix) {
|
||||
+ args = config_setting_get_string(unix_prefix);
|
||||
+
|
||||
+ if (filename_check(args)) {
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ ret = strncat_s(g_config_params.unix_socket_filename, sizeof(g_config_params.unix_socket_filename),
|
||||
+ args, strlen(args) + 1);
|
||||
+ if (ret != EOK) {
|
||||
+ return ret;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ret = strncat_s(g_config_params.unix_socket_filename, sizeof(g_config_params.unix_socket_filename),
|
||||
+ GAZELLE_REG_SOCK_FILENAME, strlen(GAZELLE_REG_SOCK_FILENAME) + 1);
|
||||
+ if (ret != EOK) {
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
diff --git a/src/lstack/core/lstack_control_plane.c b/src/lstack/core/lstack_control_plane.c
|
||||
index 7f62254..0a10d83 100644
|
||||
--- a/src/lstack/core/lstack_control_plane.c
|
||||
+++ b/src/lstack/core/lstack_control_plane.c
|
||||
@@ -67,9 +67,12 @@ static int control_unix_sock(struct sockaddr_un *address)
|
||||
posix_api->close_fn(sockfd);
|
||||
return -1;
|
||||
}
|
||||
+
|
||||
+ struct cfg_params *global_params = get_global_cfg_params();
|
||||
+
|
||||
address->sun_family = AF_UNIX;
|
||||
- int ret = strncpy_s(address->sun_path, sizeof(address->sun_path), GAZELLE_REG_SOCK_PATHNAME,
|
||||
- strlen(GAZELLE_REG_SOCK_PATHNAME) + 1);
|
||||
+ int ret = strncpy_s(address->sun_path, sizeof(address->sun_path), global_params->unix_socket_filename,
|
||||
+ strlen(global_params->unix_socket_filename) + 1);
|
||||
if (ret != EOK) {
|
||||
posix_api->close_fn(sockfd);
|
||||
return -1;
|
||||
@@ -459,6 +462,14 @@ void control_fd_close(void)
|
||||
/* 200ms: wait ltran instance logout */
|
||||
rte_delay_ms(200);
|
||||
}
|
||||
+
|
||||
+ struct cfg_params *global_params = get_global_cfg_params();
|
||||
+ if (!global_params->use_ltran) {
|
||||
+ int ret = unlink(global_params->unix_socket_filename);
|
||||
+ if (ret == -1) {
|
||||
+ LSTACK_LOG(ERR, LSTACK, "unlink failed, just skip it\n");
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
int32_t control_init_client(bool is_reconnect)
|
||||
@@ -675,7 +686,7 @@ static int32_t control_init_server(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
- ret = unlink(GAZELLE_REG_SOCK_PATHNAME);
|
||||
+ ret = unlink(get_global_cfg_params()->unix_socket_filename);
|
||||
if (ret == -1) {
|
||||
LSTACK_LOG(ERR, LSTACK, "unlink failed, just skip it\n");
|
||||
}
|
||||
diff --git a/src/lstack/include/lstack_cfg.h b/src/lstack/include/lstack_cfg.h
|
||||
index 80dfd24..3864250 100644
|
||||
--- a/src/lstack/include/lstack_cfg.h
|
||||
+++ b/src/lstack/include/lstack_cfg.h
|
||||
@@ -80,6 +80,7 @@ struct cfg_params {
|
||||
int dpdk_argc;
|
||||
char **dpdk_argv;
|
||||
struct secondary_attach_arg sec_attach_arg;
|
||||
+ char unix_socket_filename[NAME_MAX];
|
||||
};
|
||||
|
||||
struct cfg_params *get_global_cfg_params(void);
|
||||
diff --git a/src/ltran/ltran_base.h b/src/ltran/ltran_base.h
|
||||
index 41d4cfb..6be9152 100644
|
||||
--- a/src/ltran/ltran_base.h
|
||||
+++ b/src/ltran/ltran_base.h
|
||||
@@ -99,5 +99,6 @@
|
||||
#define GAZELLE_INET_ADDRSTRLEN 16
|
||||
|
||||
#define GAZELLE_DFX_SOCK_PATHNAME "/var/run/gazelle/gazelle_cmd.sock"
|
||||
+#define GAZELLE_DFX_SOCK_FILENAME "gazelle_cmd.sock"
|
||||
|
||||
#endif /* ifndef __GAZELLE_BASE_H__ */
|
||||
diff --git a/src/ltran/ltran_dfx.c b/src/ltran/ltran_dfx.c
|
||||
index de97a48..bab3f89 100644
|
||||
--- a/src/ltran/ltran_dfx.c
|
||||
+++ b/src/ltran/ltran_dfx.c
|
||||
@@ -57,6 +57,8 @@ static struct gazelle_stat_lstack_total g_last_lstack_total[GAZELLE_MAX_STACK_AR
|
||||
|
||||
static bool g_use_ltran = false;
|
||||
|
||||
+static char* g_unix_prefix;
|
||||
+
|
||||
/* Use the largest data structure. */
|
||||
#define GAZELLE_CMD_RESP_BUFFER_SIZE (sizeof(struct gazelle_stack_dfx_data) / sizeof(char))
|
||||
|
||||
@@ -162,15 +164,23 @@ static int32_t dfx_connect_ltran(bool use_ltran, bool probe)
|
||||
printf("%s:%d memset_s fail ret=%d\n", __FUNCTION__, __LINE__, ret);
|
||||
}
|
||||
|
||||
+ if (g_unix_prefix) {
|
||||
+ ret = strncat_s(addr.sun_path, sizeof(addr.sun_path), GAZELLE_RUN_DIR,
|
||||
+ strlen(GAZELLE_RUN_DIR) + 1);
|
||||
+ if (ret != EOK) {
|
||||
+ printf("%s:%d strncpy_s fail ret=%d\n", __FUNCTION__, __LINE__, ret);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
addr.sun_family = AF_UNIX;
|
||||
if (use_ltran) {
|
||||
- ret = strncpy_s(addr.sun_path, sizeof(addr.sun_path), GAZELLE_DFX_SOCK_PATHNAME,
|
||||
+ ret = strncat_s(addr.sun_path, sizeof(addr.sun_path), GAZELLE_DFX_SOCK_PATHNAME,
|
||||
strlen(GAZELLE_DFX_SOCK_PATHNAME) + 1);
|
||||
if (ret != EOK) {
|
||||
printf("%s:%d strncpy_s fail ret=%d\n", __FUNCTION__, __LINE__, ret);
|
||||
}
|
||||
} else {
|
||||
- ret = strncpy_s(addr.sun_path, sizeof(addr.sun_path), GAZELLE_REG_SOCK_PATHNAME,
|
||||
+ ret = strncat_s(addr.sun_path, sizeof(addr.sun_path), GAZELLE_REG_SOCK_PATHNAME,
|
||||
strlen(GAZELLE_REG_SOCK_PATHNAME) + 1);
|
||||
if (ret != EOK) {
|
||||
printf("%s:%d strncpy_s fail ret=%d\n", __FUNCTION__, __LINE__, ret);
|
||||
@@ -1251,6 +1261,27 @@ int32_t main(int32_t argc, char *argv[])
|
||||
struct gazelle_stat_msg_request req_msg[GAZELLE_CMD_MAX] = {0};
|
||||
int32_t req_msg_num, ret;
|
||||
|
||||
+ int unix_arg = 0;
|
||||
+ for (int32_t i = 1; i < argc; i++) {
|
||||
+ if (unix_arg == 0) {
|
||||
+ if (!strcmp(argv[i], "-u")) {
|
||||
+ unix_arg++;
|
||||
+ }
|
||||
+ } else if (unix_arg == 1) {
|
||||
+ g_unix_prefix = argv[i];
|
||||
+ unix_arg++;
|
||||
+ } else {
|
||||
+ argv[i - unix_arg] = argv[i];
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ argv[argc - unix_arg] = argv[argc];
|
||||
+ argc -= unix_arg;
|
||||
+
|
||||
+ if (g_unix_prefix && filename_check(g_unix_prefix)) {
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
int32_t fd = dfx_connect_ltran(true, true);
|
||||
if (fd > 0) {
|
||||
g_use_ltran = true;
|
||||
diff --git a/src/ltran/ltran_param.c b/src/ltran/ltran_param.c
|
||||
index fc45895..4974085 100644
|
||||
--- a/src/ltran/ltran_param.c
|
||||
+++ b/src/ltran/ltran_param.c
|
||||
@@ -42,6 +42,7 @@
|
||||
#define PARAM_BOND_RX_QUEUE_NUM "bond_rx_queue_num"
|
||||
#define PARAM_BOND_MACS "bond_macs"
|
||||
#define PARAM_TCP_CONN_SCAN_INTERVAL "tcp_conn_scan_interval"
|
||||
+#define PARAM_UNIX_PREFIX "unix_prefix"
|
||||
|
||||
static struct ltran_config g_ltran_config = {0};
|
||||
struct ltran_config* get_ltran_config(void)
|
||||
@@ -537,6 +538,78 @@ struct param_parser {
|
||||
param_parse_func func;
|
||||
};
|
||||
|
||||
+static int32_t parse_unix_prefix(const config_t *config, const char *key, struct ltran_config *ltran_config)
|
||||
+{
|
||||
+ const char *prefix = NULL;
|
||||
+ int32_t ret = 0;
|
||||
+
|
||||
+ ret = memset_s(ltran_config->unix_socket_filename, sizeof(ltran_config->unix_socket_filename),
|
||||
+ 0, sizeof(ltran_config->unix_socket_filename));
|
||||
+ if (ret != EOK) {
|
||||
+ gazelle_set_errno(GAZELLE_EINETATON);
|
||||
+ return GAZELLE_ERR;
|
||||
+ }
|
||||
+
|
||||
+ ret = memset_s(ltran_config->dfx_socket_filename, sizeof(ltran_config->dfx_socket_filename),
|
||||
+ 0, sizeof(ltran_config->dfx_socket_filename));
|
||||
+ if (ret != EOK) {
|
||||
+ gazelle_set_errno(GAZELLE_EINETATON);
|
||||
+ return GAZELLE_ERR;
|
||||
+ }
|
||||
+
|
||||
+ ret = strncpy_s(ltran_config->unix_socket_filename, sizeof(ltran_config->unix_socket_filename),
|
||||
+ GAZELLE_RUN_DIR, strlen(GAZELLE_RUN_DIR) + 1);
|
||||
+ if (ret != EOK) {
|
||||
+ gazelle_set_errno(GAZELLE_EINETATON);
|
||||
+ return GAZELLE_ERR;
|
||||
+ }
|
||||
+
|
||||
+ ret = strncpy_s(ltran_config->dfx_socket_filename, sizeof(ltran_config->dfx_socket_filename),
|
||||
+ GAZELLE_RUN_DIR, strlen(GAZELLE_RUN_DIR) + 1);
|
||||
+ if (ret != EOK) {
|
||||
+ gazelle_set_errno(GAZELLE_EINETATON);
|
||||
+ return GAZELLE_ERR;
|
||||
+ }
|
||||
+
|
||||
+ ret = config_lookup_string(config, key, &prefix);
|
||||
+ if (ret) {
|
||||
+ if (filename_check(prefix)) {
|
||||
+ gazelle_set_errno(GAZELLE_EINETATON);
|
||||
+ return GAZELLE_ERR;
|
||||
+ }
|
||||
+
|
||||
+ ret = strncat_s(ltran_config->unix_socket_filename, sizeof(ltran_config->unix_socket_filename),
|
||||
+ prefix, strlen(prefix) + 1);
|
||||
+ if (ret != EOK) {
|
||||
+ gazelle_set_errno(GAZELLE_EINETATON);
|
||||
+ return GAZELLE_ERR;
|
||||
+ }
|
||||
+
|
||||
+ ret = strncat_s(ltran_config->dfx_socket_filename, sizeof(ltran_config->dfx_socket_filename),
|
||||
+ prefix, strlen(prefix) + 1);
|
||||
+ if (ret != EOK) {
|
||||
+ gazelle_set_errno(GAZELLE_EINETATON);
|
||||
+ return GAZELLE_ERR;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ret = strncat_s(ltran_config->unix_socket_filename, sizeof(ltran_config->unix_socket_filename),
|
||||
+ GAZELLE_REG_SOCK_FILENAME, strlen(GAZELLE_REG_SOCK_FILENAME) + 1);
|
||||
+ if (ret != EOK) {
|
||||
+ gazelle_set_errno(GAZELLE_EINETATON);
|
||||
+ return GAZELLE_ERR;
|
||||
+ }
|
||||
+
|
||||
+ ret = strncat_s(ltran_config->dfx_socket_filename, sizeof(ltran_config->dfx_socket_filename),
|
||||
+ GAZELLE_DFX_SOCK_FILENAME, strlen(GAZELLE_DFX_SOCK_FILENAME) + 1);
|
||||
+ if (ret != EOK) {
|
||||
+ gazelle_set_errno(GAZELLE_EINETATON);
|
||||
+ return GAZELLE_ERR;
|
||||
+ }
|
||||
+
|
||||
+ return GAZELLE_OK;
|
||||
+}
|
||||
+
|
||||
struct param_parser g_param_parse_tbl[] = {
|
||||
{PARAM_FORWARD_KIT_ARGS, parse_forward_kit_args},
|
||||
{PARAM_DISPATCH_MAX_CLIENT, parse_dispatch_max_client},
|
||||
@@ -551,6 +624,7 @@ struct param_parser g_param_parse_tbl[] = {
|
||||
{PARAM_BOND_TX_QUEUE_NUM, parse_bond_tx_queue_num},
|
||||
{PARAM_TCP_CONN_SCAN_INTERVAL, parse_tcp_conn_scan_interval},
|
||||
{PARAM_KNI_SWITCH, parse_kni_switch},
|
||||
+ {PARAM_UNIX_PREFIX, parse_unix_prefix},
|
||||
};
|
||||
|
||||
int32_t parse_config_file_args(const char *conf_file_path, struct ltran_config *ltran_config)
|
||||
@@ -597,4 +671,3 @@ bool is_same_mac_addr(const uint8_t *smac, const uint8_t *dmac)
|
||||
}
|
||||
return true;
|
||||
}
|
||||
-
|
||||
diff --git a/src/ltran/ltran_param.h b/src/ltran/ltran_param.h
|
||||
index 3ec6451..6f013d5 100644
|
||||
--- a/src/ltran/ltran_param.h
|
||||
+++ b/src/ltran/ltran_param.h
|
||||
@@ -56,6 +56,8 @@ struct ltran_config {
|
||||
struct {
|
||||
int32_t log_switch;
|
||||
} log;
|
||||
+ char unix_socket_filename[NAME_MAX];
|
||||
+ char dfx_socket_filename[NAME_MAX];
|
||||
};
|
||||
|
||||
int32_t parse_config_file_args(const char *conf_file_path, struct ltran_config *ltran_config);
|
||||
diff --git a/src/ltran/main.c b/src/ltran/main.c
|
||||
index 691595e..03b3ad5 100644
|
||||
--- a/src/ltran/main.c
|
||||
+++ b/src/ltran/main.c
|
||||
@@ -58,6 +58,15 @@ static void sig_default_handler(int32_t sig)
|
||||
LTRAN_ERR("ltran dumped,caught signal:%d.\n", sig);
|
||||
print_stack();
|
||||
dpdk_kni_release();
|
||||
+ int ret = 0;
|
||||
+ ret = unlink(get_ltran_config()->unix_socket_filename);
|
||||
+ if (ret) {
|
||||
+ LTRAN_WARN("unlink %s ERROR. errn: %d. ret=%d\n", get_ltran_config()->unix_socket_filename, errno, ret);
|
||||
+ }
|
||||
+ ret = unlink(get_ltran_config()->dfx_socket_filename);
|
||||
+ if (ret) {
|
||||
+ LTRAN_WARN("unlink %s ERROR. errn: %d. ret=%d\n", get_ltran_config()->dfx_socket_filename, errno, ret);
|
||||
+ }
|
||||
kill(getpid(), sig);
|
||||
}
|
||||
|
||||
--
|
||||
2.23.0
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
From 3149382926845f44a398ba2d29a732c3e42b11ab Mon Sep 17 00:00:00 2001
|
||||
From: kircher <majun65@huawei.com>
|
||||
Date: Sat, 12 Nov 2022 22:01:06 +0800
|
||||
Subject: [PATCH 18/20] remove filename_check in gazellectl to fix build error
|
||||
|
||||
---
|
||||
src/ltran/ltran_dfx.c | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
diff --git a/src/ltran/ltran_dfx.c b/src/ltran/ltran_dfx.c
|
||||
index bab3f89..5d2c305 100644
|
||||
--- a/src/ltran/ltran_dfx.c
|
||||
+++ b/src/ltran/ltran_dfx.c
|
||||
@@ -1278,10 +1278,6 @@ int32_t main(int32_t argc, char *argv[])
|
||||
argv[argc - unix_arg] = argv[argc];
|
||||
argc -= unix_arg;
|
||||
|
||||
- if (g_unix_prefix && filename_check(g_unix_prefix)) {
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
int32_t fd = dfx_connect_ltran(true, true);
|
||||
if (fd > 0) {
|
||||
g_use_ltran = true;
|
||||
--
|
||||
2.23.0
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
From 193937aa1b3bdf0c37059c6bc24504363f728c66 Mon Sep 17 00:00:00 2001
|
||||
From: compile_success <980965867@qq.com>
|
||||
Date: Sat, 12 Nov 2022 14:08:12 +0000
|
||||
Subject: [PATCH 19/20] cancel kernel sock epoll ctl when lwip sock connect
|
||||
|
||||
---
|
||||
src/lstack/core/lstack_lwip.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/lstack/core/lstack_lwip.c b/src/lstack/core/lstack_lwip.c
|
||||
index 087d09b..d9ae6c0 100644
|
||||
--- a/src/lstack/core/lstack_lwip.c
|
||||
+++ b/src/lstack/core/lstack_lwip.c
|
||||
@@ -721,6 +721,10 @@ void gazelle_connected_callback(struct netconn *conn)
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (sock->wakeup != NULL && sock->wakeup->epollfd > 0){
|
||||
+ posix_api->epoll_ctl_fn(sock->wakeup->epollfd, EPOLL_CTL_DEL, fd, NULL);
|
||||
+ }
|
||||
+
|
||||
posix_api->shutdown_fn(fd, SHUT_RDWR);
|
||||
|
||||
SET_CONN_TYPE_LIBOS(conn);
|
||||
--
|
||||
2.23.0
|
||||
|
||||
66
0134-modify-readv-and-writev-first-buf-is-null.patch
Normal file
66
0134-modify-readv-and-writev-first-buf-is-null.patch
Normal file
@ -0,0 +1,66 @@
|
||||
From fce82f12ef0fde847d291b85057e9e0df07f011c Mon Sep 17 00:00:00 2001
|
||||
From: compile_success <980965867@qq.com>
|
||||
Date: Sat, 12 Nov 2022 14:19:30 +0000
|
||||
Subject: [PATCH 20/20] modify readv and writev first buf is null
|
||||
|
||||
---
|
||||
src/lstack/api/lstack_wrap.c | 7 ++++++-
|
||||
src/lstack/core/lstack_lwip.c | 10 +++++++++-
|
||||
2 files changed, 15 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/lstack/api/lstack_wrap.c b/src/lstack/api/lstack_wrap.c
|
||||
index d48fee0..2eeda6b 100644
|
||||
--- a/src/lstack/api/lstack_wrap.c
|
||||
+++ b/src/lstack/api/lstack_wrap.c
|
||||
@@ -352,7 +352,12 @@ static inline ssize_t do_readv(int32_t s, const struct iovec *iov, int iovcnt)
|
||||
msg.msg_control = NULL;
|
||||
msg.msg_controllen = 0;
|
||||
msg.msg_flags = 0;
|
||||
- return recvmsg_from_stack(s, &msg, 0);
|
||||
+ ssize_t result = recvmsg_from_stack(s, &msg, 0);
|
||||
+ if(result == -1 && errno == EAGAIN){
|
||||
+ errno = 0;
|
||||
+ return 0;
|
||||
+ }
|
||||
+ return result;
|
||||
}
|
||||
|
||||
static inline ssize_t do_send(int32_t sockfd, const void *buf, size_t len, int32_t flags)
|
||||
diff --git a/src/lstack/core/lstack_lwip.c b/src/lstack/core/lstack_lwip.c
|
||||
index d9ae6c0..4fec74e 100644
|
||||
--- a/src/lstack/core/lstack_lwip.c
|
||||
+++ b/src/lstack/core/lstack_lwip.c
|
||||
@@ -473,7 +473,7 @@ static int32_t check_msg_vaild(const struct msghdr *message)
|
||||
for (int32_t i = 0; i < message->msg_iovlen; i++) {
|
||||
if ((message->msg_iov[i].iov_base == NULL) || ((ssize_t)message->msg_iov[i].iov_len < 0) ||
|
||||
((size_t)(ssize_t)message->msg_iov[i].iov_len != message->msg_iov[i].iov_len) ||
|
||||
- ((ssize_t)(buflen + (ssize_t)message->msg_iov[i].iov_len) <= 0)) {
|
||||
+ ((ssize_t)(buflen + (ssize_t)message->msg_iov[i].iov_len) < 0)) {
|
||||
GAZELLE_RETURN(EINVAL);
|
||||
}
|
||||
buflen = (ssize_t)(buflen + (ssize_t)message->msg_iov[i].iov_len);
|
||||
@@ -491,6 +491,10 @@ ssize_t recvmsg_from_stack(int32_t s, struct msghdr *message, int32_t flags)
|
||||
}
|
||||
|
||||
for (int32_t i = 0; i < message->msg_iovlen; i++) {
|
||||
+ if (message->msg_iov[i].iov_len == 0){
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
ssize_t recvd_local = read_stack_data(s, message->msg_iov[i].iov_base, message->msg_iov[i].iov_len, flags);
|
||||
if (recvd_local > 0) {
|
||||
buflen += recvd_local;
|
||||
@@ -554,6 +558,10 @@ ssize_t sendmsg_to_stack(int32_t s, const struct msghdr *message, int32_t flags)
|
||||
continue;
|
||||
}
|
||||
|
||||
+ if (message->msg_iov[i].iov_len == 0){
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
ret = write_stack_data(sock, message->msg_iov[i].iov_base, message->msg_iov[i].iov_len);
|
||||
if (ret <= 0) {
|
||||
buflen = (buflen == 0) ? ret : buflen;
|
||||
--
|
||||
2.23.0
|
||||
|
||||
19
gazelle.spec
19
gazelle.spec
@ -2,7 +2,7 @@
|
||||
|
||||
Name: gazelle
|
||||
Version: 1.0.1
|
||||
Release: 20
|
||||
Release: 21
|
||||
Summary: gazelle is a high performance user-mode stack
|
||||
License: MulanPSL-2.0
|
||||
URL: https://gitee.com/openeuler/gazelle
|
||||
@ -136,6 +136,19 @@ Patch9118: 0118-expand-nic-rx-desc-size.patch
|
||||
Patch9119: 0119-add-kni-local-support-in-lstack.patch
|
||||
Patch9120: 0120-resolve-the-conflict-between-the-eth_dev_ops-variabl.patch
|
||||
Patch9121: 0121-add-pdump-support-in-lstack.patch
|
||||
Patch9122: 0122-fix-uninit-stack-port_id-when-use-mutil-NIC.patch
|
||||
Patch9123: 0123-fix-memleak-in-dpdk_ethdev_init-unlikely-path.patch
|
||||
Patch9124: 0124-fix-epoll_wait-return-when-timeout-is-0.patch
|
||||
Patch9125: 0125-fix-gazelle-pdump-init-fail-with-dpdk-21.11.patch
|
||||
Patch9126: 0126-fix-add-outdated-event.patch
|
||||
Patch9127: 0127-revert-write-usleep.patch
|
||||
Patch9128: 0128-reduce-thread-variable-access.patch
|
||||
Patch9129: 0129-add-readv-and-readv-kernel.patch
|
||||
Patch9130: 0130-add-unlock-before-after.patch
|
||||
Patch9131: 0131-add-mutil-NIC-support-in-gazelle.patch
|
||||
Patch9132: 0132-remove-filename_check-in-gazellectl-to-fix-build-err.patch
|
||||
Patch9133: 0133-cancel-kernel-sock-epoll-ctl-when-lwip-sock-connect.patch
|
||||
Patch9134: 0134-modify-readv-and-writev-first-buf-is-null.patch
|
||||
|
||||
%description
|
||||
%{name} is a high performance user-mode stack.
|
||||
@ -176,6 +189,10 @@ install -Dpm 0640 %{_builddir}/%{name}-%{version}/src/ltran/ltran.conf %{b
|
||||
%config(noreplace) %{conf_path}/ltran.conf
|
||||
|
||||
%changelog
|
||||
* Mon Nov 14 2022 wuchangsheng <wuchangsheng2@huawei.com> - 1.0.1-21
|
||||
- support muti-nic
|
||||
fix some bugs
|
||||
|
||||
* Tue Nov 8 2022 kircher <majun65@huawei.com> - 1.0.1-20
|
||||
- add pdump support in lstack
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user