diff --git a/conf/kni.conf b/conf/kni.conf index f513484..219961d 100644 --- a/conf/kni.conf +++ b/conf/kni.conf @@ -86,6 +86,8 @@ mho_thread_safe = 0 mho_mutex_num = 160 mho_hash_slot_size = 160000 mho_hash_max_element_num = 640000 +mho_expire_time = 0 +mho_eliminate_type = LRU [field_stat] remote_switch = 1 diff --git a/entry/src/kni_entry.cpp b/entry/src/kni_entry.cpp index e12fb3e..597e57f 100644 --- a/entry/src/kni_entry.cpp +++ b/entry/src/kni_entry.cpp @@ -919,14 +919,16 @@ static int tuple2stream_htable_add(MESA_htable_handle tuple2stream_htable, addr_ struct stream_tuple4_v4 key; tuple2stream_htable_key_get_v4_by_packet(pktinfo, &key, &(value->reversed)); ret = MESA_htable_add(tuple2stream_htable, (const unsigned char *)&key, sizeof(key), (const void*)value); + char key_str[KNI_ADDR_MAX]; + kni_addr_trans_v4(&key, key_str, sizeof(key_str)); if(ret < 0){ - char key_str[KNI_ADDR_MAX]; - kni_addr_trans_v4(&key, key_str, sizeof(key_str)); FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_ADD_FAIL], 0, FS_OP_ADD, 1); KNI_LOG_ERROR(logger, "MESA_htable: Failed at add, table = tuple2stream_htable, key = %s, key_size = %d, ret = %d", key_str, sizeof(key), ret); } else{ + //KNI_LOG_DEBUG(logger, "MESA_htable: Succeed at add, table = tuple2stream_htable, key = %s, key_size = %d, value = %p, ret = %d", + key_str, sizeof(key), value, ret); FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_ADD_SUCC], 0, FS_OP_ADD, 1); } } @@ -1007,21 +1009,27 @@ int tuple2stream_htable_del(MESA_htable_handle handle, const struct streaminfo * KNI_LOG_ERROR(logger, "MESA_htable: Failed at del, table = %s, key = %s, key_size = %d, ret = %d", "tuple2stream_htable", key_str, sizeof(key), ret); } - FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_DEL_SUCC], 0, FS_OP_ADD, 1); + else{ + FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_DEL_SUCC], 0, FS_OP_ADD, 1); + } } //ipv4 else{ struct stream_tuple4_v4 key; tuple2stream_htable_key_get_v4_by_stream(stream, &key, &reversed); ret = MESA_htable_del(handle, (const unsigned char *)(&key), sizeof(key), NULL); + char key_str[KNI_ADDR_MAX]; + kni_addr_trans_v4(&key, key_str, sizeof(key_str)); if(ret < 0){ - char key_str[KNI_ADDR_MAX]; - kni_addr_trans_v4(&key, key_str, sizeof(key_str)); FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_DEL_FAIL], 0, FS_OP_ADD, 1); KNI_LOG_ERROR(logger, "MESA_htable: Failed at del, table = %s, key = %s, key_size = %d, ret = %d", "tuple2stream_htable", key_str, sizeof(key), ret); } - FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_DEL_SUCC], 0, FS_OP_ADD, 1); + else{ + //KNI_LOG_DEBUG(logger, "MESA_htable: Succeed at del, table = %s, key = %s, key_size = %d, ret = %d", + "tuple2stream_htable", key_str, sizeof(key), ret); + FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_DEL_SUCC], 0, FS_OP_ADD, 1); + } } return ret; } @@ -1523,6 +1531,7 @@ int tuple2stream_htable_search(MESA_htable_handle handle, struct ethhdr *ether_h tuple2stream_htable_value *value = NULL; struct pkt_info pktinfo; int reversed = 0, ret; + int key_size = 0; char key_str[KNI_ADDR_MAX]; //ipv6 if(ether_hdr->h_proto == htons(ETH_P_IPV6)){ @@ -1548,12 +1557,13 @@ int tuple2stream_htable_search(MESA_htable_handle handle, struct ethhdr *ether_h return -1; } struct stream_tuple4_v4 key; - kni_addr_trans_v4(&key, key_str, sizeof(key_str)); + key_size = sizeof(key); tuple2stream_htable_key_get_v4_by_packet(&pktinfo, &key, &reversed); - value = (tuple2stream_htable_value*)MESA_htable_search(handle, (const unsigned char*)(&key), sizeof(key)); + kni_addr_trans_v4(&key, key_str, sizeof(key_str)); + value = (tuple2stream_htable_value*)MESA_htable_search(handle, (const unsigned char*)(&key), key_size); } if(value == NULL){ - KNI_LOG_ERROR(logger, "MESA_htable: failed at search, key = %s", key_str); + KNI_LOG_ERROR(logger, "MESA_htable: failed at search, table is tuple2stream_htable, key = %s, key_size = %d", key_str, key_size); //FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_SEARCH_FAIL], 0, FS_OP_ADD, 1); return -1; } @@ -1599,7 +1609,7 @@ extern "C" char kni_polling_all_entry(const struct streaminfo *stream, void** pm continue; } for(int j = 0; j < nr_recv; j++){ - struct ethhdr *ether_hdr = (struct ethhdr*)marsio_buff_mtod(rx_buffs[i]); + struct ethhdr *ether_hdr = (struct ethhdr*)marsio_buff_mtod(rx_buffs[j]); tuple2stream_htable_search(tuple2stream_htable, ether_hdr, thread_seq); flag = 1; } @@ -2071,11 +2081,11 @@ int dup_traffic_dabloom_init(const char *profile, void *logger){ return 0; } +/* void my_handler(int s){ printf("Caught signal %d\n",s); exit(1); } - int register_signal_handle(){ struct sigaction sigIntHandler; sigIntHandler.sa_handler = my_handler; @@ -2084,9 +2094,10 @@ int register_signal_handle(){ sigaction(SIGINT, &sigIntHandler, NULL); return 0; } +*/ extern "C" int kni_init(){ - register_signal_handle(); + //register_signal_handle(); char *kni_git_verison = (char*)KNI_GIT_VERSION; const char *profile = "./etc/kni/kni.conf"; const char *section = "global";