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");