修复一些已知的bug
* 修复keepalive_replay_htable add失败的问题 * 修改clock_gettime的参数为CLOCK_REALTIME * 修改kni.conf中keepalive_replay_htable的超时时间为0(不超时)
This commit is contained in:
@@ -68,5 +68,6 @@ mho_thread_safe = 1
|
|||||||
mho_mutex_num = 160
|
mho_mutex_num = 160
|
||||||
mho_hash_slot_size = 160000
|
mho_hash_slot_size = 160000
|
||||||
mho_hash_max_element_num = 640000
|
mho_hash_max_element_num = 640000
|
||||||
mho_expire_time = 30
|
#must be 0
|
||||||
|
mho_expire_time = 0
|
||||||
mho_eliminate_type = LRU
|
mho_eliminate_type = LRU
|
||||||
@@ -203,7 +203,7 @@ static struct pme_info* pme_info_new(const struct streaminfo *stream, int thread
|
|||||||
uuid_generate_random(uu);
|
uuid_generate_random(uu);
|
||||||
uuid_unparse(uu, pmeinfo->stream_traceid);
|
uuid_unparse(uu, pmeinfo->stream_traceid);
|
||||||
pmeinfo->addr = layer_addr_dup(&(stream->addr));
|
pmeinfo->addr = layer_addr_dup(&(stream->addr));
|
||||||
clock_gettime(CLOCK_MONOTONIC, &(pmeinfo->start_time));
|
clock_gettime(CLOCK_REALTIME, &(pmeinfo->start_time));
|
||||||
char stream_addr[KNI_SYMBOL_MAX] = "";
|
char stream_addr[KNI_SYMBOL_MAX] = "";
|
||||||
//init pme_lock
|
//init pme_lock
|
||||||
int ret = pthread_mutex_init(&(pmeinfo->lock), NULL);
|
int ret = pthread_mutex_init(&(pmeinfo->lock), NULL);
|
||||||
@@ -371,19 +371,51 @@ static void judge_pme_destroy(struct pme_info *pmeinfo, int caller){
|
|||||||
}
|
}
|
||||||
//only intercetp stream need del htable
|
//only intercetp stream need del htable
|
||||||
if(pmeinfo->action == KNI_ACTION_INTERCEPT){
|
if(pmeinfo->action == KNI_ACTION_INTERCEPT){
|
||||||
|
//del traceid2pme htable
|
||||||
int key_size = strnlen(pmeinfo->stream_traceid, sizeof(pmeinfo->stream_traceid));
|
int key_size = strnlen(pmeinfo->stream_traceid, sizeof(pmeinfo->stream_traceid));
|
||||||
ret = MESA_htable_del(g_kni_handle->traceid2pme_htable, (const unsigned char *)pmeinfo->stream_traceid,
|
ret = MESA_htable_del(g_kni_handle->traceid2pme_htable, (const unsigned char *)pmeinfo->stream_traceid,
|
||||||
key_size, NULL);
|
key_size, NULL);
|
||||||
if(ret < 0){
|
if(ret < 0){
|
||||||
KNI_LOG_ERROR(logger, "MESA_htable: failed at del, table is %s, key is %s, key_size is %d, ret is %d",
|
KNI_LOG_ERROR(logger, "MESA_htable: Failed at del, table is %s, key is %s, key_size is %d, ret is %d",
|
||||||
"traceid2pme_htable", pmeinfo->stream_traceid, key_size, ret);
|
"traceid2pme_htable", pmeinfo->stream_traceid, key_size, ret);
|
||||||
FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_DEL_FAIL], 0, FS_OP_ADD, 1);
|
FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_DEL_FAIL], 0, FS_OP_ADD, 1);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
KNI_LOG_DEBUG(logger, "MESA_htable: succeed at del, table is %s, key is %s, key_size is %d",
|
KNI_LOG_DEBUG(logger, "MESA_htable: Succeed at del, table is %s, key is %s, key_size is %d",
|
||||||
"traceid2pme_htable", pmeinfo->stream_traceid, key_size);
|
"traceid2pme_htable", pmeinfo->stream_traceid, key_size);
|
||||||
FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_DEL_SUCC], 0, FS_OP_ADD, 1);
|
FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_DEL_SUCC], 0, FS_OP_ADD, 1);
|
||||||
}
|
}
|
||||||
|
//del keepalive_replay_htable
|
||||||
|
char stream_addr[KNI_SYMBOL_MAX] = "";
|
||||||
|
kni_stream_addr_trans((const layer_addr*)(pmeinfo->addr), stream_addr, sizeof(stream_addr));
|
||||||
|
//c2s
|
||||||
|
struct stream_tuple4_v4 *c2s_key = pmeinfo->addr->tuple4_v4;
|
||||||
|
key_size = sizeof(*c2s_key);
|
||||||
|
ret = MESA_htable_del(g_kni_handle->keepalive_replay_htable, (const unsigned char*)c2s_key, key_size, NULL);
|
||||||
|
if(ret < 0){
|
||||||
|
KNI_LOG_ERROR(logger, "MESA_htable: Failed at del, table is %s, stream addr is %s, dir is c2s, ret is %d",
|
||||||
|
"keepalive_replay_htable", stream_addr, ret);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
KNI_LOG_DEBUG(logger, "MESA_htable: Succeed at del, table is %s, stream addr is %s, dir is c2s",
|
||||||
|
"keepalive_replay_htable", stream_addr);
|
||||||
|
}
|
||||||
|
//s2c
|
||||||
|
struct stream_tuple4_v4 s2c_key;
|
||||||
|
key_size = sizeof(s2c_key);
|
||||||
|
s2c_key.saddr = c2s_key->daddr;
|
||||||
|
s2c_key.daddr = c2s_key->saddr;
|
||||||
|
s2c_key.source = c2s_key->dest;
|
||||||
|
s2c_key.dest = c2s_key->source;
|
||||||
|
ret = MESA_htable_del(g_kni_handle->keepalive_replay_htable, (const unsigned char*)&s2c_key, key_size, NULL);
|
||||||
|
if(ret < 0){
|
||||||
|
KNI_LOG_ERROR(logger, "MESA_htable: Failed at del, table is %s, stream addr is %s, dir is s2c, ret is %d",
|
||||||
|
"keepalive_replay_htable", stream_addr, ret);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
KNI_LOG_DEBUG(logger, "MESA_htable: Succeed at del, table is %s, stream addr is %s, dir is s2c",
|
||||||
|
"keepalive_replay_htable", stream_addr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//free pme
|
//free pme
|
||||||
pme_info_destroy(pmeinfo);
|
pme_info_destroy(pmeinfo);
|
||||||
@@ -719,12 +751,12 @@ static char data_opstate(const struct streaminfo *stream, struct pme_info *pmein
|
|||||||
ret = MESA_htable_add(g_kni_handle->traceid2pme_htable, (const unsigned char *)(pmeinfo->stream_traceid),
|
ret = MESA_htable_add(g_kni_handle->traceid2pme_htable, (const unsigned char *)(pmeinfo->stream_traceid),
|
||||||
key_size, (const void*)pmeinfo);
|
key_size, (const void*)pmeinfo);
|
||||||
if(ret < 0){
|
if(ret < 0){
|
||||||
KNI_LOG_ERROR(logger, "MESA_htable: failed at MESA_htable_add,"
|
KNI_LOG_ERROR(logger, "MESA_htable: Failed at add,"
|
||||||
"table is traceid2pme_htable, key is %s", pmeinfo->stream_traceid);
|
"table is traceid2pme_htable, key is %s, ret is %d", pmeinfo->stream_traceid, ret);
|
||||||
FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_ADD_FAIL], 0, FS_OP_ADD, 1);
|
FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_ADD_FAIL], 0, FS_OP_ADD, 1);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
KNI_LOG_DEBUG(logger, "MESA_htable: succeed at MESA_htable_add,"
|
KNI_LOG_DEBUG(logger, "MESA_htable: Succeed at add,"
|
||||||
"table is traceid2pme_htable, key is %s", pmeinfo->stream_traceid);
|
"table is traceid2pme_htable, key is %s", pmeinfo->stream_traceid);
|
||||||
FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_ADD_SUCC], 0, FS_OP_ADD, 1);
|
FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_ADD_SUCC], 0, FS_OP_ADD, 1);
|
||||||
}
|
}
|
||||||
@@ -738,12 +770,12 @@ static char data_opstate(const struct streaminfo *stream, struct pme_info *pmein
|
|||||||
ret = MESA_htable_add(g_kni_handle->keepalive_replay_htable, (const unsigned char *)c2s_key,
|
ret = MESA_htable_add(g_kni_handle->keepalive_replay_htable, (const unsigned char *)c2s_key,
|
||||||
key_size, (const void*)c2s_value);
|
key_size, (const void*)c2s_value);
|
||||||
if(ret < 0){
|
if(ret < 0){
|
||||||
KNI_LOG_ERROR(logger, "MESA_htable: failed at MESA_htable_add,"
|
KNI_LOG_ERROR(logger, "MESA_htable: Failed at add,"
|
||||||
"table is keepalive_replay_htable, dir is c2s, stream is %s", stream_addr);
|
"table is keepalive_replay_htable, dir is c2s, stream is %s, ret is %d", stream_addr, ret);
|
||||||
//FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_ADD_FAIL], 0, FS_OP_ADD, 1);
|
//FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_ADD_FAIL], 0, FS_OP_ADD, 1);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
KNI_LOG_DEBUG(logger, "MESA_htable: succeed at MESA_htable_add,"
|
KNI_LOG_DEBUG(logger, "MESA_htable: Succeed at add,"
|
||||||
"table is keepalive_replay_htable, dir is c2s, stream is %s", stream_addr);
|
"table is keepalive_replay_htable, dir is c2s, stream is %s", stream_addr);
|
||||||
//FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_ADD_SUCC], 0, FS_OP_ADD, 1);
|
//FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_ADD_SUCC], 0, FS_OP_ADD, 1);
|
||||||
}
|
}
|
||||||
@@ -757,12 +789,12 @@ static char data_opstate(const struct streaminfo *stream, struct pme_info *pmein
|
|||||||
ret = MESA_htable_add(g_kni_handle->keepalive_replay_htable, (const unsigned char *)(&s2c_key),
|
ret = MESA_htable_add(g_kni_handle->keepalive_replay_htable, (const unsigned char *)(&s2c_key),
|
||||||
key_size, (const void*)s2c_value);
|
key_size, (const void*)s2c_value);
|
||||||
if(ret < 0){
|
if(ret < 0){
|
||||||
KNI_LOG_ERROR(logger, "MESA_htable: failed at MESA_htable_add,"
|
KNI_LOG_ERROR(logger, "MESA_htable: Failed at add,"
|
||||||
"table is keepalive_replay_htable, dir is s2c, stream is %s", stream_addr);
|
"table is keepalive_replay_htable, dir is s2c, stream is %s, ret is %d", stream_addr, ret);
|
||||||
//FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_ADD_FAIL], 0, FS_OP_ADD, 1);
|
//FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_ADD_FAIL], 0, FS_OP_ADD, 1);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
KNI_LOG_DEBUG(logger, "MESA_htable: succeed at MESA_htable_add,"
|
KNI_LOG_DEBUG(logger, "MESA_htable: Succeed at add,"
|
||||||
"table is keepalive_replay_htable, dir is s2c, stream is %s", stream_addr);
|
"table is keepalive_replay_htable, dir is s2c, stream is %s", stream_addr);
|
||||||
//FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_ADD_SUCC], 0, FS_OP_ADD, 1);
|
//FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_ADD_SUCC], 0, FS_OP_ADD, 1);
|
||||||
}
|
}
|
||||||
@@ -790,7 +822,7 @@ static char data_opstate(const struct streaminfo *stream, struct pme_info *pmein
|
|||||||
|
|
||||||
static char close_opstate(const struct streaminfo *stream, struct pme_info *pmeinfo, struct pkt_info *pktinfo, int thread_seq){
|
static char close_opstate(const struct streaminfo *stream, struct pme_info *pmeinfo, struct pkt_info *pktinfo, int thread_seq){
|
||||||
//close: a_packet = null, do not sendto tfe
|
//close: a_packet = null, do not sendto tfe
|
||||||
clock_gettime(CLOCK_MONOTONIC, &(pmeinfo->end_time));
|
clock_gettime(CLOCK_REALTIME, &(pmeinfo->end_time));
|
||||||
void *logger = g_kni_handle->local_logger;
|
void *logger = g_kni_handle->local_logger;
|
||||||
pmeinfo->server_bytes=stream->ptcpdetail->serverbytes;
|
pmeinfo->server_bytes=stream->ptcpdetail->serverbytes;
|
||||||
pmeinfo->client_bytes=stream->ptcpdetail->clientbytes;
|
pmeinfo->client_bytes=stream->ptcpdetail->clientbytes;
|
||||||
@@ -1130,7 +1162,7 @@ static long traceid2pme_htable_search_cb(void *data, const uchar *key, uint size
|
|||||||
wrapped_kni_cmsg_get(pmeinfo, cmsg, TFE_CMSG_SSL_PINNING_STATE, sizeof(pmeinfo->pinningst), logger);
|
wrapped_kni_cmsg_get(pmeinfo, cmsg, TFE_CMSG_SSL_PINNING_STATE, sizeof(pmeinfo->pinningst), logger);
|
||||||
wrapped_kni_cmsg_get(pmeinfo, cmsg, TFE_CMSG_SSL_CERT_VERIFY, sizeof(pmeinfo->ssl_cert_verify), logger);
|
wrapped_kni_cmsg_get(pmeinfo, cmsg, TFE_CMSG_SSL_CERT_VERIFY, sizeof(pmeinfo->ssl_cert_verify), logger);
|
||||||
wrapped_kni_cmsg_get(pmeinfo, cmsg, TFE_CMSG_SSL_ERROR, sizeof(pmeinfo->ssl_error), logger);
|
wrapped_kni_cmsg_get(pmeinfo, cmsg, TFE_CMSG_SSL_ERROR, sizeof(pmeinfo->ssl_error), logger);
|
||||||
clock_gettime(CLOCK_MONOTONIC, &(pmeinfo->end_time));
|
clock_gettime(CLOCK_REALTIME, &(pmeinfo->end_time));
|
||||||
KNI_LOG_INFO(logger, "recv cmsg from tfe, stream traceid is %s", pmeinfo->stream_traceid);
|
KNI_LOG_INFO(logger, "recv cmsg from tfe, stream traceid is %s", pmeinfo->stream_traceid);
|
||||||
judge_pme_destroy(pmeinfo, CALLER_TFE);
|
judge_pme_destroy(pmeinfo, CALLER_TFE);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user