diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7a0e411..f27ffb3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -27,6 +27,7 @@ branch_build_debug: variables: BUILD_TYPE: Debug PACKAGE: 1 + TESTING_VERSION_BUILD: 1 artifacts: name: "kni-branch-$CI_COMMIT_REF_NAME-debug" paths: @@ -41,6 +42,7 @@ branch_build_release: variables: BUILD_TYPE: RelWithDebInfo PACKAGE: 1 + TESTING_VERSION_BUILD: 1 extends: .build_by_travis artifacts: name: "kni-branch-$CI_COMMIT_REF_NAME-release" diff --git a/entry/src/kni_entry.cpp b/entry/src/kni_entry.cpp index d413411..75baa54 100644 --- a/entry/src/kni_entry.cpp +++ b/entry/src/kni_entry.cpp @@ -859,6 +859,7 @@ static int tuple2stream_htable_add(addr_type_t addr_type, struct pkt_info *pktin MESA_htable_handle tuple2stream_htable = g_kni_handle->threads_handle[thread_seq].tuple2stream_htable; void *logger = g_kni_handle->local_logger; int ret; + char key_str[KNI_ADDR_MAX]; struct tuple2stream_htable_value *value = ALLOC(struct tuple2stream_htable_value, 1); value->stream = stream; value->pmeinfo = pmeinfo; @@ -868,38 +869,29 @@ static int tuple2stream_htable_add(addr_type_t addr_type, struct pkt_info *pktin struct stream_tuple4_v6 key; tuple2stream_htable_key_get_v6_by_packet(pktinfo, &key, &(value->reversed)); ret = MESA_htable_add(tuple2stream_htable, (const unsigned char *)&key, sizeof(key), (const void*)value); - if(ret < 0){ - char key_str[KNI_ADDR_MAX]; + if(ret < 0){ kni_addr_trans_v6(&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{ - FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_ADD_SUCC], 0, FS_OP_ADD, 1); - FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->line_ids[1], g_kni_fs_handle->column_ids[thread_seq], FS_OP_ADD, 1); - FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->line_ids[1], g_kni_fs_handle->column_ids[g_kni_handle->thread_count], FS_OP_ADD, 1); - } } //ipv4 else{ 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){ + 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); - FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->line_ids[1], g_kni_fs_handle->column_ids[thread_seq], FS_OP_ADD, 1); - FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->line_ids[1], g_kni_fs_handle->column_ids[g_kni_handle->thread_count], FS_OP_ADD, 1); - } + } + if(ret >= 0){ + FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_ADD_SUCC], 0, FS_OP_ADD, 1); + FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->line_ids[1], g_kni_fs_handle->column_ids[thread_seq], FS_OP_ADD, 1); + FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->line_ids[1], g_kni_fs_handle->column_ids[g_kni_handle->thread_count], FS_OP_ADD, 1); } return ret; } @@ -925,7 +917,8 @@ static int traceid2pme_htable_add(struct pme_info *pmeinfo){ int tuple2stream_htable_del(const struct streaminfo *stream, int thread_seq){ MESA_htable_handle handle = g_kni_handle->threads_handle[thread_seq].tuple2stream_htable; void *logger = g_kni_handle->local_logger; - int reversed = 0, ret; + int reversed = 0, ret = -1; + char key_str[KNI_ADDR_MAX]; //ipv6 if(stream->addr.addrtype == ADDR_TYPE_IPV6){ struct stream_tuple4_v6 key; @@ -933,37 +926,28 @@ int tuple2stream_htable_del(const struct streaminfo *stream, int thread_seq){ ret = MESA_htable_del(handle, (const unsigned char *)(&key), sizeof(key), NULL); if(ret < 0){ - char key_str[KNI_ADDR_MAX]; kni_addr_trans_v6(&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); } - else{ - FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_DEL_SUCC], 0, FS_OP_ADD, 1); - FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->line_ids[1], g_kni_fs_handle->column_ids[thread_seq], FS_OP_ADD, -1); - FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->line_ids[1], g_kni_fs_handle->column_ids[g_kni_handle->thread_count], 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){ + 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); } - 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); - FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->line_ids[1], g_kni_fs_handle->column_ids[thread_seq], FS_OP_ADD, -1); - FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->line_ids[1], g_kni_fs_handle->column_ids[g_kni_handle->thread_count], FS_OP_ADD, -1); - } + } + if(ret >= 0){ + FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_DEL_SUCC], 0, FS_OP_ADD, 1); + FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->line_ids[1], g_kni_fs_handle->column_ids[thread_seq], FS_OP_ADD, -1); + FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->line_ids[1], g_kni_fs_handle->column_ids[g_kni_handle->thread_count], FS_OP_ADD, -1); } return ret; } @@ -1745,6 +1729,9 @@ int tuple2stream_htable_search(MESA_htable_handle handle, struct ethhdr *ether_h int reversed = 0, ret; int key_size = 0; char key_str[KNI_ADDR_MAX]; + struct stream_tuple4_v6 key_v6; + struct stream_tuple4_v4 key_v4; + memset(key_str,0,sizeof(key_str)); //ipv6 if(ether_hdr->h_proto == htons(ETH_P_IPV6)){ ret = kni_ipv6_header_parse(raw_packet, &pktinfo); @@ -1754,10 +1741,8 @@ int tuple2stream_htable_search(MESA_htable_handle handle, struct ethhdr *ether_h //FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_IPV6HDR_PARSE_FAIL], 0, FS_OP_ADD, 1); return -1; } - struct stream_tuple4_v6 key; - kni_addr_trans_v6(&key, key_str, sizeof(key_str)); - tuple2stream_htable_key_get_v6_by_packet(&pktinfo, &key, &reversed); - value = (tuple2stream_htable_value*)MESA_htable_search(handle, (const unsigned char*)(&key), sizeof(key)); + tuple2stream_htable_key_get_v6_by_packet(&pktinfo, &key_v6, &reversed); + value = (tuple2stream_htable_value*)MESA_htable_search(handle, (const unsigned char*)(&key_v6), sizeof(key_v6)); } //ipv4 else{ @@ -1768,14 +1753,17 @@ int tuple2stream_htable_search(MESA_htable_handle handle, struct ethhdr *ether_h //FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_IPV4HDR_PARSE_FAIL], 0, FS_OP_ADD, 1); return -1; } - struct stream_tuple4_v4 key; - key_size = sizeof(key); - tuple2stream_htable_key_get_v4_by_packet(&pktinfo, &key, &reversed); - kni_addr_trans_v4(&key, key_str, sizeof(key_str)); - value = (tuple2stream_htable_value*)MESA_htable_search(handle, (const unsigned char*)(&key), key_size); + tuple2stream_htable_key_get_v4_by_packet(&pktinfo, &key_v4, &reversed); + value = (tuple2stream_htable_value*)MESA_htable_search(handle, (const unsigned char*)(&key_v4), sizeof(key_v4)); } if(value == NULL){ - KNI_LOG_DEBUG(logger, "MESA_htable: search not hit, table is tuple2stream_htable, key = %s, key_size = %d", key_str, key_size); + if(ether_hdr->h_proto == htons(ETH_P_IPV6)){ + kni_addr_trans_v6(&key_v6, key_str, sizeof(key_str)); + } + else{ + kni_addr_trans_v4(&key_v4, key_str, sizeof(key_str)); + } + KNI_LOG_DEBUG(logger, "MESA_htable: search not hit, table is tuple2stream_htable, key = %s, key_size = %d", key_str, strlen(key_str)); FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TUPLE2STM_SEARCH_MISS], 0, FS_OP_ADD, 1); return -1; } @@ -1788,6 +1776,12 @@ int tuple2stream_htable_search(MESA_htable_handle handle, struct ethhdr *ether_h ret = sapp_inject_pkt(value->stream, SIO_EXCLUDE_THIS_LAYER_HDR, raw_packet, pktinfo.ip_totlen, dir); if(ret < 0){ + if(ether_hdr->h_proto == htons(ETH_P_IPV6)){ + kni_addr_trans_v6(&key_v6, key_str, sizeof(key_str)); + } + else{ + kni_addr_trans_v4(&key_v4, key_str, sizeof(key_str)); + } KNI_LOG_ERROR(logger, "Failed at sapp_inject_pkt, stream addr = %s", key_str); FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_SAPP_INJECT_FAIL], 0, FS_OP_ADD, 1); return -1;