summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfumingwei <[email protected]>2021-05-11 11:22:59 +0800
committerfumingwei <[email protected]>2021-05-11 11:22:59 +0800
commitdd089adefd79da0995b311acca90004748c68b54 (patch)
treebd32f9b81f156d766c80ba25769fae4fba250dcd
parente7573e57030c2df2764ac26bfea29fdd3734944f (diff)
增加对是否是重复流量不确定的情况下的处理
-rw-r--r--common/include/kni_utils.h1
-rw-r--r--entry/include/kni_entry.h1
-rw-r--r--entry/src/kni_entry.cpp19
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");