1 Star 0 Fork 32

zhangju1/gazelle

forked from src-openEuler/gazelle 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0073-dfx-gazellectl-c-support-ipv6.patch 9.18 KB
一键复制 编辑 原始数据 按行查看 历史
yinbin6 提交于 2023-12-09 23:07 . sync upstream patch
From 61bf27272a56a426909a809a8a20dcf4220a3273 Mon Sep 17 00:00:00 2001
From: zhengjiebing <zhengjiebing_yewu@cmss.chinamobile.com>
Date: Wed, 29 Nov 2023 11:10:51 +0800
Subject: [PATCH] dfx: gazellectl -c support ipv6
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
日期: Thu Dec 7 14:28:51 2023 +0800
---
src/common/gazelle_dfx_msg.h | 6 ++--
src/common/gazelle_opt.h | 4 +++
src/lstack/core/lstack_control_plane.c | 4 +--
src/lstack/core/lstack_lwip.c | 8 +++---
src/ltran/ltran_dfx.c | 39 ++++++++++++++++----------
5 files changed, 38 insertions(+), 23 deletions(-)
diff --git a/src/common/gazelle_dfx_msg.h b/src/common/gazelle_dfx_msg.h
index ac6ea5e..698846f 100644
--- a/src/common/gazelle_dfx_msg.h
+++ b/src/common/gazelle_dfx_msg.h
@@ -16,6 +16,8 @@
#include <sys/types.h>
#include <stdint.h>
+#include <lwip/reg_sock.h>
+
#define GAZELLE_CLIENT_NUM_MIN 1
#define GAZELLE_LOG_LEVEL_MAX 10
#define GAZELLECTL_TIMEOUT 5000 // millisecond
@@ -170,8 +172,8 @@ struct gazelle_stat_lstack_snmp {
/* same as define in lwip/tcp.h - struct tcp_pcb_dp */
struct gazelle_stat_lstack_conn_info {
uint32_t state;
- uint32_t rip;
- uint32_t lip;
+ gz_addr_t rip;
+ gz_addr_t lip;
uint16_t r_port;
uint16_t l_port;
uint32_t in_send;
diff --git a/src/common/gazelle_opt.h b/src/common/gazelle_opt.h
index 7316fc6..bb540f4 100644
--- a/src/common/gazelle_opt.h
+++ b/src/common/gazelle_opt.h
@@ -52,6 +52,10 @@
#define STACK_THREAD_DEFAULT 4
#define STACK_NIC_READ_DEFAULT 128
+/* same as define in lwip/ip_addr.h */
+#define GZ_ADDR_TYPE_V4 0
+#define GZ_ADDR_TYPE_V6 6
+
#define MTU_DEFAULT_DATA_LEN 1460
#define VLAN_HEAD_LEN 4
#define IPV6_EXTRA_HEAD_LEN 20
diff --git a/src/lstack/core/lstack_control_plane.c b/src/lstack/core/lstack_control_plane.c
index 4633834..e7fcd26 100644
--- a/src/lstack/core/lstack_control_plane.c
+++ b/src/lstack/core/lstack_control_plane.c
@@ -361,9 +361,9 @@ static int32_t reg_conn(enum tcp_list_state table_state, enum reg_ring_type reg_
continue;
}
qtuple.protocol = 0;
- qtuple.src_ip = conn->conn_list[i].lip;
+ qtuple.src_ip = conn->conn_list[i].lip.u_addr.ip4.addr;
qtuple.src_port = lwip_htons(conn->conn_list[i].l_port);
- qtuple.dst_ip = conn->conn_list[i].rip;
+ qtuple.dst_ip = conn->conn_list[i].rip.u_addr.ip4.addr;
qtuple.dst_port = lwip_htons(conn->conn_list[i].r_port);
if ((table_state == LISTEN_LIST) && (!match_host_addr(qtuple.src_ip))) {
diff --git a/src/lstack/core/lstack_lwip.c b/src/lstack/core/lstack_lwip.c
index af9bf73..5a3b703 100644
--- a/src/lstack/core/lstack_lwip.c
+++ b/src/lstack/core/lstack_lwip.c
@@ -1135,8 +1135,8 @@ static void copy_pcb_to_conn(struct gazelle_stat_lstack_conn_info *conn, const s
{
struct netconn *netconn = (struct netconn *)pcb->callback_arg;
- conn->lip = ip_2_ip4(&pcb->local_ip)->addr;
- conn->rip = ip_2_ip4(&pcb->remote_ip)->addr;
+ conn->lip = *((gz_addr_t *)&pcb->local_ip);
+ conn->rip = *((gz_addr_t *)&pcb->remote_ip);
conn->l_port = pcb->local_port;
conn->r_port = pcb->remote_port;
conn->in_send = pcb->snd_queuelen;
@@ -1229,11 +1229,11 @@ uint32_t do_lwip_get_conntable(struct gazelle_stat_lstack_conn_info *conn,
for (struct tcp_pcb_listen *pcbl = tcp_listen_pcbs.listen_pcbs; pcbl != NULL && conn_num < max_num;
pcbl = pcbl->next) {
conn[conn_num].state = LISTEN_LIST;
- conn[conn_num].lip = ip_2_ip4(&pcbl->local_ip)->addr;
+ conn[conn_num].lip = *((gz_addr_t *)&pcbl->local_ip);
conn[conn_num].l_port = pcbl->local_port;
conn[conn_num].tcp_sub_state = pcbl->state;
struct netconn *netconn = (struct netconn *)pcbl->callback_arg;
- conn[conn_num].fd = netconn != NULL ? netconn->socket : -1;
+ conn[conn_num].fd = netconn != NULL ? netconn->socket : -1;
if (netconn != NULL && netconn->acceptmbox != NULL) {
conn[conn_num].recv_cnt = rte_ring_count(netconn->acceptmbox->ring);
}
diff --git a/src/ltran/ltran_dfx.c b/src/ltran/ltran_dfx.c
index d3ff527..273eeaa 100644
--- a/src/ltran/ltran_dfx.c
+++ b/src/ltran/ltran_dfx.c
@@ -233,6 +233,7 @@ static int32_t dfx_connect_ltran(bool use_ltran, bool probe)
strlen(GAZELLE_DFX_SOCK_FILENAME) + 1);
if (ret != EOK) {
printf("%s:%d strncat_s fail ret=%d\n", __FUNCTION__, __LINE__, ret);
+ goto END;
}
} else {
ret = strncat_s(addr.sun_path, sizeof(addr.sun_path), GAZELLE_REG_SOCK_FILENAME,
@@ -973,10 +974,11 @@ static void gazelle_print_lstack_stat_snmp(void *buf, const struct gazelle_stat_
static void gazelle_print_lstack_stat_conn(void *buf, const struct gazelle_stat_msg_request *req_msg)
{
uint32_t i;
- struct in_addr rip;
- struct in_addr lip;
- char str_ip[GAZELLE_SUBNET_LENGTH_MAX] = {0};
- char str_rip[GAZELLE_SUBNET_LENGTH_MAX] = {0};
+ char str_ip[INET6_ADDRSTRLEN] = {0};
+ char str_rip[INET6_ADDRSTRLEN] = {0};
+ /* ip:port, 6 is the length reserved for port */
+ char str_laddr[INET6_ADDRSTRLEN + 6] = {0};
+ char str_raddr[INET6_ADDRSTRLEN + 6] = {0};
struct gazelle_stack_dfx_data *stat = (struct gazelle_stack_dfx_data *)buf;
struct gazelle_stat_lstack_conn *conn = &stat->data.conn;
struct timeval time = {0};
@@ -986,30 +988,37 @@ static void gazelle_print_lstack_stat_conn(void *buf, const struct gazelle_stat_
do {
printf("\n------ stack tid: %6u ------time=%lu\n", stat->tid, time.tv_sec * 1000000 + time.tv_usec);
printf("No. Proto lwip_recv recv_ring in_send send_ring cwn rcv_wnd snd_wnd snd_buf snd_nxt"
- " lastack rcv_nxt events epoll_ev evlist fd Local Address "
- "Foreign Address State\n");
+ " lastack rcv_nxt events epoll_ev evlist fd Local Address"
+ " Foreign Address State\n");
uint32_t unread_pkts = 0;
uint32_t unsend_pkts = 0;
for (i = 0; i < conn->conn_num && i < GAZELLE_LSTACK_MAX_CONN; i++) {
struct gazelle_stat_lstack_conn_info *conn_info = &conn->conn_list[i];
- rip.s_addr = conn_info->rip;
- lip.s_addr = conn_info->lip;
+ uint32_t domain = conn_info->lip.type == GZ_ADDR_TYPE_V4 ? AF_INET : AF_INET6;
+ void *lip = (void *)&conn_info->lip;
+ void *rip = (void *)&conn_info->rip;
+
if ((conn_info->state == GAZELLE_ACTIVE_LIST) || (conn_info->state == GAZELLE_TIME_WAIT_LIST)) {
+ inet_ntop(domain, lip, str_ip, sizeof(str_ip));
+ inet_ntop(domain, rip, str_rip, sizeof(str_rip));
+ sprintf_s(str_laddr, sizeof(str_laddr), "%s:%hu", str_ip, conn_info->l_port);
+ sprintf_s(str_raddr, sizeof(str_raddr), "%s:%hu", str_rip, conn_info->r_port);
printf("%-6utcp %-10u%-10u%-8u%-10u%-9d%-9d%-10d%-10d%-15u%-15u%-15u%-10x%-10x%-7d%-7d"
- "%s:%hu %s:%hu %s\n", i, conn_info->recv_cnt, conn_info->recv_ring_cnt, conn_info->in_send,
+ "%-52s %-52s %s\n", i, conn_info->recv_cnt, conn_info->recv_ring_cnt, conn_info->in_send,
conn_info->send_ring_cnt, conn_info->cwn, conn_info->rcv_wnd, conn_info->snd_wnd,
conn_info->snd_buf, conn_info->snd_nxt, conn_info->lastack, conn_info->rcv_nxt, conn_info->events,
conn_info->epoll_events, conn_info->eventlist, conn_info->fd,
- inet_ntop(AF_INET, &lip, str_ip, sizeof(str_ip)), conn_info->l_port,
- inet_ntop(AF_INET, &rip, str_rip, sizeof(str_rip)), conn_info->r_port,
- tcp_state_to_str(conn_info->tcp_sub_state));
+ str_laddr, str_raddr, tcp_state_to_str(conn_info->tcp_sub_state));
} else if (conn_info->state == GAZELLE_LISTEN_LIST) {
- printf("%-6utcp %-147u%-7d%s:%hu 0.0.0.0:* LISTEN\n", i, conn_info->recv_cnt,
- conn_info->fd, inet_ntop(AF_INET, &lip, str_ip, sizeof(str_ip)), conn_info->l_port);
+ inet_ntop(domain, lip, str_ip, sizeof(str_ip));
+ sprintf_s(str_laddr, sizeof(str_laddr), "%s:%hu", str_ip, conn_info->l_port);
+ sprintf_s(str_raddr, sizeof(str_raddr), "%s:*", domain == AF_INET ? "0.0.0.0" : "::0");
+ printf("%-6utcp %-147u%-7d%-52s %-52s LISTEN\n", i, conn_info->recv_cnt,
+ conn_info->fd, str_laddr, str_raddr);
} else {
printf("Got unknow tcp conn::%s:%5hu, state:%u\n",
- inet_ntop(AF_INET, &lip, str_ip, sizeof(str_ip)), conn_info->l_port, conn_info->state);
+ inet_ntop(domain, lip, str_ip, sizeof(str_ip)), conn_info->l_port, conn_info->state);
}
unread_pkts += conn_info->recv_ring_cnt + conn_info->recv_cnt;
unsend_pkts += conn_info->send_ring_cnt + conn_info->in_send;
--
2.27.0
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/zhangju1/gazelle.git
git@gitee.com:zhangju1/gazelle.git
zhangju1
gazelle
gazelle
master

搜索帮助