Projects
Eulaceura:Factory
gazelle
_service:obs_scm:0073-dfx-gazellectl-c-support-...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:obs_scm:0073-dfx-gazellectl-c-support-ipv6.patch of Package gazelle
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
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2