From 1f2176c209e1516e7e6da459d88f9080faf0fa1a Mon Sep 17 00:00:00 2001 From: yangwenlin Date: Thu, 20 Jan 2022 12:31:02 +0800 Subject: [PATCH] =?UTF-8?q?TSG-9308:=E4=BF=AE=E5=A4=8D=E5=B0=81=E8=A3=85ic?= =?UTF-8?q?mp=E8=8E=B7=E5=8F=96raw=5Fpkt=E4=B8=BANULL=E6=AE=B5=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tsg_icmp.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/tsg_icmp.cpp b/src/tsg_icmp.cpp index bcdd170..f03f333 100644 --- a/src/tsg_icmp.cpp +++ b/src/tsg_icmp.cpp @@ -312,7 +312,7 @@ unsigned char send_icmp_unreachable(const struct streaminfo *a_stream) char debug_buf[512] = {0}; int icmp_len = 0; int get_rawpkt_ret = 0; - void *raw_pkt; + void *raw_pkt = NULL; if(a_stream==NULL){ MESA_handle_runtime_log(g_tsg_para.logger, @@ -323,9 +323,23 @@ unsigned char send_icmp_unreachable(const struct streaminfo *a_stream) } get_rawpkt_ret = get_rawpkt_opt_from_streaminfo(a_stream, RAW_PKT_GET_DATA, &raw_pkt); + MESA_handle_runtime_log(g_tsg_para.logger, + RLOG_LV_DEBUG, + __FUNCTION__, + "get_raw_opt_from_streaminfo() get_rawpkt_ret = %d", get_rawpkt_ret); + if(0==get_rawpkt_ret && NULL!=raw_pkt){ + //(struct mesa_ethernet_hdr *)raw_pkt_data; + format_icmp((char *)raw_pkt+ETHERNET_BYTE_LEN, icmp_buf, &icmp_len, a_stream->addr.addrtype); + }else if(1==get_rawpkt_ret && NULL!=raw_pkt){ + //(raw_ipfrag_list_t *)raw_pkt_data; + //format_icmp((char *)(((raw_ipfrag_list_t *)raw_pkt)->frag_packet)+ETHERNET_BYTE_LEN, icmp_buf, &icmp_len, a_stream->addr.addrtype); + return STATE_DROPPKT; + }else{ + //error + return STATE_DROPPKT; + } - format_icmp((char *)raw_pkt+ETHERNET_BYTE_LEN, icmp_buf, &icmp_len, a_stream->addr.addrtype); - if (0 == tsg_send_inject_packet(a_stream, SIO_EXCLUDE_THIS_LAYER_HDR, icmp_buf, icmp_len, MESA_dir_reverse(a_stream->routedir))){ + if(0 == tsg_send_inject_packet(a_stream, SIO_EXCLUDE_THIS_LAYER_HDR, icmp_buf, icmp_len, MESA_dir_reverse(a_stream->routedir))){ sprintf(debug_buf, "Addr: %s, send sucess, get_rawpkt_ret %d, icmp_buf %p, icmp_len %d", PRINTADDR(a_stream, g_tsg_para.level), get_rawpkt_ret, icmp_buf, icmp_len); }else{ sprintf(debug_buf, "Addr: %s, send failed, get_rawpkt_ret %d, icmp_buf %p, icmp_len %d", PRINTADDR(a_stream, g_tsg_para.level), get_rawpkt_ret, icmp_buf, icmp_len);