diff --git a/conf/kni.conf b/conf/kni.conf index 2fa63b0..46e4a9d 100644 --- a/conf/kni.conf +++ b/conf/kni.conf @@ -68,5 +68,6 @@ mho_thread_safe = 1 mho_mutex_num = 160 mho_hash_slot_size = 160000 mho_hash_max_element_num = 640000 -mho_expire_time = 30 +#must be 0 +mho_expire_time = 0 mho_eliminate_type = LRU \ No newline at end of file diff --git a/entry/src/kni_entry.cpp b/entry/src/kni_entry.cpp index 9345d0b..4aaa60a 100644 --- a/entry/src/kni_entry.cpp +++ b/entry/src/kni_entry.cpp @@ -203,7 +203,7 @@ static struct pme_info* pme_info_new(const struct streaminfo *stream, int thread uuid_generate_random(uu); uuid_unparse(uu, pmeinfo->stream_traceid); 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] = ""; //init pme_lock 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 if(pmeinfo->action == KNI_ACTION_INTERCEPT){ + //del traceid2pme htable 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, key_size, NULL); 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); FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_ID2PME_DEL_FAIL], 0, FS_OP_ADD, 1); } 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); 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 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), key_size, (const void*)pmeinfo); if(ret < 0){ - KNI_LOG_ERROR(logger, "MESA_htable: failed at MESA_htable_add," - "table is traceid2pme_htable, key is %s", pmeinfo->stream_traceid); + KNI_LOG_ERROR(logger, "MESA_htable: Failed at add," + "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); } 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); 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, key_size, (const void*)c2s_value); if(ret < 0){ - KNI_LOG_ERROR(logger, "MESA_htable: failed at MESA_htable_add," - "table is keepalive_replay_htable, dir is c2s, stream is %s", stream_addr); + KNI_LOG_ERROR(logger, "MESA_htable: Failed at add," + "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); } 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); //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), key_size, (const void*)s2c_value); if(ret < 0){ - KNI_LOG_ERROR(logger, "MESA_htable: failed at MESA_htable_add," - "table is keepalive_replay_htable, dir is s2c, stream is %s", stream_addr); + KNI_LOG_ERROR(logger, "MESA_htable: Failed at add," + "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); } 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); //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){ //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; pmeinfo->server_bytes=stream->ptcpdetail->serverbytes; 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_CERT_VERIFY, sizeof(pmeinfo->ssl_cert_verify), 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); judge_pme_destroy(pmeinfo, CALLER_TFE); }