From dd089adefd79da0995b311acca90004748c68b54 Mon Sep 17 00:00:00 2001 From: fumingwei Date: Tue, 11 May 2021 11:22:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=98=AF=E9=87=8D=E5=A4=8D=E6=B5=81=E9=87=8F=E4=B8=8D=E7=A1=AE?= =?UTF-8?q?=E5=AE=9A=E7=9A=84=E6=83=85=E5=86=B5=E4=B8=8B=E7=9A=84=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/include/kni_utils.h | 1 + entry/include/kni_entry.h | 1 + entry/src/kni_entry.cpp | 19 +++++++++++++++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/common/include/kni_utils.h b/common/include/kni_utils.h index 67805a2..5004fc0 100644 --- a/common/include/kni_utils.h +++ b/common/include/kni_utils.h @@ -77,6 +77,7 @@ enum kni_field{ //intercept error HAVE_DUP_PKT KNI_FIELD_INTCPERR_GET_HAVE_DUP_PKT_ERR, + KNI_FIELD_INTCPERR_DUP_PKT_NOT_SURE_ERR, //intercept error stream tun type KNI_FIELD_INTCPERR_GET_STREAM_TUN_TYPE_ERR, diff --git a/entry/include/kni_entry.h b/entry/include/kni_entry.h index 0b96a4d..e2df749 100644 --- a/entry/include/kni_entry.h +++ b/entry/include/kni_entry.h @@ -35,6 +35,7 @@ enum intercept_error{ INTERCEPT_ERROR_STREAM_TUNNLE_TYPE= -13, INTERCEPT_ERROR_GET_STREAM_TUNNLE_TYPE_ERR= -14, INTERCEPT_ERROR_GET_HAVE_DUP_PKT_ERR= -15, + INTERCEPT_ERROR_DUP_PKT_NOT_SURE_ERR= -15, }; /* action diff --git a/entry/src/kni_entry.cpp b/entry/src/kni_entry.cpp index ee66fe5..f85140b 100644 --- a/entry/src/kni_entry.cpp +++ b/entry/src/kni_entry.cpp @@ -1115,7 +1115,8 @@ static int first_data_intercept(struct streaminfo *stream, struct pme_info *pmei int intercept_stream_link_mode_len = sizeof(unsigned char); unsigned short stream_tunnel_type = STREAM_TUNNLE_NON; int stream_tunnel_type_len = sizeof(unsigned short); - int have_dup_pkt_len = sizeof(pmeinfo->has_dup_traffic); + int has_dup_traffic; + int have_dup_pkt_len = sizeof(has_dup_traffic); ret=MESA_get_stream_opt(stream, MSO_TCP_CREATE_LINK_MODE, (void *)&intercept_stream_link_mode, &intercept_stream_link_mode_len); if(ret == 0){ if(intercept_stream_link_mode != TCP_CTEAT_LINK_BYSYN){ @@ -1141,8 +1142,7 @@ static int first_data_intercept(struct streaminfo *stream, struct pme_info *pmei goto error_out; } } - else - { + else{ KNI_LOG_DEBUG(logger, "Intercept error: get MSO_STREAM_TUNNEL_TYPE error, ret = %d, stream traceid = %s, stream addr = %s",ret, pmeinfo->stream_traceid, pmeinfo->stream_addr); pmeinfo->intcp_error = INTERCEPT_ERROR_GET_STREAM_TUNNLE_TYPE_ERR; FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_INTCPERR_GET_STREAM_TUN_TYPE_ERR], 0, FS_OP_ADD, 1); @@ -1218,13 +1218,23 @@ static int first_data_intercept(struct streaminfo *stream, struct pme_info *pmei } // get HAVE_DUP_PKT field - ret=MESA_get_stream_opt(stream, MSO_HAVE_DUP_PKT, (void *)&(pmeinfo->has_dup_traffic), &have_dup_pkt_len); + ret=MESA_get_stream_opt(stream, MSO_HAVE_DUP_PKT, (void *)&has_dup_traffic, &have_dup_pkt_len); if(ret != 0){ KNI_LOG_DEBUG(logger, "Intercept error: get MSO_HAVE_DUP_PKT error, ret = %d, stream traceid = %s, stream addr = %s",ret, pmeinfo->stream_traceid, pmeinfo->stream_addr); pmeinfo->intcp_error = INTERCEPT_ERROR_GET_HAVE_DUP_PKT_ERR; FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_INTCPERR_GET_HAVE_DUP_PKT_ERR], 0, FS_OP_ADD, 1); goto error_out; } + else{ + if(has_dup_traffic == -2){ + KNI_LOG_ERROR(logger, "Intercept error: has duplicate traffic is not sure,has_dup_traffic = %d,stream traceid = %s, stream addr = %s",has_dup_traffic, pmeinfo->stream_traceid, pmeinfo->stream_addr); + pmeinfo->intcp_error = NTERCEPT_ERROR_DUP_PKT_NOT_SURE_ERR; + FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_INTCPERR_DUP_PKT_NOT_SURE_ERR], 0, FS_OP_ADD, 1); + goto error_out; + } + pmeinfo->has_dup_traffic = (uint64_t)has_dup_traffic; + } + //Bypass Duplicated Packet if(g_kni_handle->pxy_tcp_option_enable == 1) @@ -2183,6 +2193,7 @@ static struct kni_field_stat_handle * fs_init(const char *profile){ fs_handle->fields[KNI_FIELD_INTCPERR_NOT_LINK_MODE_BYSYN] = FS_register(handle, FS_STYLE_FIELD, FS_CALC_CURRENT, "e_lkmd_not_syn"); //intercept error get HAVE_DUP_PKT error fs_handle->fields[KNI_FIELD_INTCPERR_GET_HAVE_DUP_PKT_ERR] = FS_register(handle, FS_STYLE_FIELD, FS_CALC_CURRENT, "e_dup_get"); + fs_handle->fields[KNI_FIELD_INTCPERR_DUP_PKT_NOT_SURE_ERR] = FS_register(handle, FS_STYLE_FIELD, FS_CALC_CURRENT, "e_dup_notsure"); //intercept error stream tunnel type fs_handle->fields[KNI_FIELD_INTCPERR_GET_STREAM_TUN_TYPE_ERR] = FS_register(handle, FS_STYLE_FIELD, FS_CALC_CURRENT, "e_tuntype_get"); fs_handle->fields[KNI_FIELD_INTCPERR_STREAM_IS_TUN_TYPE] = FS_register(handle, FS_STYLE_FIELD, FS_CALC_CURRENT, "e_type_tun");