122 lines
5.2 KiB
Diff
122 lines
5.2 KiB
Diff
From b393509c3e7352ddc2457bca766a7dcff579b3f0 Mon Sep 17 00:00:00 2001
|
|
From: jiangheng12 <jiangheng14@huawei.com>
|
|
Date: Thu, 30 Mar 2023 16:20:34 +0800
|
|
Subject: [PATCH] fix config flow rule race
|
|
|
|
---
|
|
src/common/gazelle_dfx_msg.h | 2 +-
|
|
src/lstack/netif/lstack_ethdev.c | 6 +++---
|
|
src/lstack/netif/lstack_vdev.c | 21 ++++++++++-----------
|
|
3 files changed, 14 insertions(+), 15 deletions(-)
|
|
|
|
diff --git a/src/common/gazelle_dfx_msg.h b/src/common/gazelle_dfx_msg.h
|
|
index 9105871..e4da687 100644
|
|
--- a/src/common/gazelle_dfx_msg.h
|
|
+++ b/src/common/gazelle_dfx_msg.h
|
|
@@ -200,7 +200,7 @@ struct gazelle_stat_low_power_info {
|
|
};
|
|
|
|
#define RTE_ETH_XSTATS_NAME_SIZE 64
|
|
-#define RTE_ETH_XSTATS_MAX_LEN 128
|
|
+#define RTE_ETH_XSTATS_MAX_LEN 256
|
|
struct nic_eth_xstats_name {
|
|
char name[RTE_ETH_XSTATS_NAME_SIZE];
|
|
};
|
|
diff --git a/src/lstack/netif/lstack_ethdev.c b/src/lstack/netif/lstack_ethdev.c
|
|
index 8d05bdd..52aa9a8 100644
|
|
--- a/src/lstack/netif/lstack_ethdev.c
|
|
+++ b/src/lstack/netif/lstack_ethdev.c
|
|
@@ -152,7 +152,7 @@ int32_t eth_dev_poll(void)
|
|
}
|
|
|
|
/* flow rule map */
|
|
-#define RULE_KEY_LEN 22
|
|
+#define RULE_KEY_LEN 23
|
|
struct flow_rule {
|
|
char rule_key[RULE_KEY_LEN];
|
|
struct rte_flow *flow;
|
|
@@ -322,7 +322,7 @@ create_flow_director(uint16_t port_id, uint16_t queue_id, uint32_t src_ip, uint3
|
|
void config_flow_director(uint16_t queue_id, uint32_t src_ip, uint32_t dst_ip, uint16_t src_port, uint16_t dst_port){
|
|
|
|
uint16_t port_id = get_port_id();
|
|
- char rule_key[RULE_KEY_LEN];
|
|
+ char rule_key[RULE_KEY_LEN] = {0};
|
|
sprintf(rule_key,"%u_%u_%u",src_ip,src_port,dst_port);
|
|
struct flow_rule *fl_exist = find_rule(rule_key);
|
|
if(fl_exist != NULL){
|
|
@@ -346,7 +346,7 @@ void config_flow_director(uint16_t queue_id, uint32_t src_ip, uint32_t dst_ip, u
|
|
void delete_flow_director(uint32_t dst_ip, uint16_t src_port, uint16_t dst_port)
|
|
{
|
|
uint16_t port_id = get_port_id();
|
|
- char rule_key[RULE_KEY_LEN];
|
|
+ char rule_key[RULE_KEY_LEN] = {0};
|
|
sprintf(rule_key,"%u_%u_%u",dst_ip,dst_port,src_port);
|
|
struct flow_rule *fl = find_rule(rule_key);
|
|
|
|
diff --git a/src/lstack/netif/lstack_vdev.c b/src/lstack/netif/lstack_vdev.c
|
|
index ba0db39..aef6035 100644
|
|
--- a/src/lstack/netif/lstack_vdev.c
|
|
+++ b/src/lstack/netif/lstack_vdev.c
|
|
@@ -152,10 +152,10 @@ int32_t vdev_reg_xmit(enum reg_ring_type type, struct gazelle_quintuple *qtuple)
|
|
}
|
|
|
|
if (!use_ltran() && get_global_cfg_params()->tuple_filter) {
|
|
- if(type == REG_RING_TCP_LISTEN_CLOSE){
|
|
+ if (type == REG_RING_TCP_LISTEN_CLOSE) {
|
|
if (get_global_cfg_params()->is_primary) {
|
|
delete_user_process_port(qtuple->src_port, PORT_LISTEN);
|
|
- }else{
|
|
+ } else {
|
|
transfer_add_or_delete_listen_port_to_process0(qtuple->src_port,get_global_cfg_params()->process_idx, 0);
|
|
}
|
|
}
|
|
@@ -165,10 +165,10 @@ int32_t vdev_reg_xmit(enum reg_ring_type type, struct gazelle_quintuple *qtuple)
|
|
delete_user_process_port(qtuple->src_port, PORT_CONNECT);
|
|
uint16_t queue_id = get_protocol_stack()->queue_id;
|
|
if (queue_id != 0) {
|
|
- delete_flow_director(qtuple->dst_ip, qtuple->src_port, qtuple->dst_port);
|
|
+ transfer_delete_rule_info_to_process0(qtuple->dst_ip, qtuple->src_port, qtuple->dst_port);
|
|
}
|
|
- }else{
|
|
- transfer_delete_rule_info_to_process0(qtuple->dst_ip,qtuple->src_port,qtuple->dst_port);
|
|
+ } else {
|
|
+ transfer_delete_rule_info_to_process0(qtuple->dst_ip, qtuple->src_port, qtuple->dst_port);
|
|
}
|
|
}
|
|
|
|
@@ -177,18 +177,18 @@ int32_t vdev_reg_xmit(enum reg_ring_type type, struct gazelle_quintuple *qtuple)
|
|
if (get_global_cfg_params()->is_primary){
|
|
add_user_process_port(qtuple->src_port, get_global_cfg_params()->process_idx, PORT_CONNECT);
|
|
if (queue_id != 0) {
|
|
- config_flow_director(queue_id, qtuple->dst_ip, qtuple->src_ip, qtuple->dst_port, qtuple->src_port);
|
|
+ transfer_create_rule_info_to_process0(queue_id, qtuple->src_ip, qtuple->dst_ip, qtuple->src_port, qtuple->dst_port);
|
|
}
|
|
- }else {
|
|
+ } else {
|
|
transfer_create_rule_info_to_process0(queue_id, qtuple->src_ip, qtuple->dst_ip, qtuple->src_port, qtuple->dst_port);
|
|
}
|
|
}
|
|
|
|
- if (type == REG_RING_TCP_LISTEN){
|
|
+ if (type == REG_RING_TCP_LISTEN) {
|
|
if (get_global_cfg_params()->is_primary) {
|
|
add_user_process_port(qtuple->src_port, get_global_cfg_params()->process_idx, PORT_LISTEN);
|
|
- }else {
|
|
- transfer_add_or_delete_listen_port_to_process0(qtuple->src_port,get_global_cfg_params()->process_idx, 1);
|
|
+ } else {
|
|
+ transfer_add_or_delete_listen_port_to_process0(qtuple->src_port, get_global_cfg_params()->process_idx, 1);
|
|
}
|
|
}
|
|
return 0;
|
|
@@ -197,7 +197,6 @@ int32_t vdev_reg_xmit(enum reg_ring_type type, struct gazelle_quintuple *qtuple)
|
|
return 0;
|
|
}
|
|
|
|
-
|
|
int32_t ret;
|
|
uint32_t sent_pkts = 0;
|
|
void *free_buf[VDEV_REG_QUEUE_SZ];
|
|
--
|
|
2.23.0
|
|
|