From a59d3a1eef45cfe17b972414ea0bc4d7f96b4fb2 Mon Sep 17 00:00:00 2001 From: fumingwei Date: Wed, 23 Sep 2020 17:31:42 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E6=98=AFsyn=E5=BB=BA=E7=AB=8B=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E5=88=A4=E6=96=AD=202=E3=80=81=E5=A2=9E=E5=8A=A0versi?= =?UTF-8?q?on=E4=BF=A1=E6=81=AF=E9=80=9A=E8=BF=87nm=20-d=20=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/include/kni_utils.h | 3 +++ entry/src/kni_entry.cpp | 42 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/common/include/kni_utils.h b/common/include/kni_utils.h index da1ad6c..8255f9b 100644 --- a/common/include/kni_utils.h +++ b/common/include/kni_utils.h @@ -71,6 +71,9 @@ struct kni_tcpopt_info{ #define KNI_FS_LINE_MAX 256 enum kni_field{ KNI_FIELD_BYP_INTCPERR, + //intercept error link mode + KNI_FIELD_INTCPERR_GET_LINK_MODE_ERR, + KNI_FIELD_INTCPERR_NOT_LINK_MODE_BYSYN, //intercept error KNI_FIELD_INTCPERR_ASYM_ROUTING, KNI_FIELD_INTCPERR_NO_SYN, diff --git a/entry/src/kni_entry.cpp b/entry/src/kni_entry.cpp index d9184df..aff0ed4 100644 --- a/entry/src/kni_entry.cpp +++ b/entry/src/kni_entry.cpp @@ -34,6 +34,29 @@ extern "C" { #include "kni_pxy_tcp_option.h" #include "kni_dynamic_bypass.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define GIT_VERSION_CATTER(v) __attribute__((__used__)) const char * GIT_VERSION_##v = NULL +#define GIT_VERSION_EXPEND(v) GIT_VERSION_CATTER(v) + +/* VERSION TAG */ +#ifdef KNI_VAR_VERSION +GIT_VERSION_EXPEND(KNI_VAR_VERSION); +#else +static __attribute__((__used__)) const char * GIT_VERSION_UNKNOWN = NULL; +#endif +#undef GIT_VERSION_CATTER +#undef GIT_VERSION_EXPEND + +#ifdef __cplusplus +} +#endif + + struct kni_handle *g_kni_handle = NULL; struct kni_field_stat_handle *g_kni_fs_handle = NULL; int *arr_last_tfe_dispatch_index = NULL; @@ -1014,6 +1037,22 @@ static int first_data_intercept(struct streaminfo *stream, struct pme_info *pmei void *logger = g_kni_handle->local_logger; char *buff = NULL; int ret, len; + //intercept_error: TCP CTEAT LINK NOT BYSYN or TCP_CREATE_LINK_MODE error + unsigned char intercept_stream_link_mode; + int intercept_stream_link_mode_len = 1; + 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){ + KNI_LOG_DEBUG(logger, "Intercept error: TCP_CREATE_LINK_MODE is not BYSYN, link_mode=%d, link_mode_len=%d,stream traceid = %s, stream addr = %s", intercept_stream_link_mode,intercept_stream_link_mode_len,pmeinfo->stream_traceid, pmeinfo->stream_addr); + FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_INTCPERR_NOT_LINK_MODE_BYSYN], 0, FS_OP_ADD, 1); + goto error_out; + } + } + else{ + KNI_LOG_DEBUG(logger, "Intercept error: get TCP_CREATE_LINK_MODE error, ret = %d, stream traceid = %s, stream addr = %s",ret, pmeinfo->stream_traceid, pmeinfo->stream_addr); + FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_INTCPERR_GET_LINK_MODE_ERR], 0, FS_OP_ADD, 1); + goto error_out; + } //intercept_error: no tfe if(tsg_diagnose_judge_streamshunt(pmeinfo->maat_result.config_id,pmeinfo) == 0) // tsg diagnose shunt pmeinfo->tfe_id = tfe_mgr_alive_node_get(g_kni_handle->_tfe_mgr, thread_seq); @@ -2004,6 +2043,9 @@ static struct kni_field_stat_handle * fs_init(const char *profile){ //bypass stream fs_handle->fields[KNI_FIELD_BYP_INTCPERR] = FS_register(handle, FS_STYLE_FIELD, FS_CALC_CURRENT, "byp_intcp_err"); + //intercept error link mode + fs_handle->fields[KNI_FIELD_INTCPERR_GET_LINK_MODE_ERR] = FS_register(handle, FS_STYLE_FIELD, FS_CALC_CURRENT, "e_get_link_mode_err"); + fs_handle->fields[KNI_FIELD_INTCPERR_NOT_LINK_MODE_BYSYN] = FS_register(handle, FS_STYLE_FIELD, FS_CALC_CURRENT, "e_no_link_mode_bysyn"); //intercept_error fs_handle->fields[KNI_FIELD_INTCPERR_ASYM_ROUTING] = FS_register(handle, FS_STYLE_FIELD, FS_CALC_CURRENT, "e_asym_route"); fs_handle->fields[KNI_FIELD_INTCPERR_NO_SYN] = FS_register(handle, FS_STYLE_FIELD, FS_CALC_CURRENT, "e_no_syn");