diff options
| author | luwenpeng <[email protected]> | 2023-08-04 16:56:32 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2023-08-08 10:55:42 +0800 |
| commit | bc39cd0706dceea2a5ea875d6c7898377024650f (patch) | |
| tree | 5f6fd8983a508367fd039ccd304297a5236631bd /common/src/tfe_raw_packet.cpp | |
| parent | e43b4954b5b75ef5dd27974073b691a68bdbf9f7 (diff) | |
TFE适配MRZCPD的分流算法的变更;并增加分流的调试日志v4.8.33-20230808
Diffstat (limited to 'common/src/tfe_raw_packet.cpp')
| -rw-r--r-- | common/src/tfe_raw_packet.cpp | 64 |
1 files changed, 61 insertions, 3 deletions
diff --git a/common/src/tfe_raw_packet.cpp b/common/src/tfe_raw_packet.cpp index 9efada2..07c0932 100644 --- a/common/src/tfe_raw_packet.cpp +++ b/common/src/tfe_raw_packet.cpp @@ -168,7 +168,7 @@ int raw_packet_parser_get_most_inner_tuple4(struct raw_pkt_parser *handler, stru // return 0 : success // return -1 : error -int raw_packet_parser_get_most_outer_tuple4(struct raw_pkt_parser *handler, struct addr_tuple4 *addr, void *logger) +int raw_packet_parser_get_most_outer_tuple4(struct raw_pkt_parser *handler, struct addr_tuple4 *addr, void *logger) { const char *l3_layer_data = NULL; const char *l4_layer_data = NULL; @@ -271,6 +271,64 @@ int raw_packet_parser_get_most_outer_address(struct raw_pkt_parser *handler, str return -1; } +uint16_t raw_packet_parser_get_most_inner_ipid(struct raw_pkt_parser *handler) +{ + const char *l3_layer_data = NULL; + struct layer_results *results = &handler->results; + + // search L3 layer in reverse order + for (int8_t i = results->layers_used - 1; i >= 0; i--) + { + const struct layer_result *layer = &results->layers[i]; + enum layer_type type = layer->type; + + if (type & LAYER_TYPE_L3) + { + l3_layer_data = (const char *)handler->ptr_pkt_start + layer->offset; + if (type == LAYER_TYPE_IPV4) + { + const struct ip *ipv4_hdr = (const struct ip *)l3_layer_data; + return ntohs(ipv4_hdr->ip_id); + } + else + { + return 0; + } + } + } + + return 0; +} + +uint16_t raw_packet_parser_get_most_outer_ipid(struct raw_pkt_parser *handler) +{ + const char *l3_layer_data = NULL; + struct layer_results *results = &handler->results; + + // search L3 layer in order + for (int8_t i = 0; i <= results->layers_used - 1; i++) + { + const struct layer_result *layer = &results->layers[i]; + enum layer_type type = layer->type; + + if (type & LAYER_TYPE_L3) + { + l3_layer_data = (const char *)handler->ptr_pkt_start + layer->offset; + if (type == LAYER_TYPE_IPV4) + { + const struct ip *ipv4_hdr = (const struct ip *)l3_layer_data; + return ntohs(ipv4_hdr->ip_id); + } + else + { + return 0; + } + } + } + + return -1; +} + uint64_t raw_packet_parser_get_hash_value(struct raw_pkt_parser *handler, enum ldbc_method method, int dir_is_internal, void *logger) { uint64_t temp = 0; @@ -392,7 +450,7 @@ uint64_t raw_packet_parser_get_hash_value(struct raw_pkt_parser *handler, enum l char *inner_addr_str = addr_tuple4_to_str(&inner_addr); char *outer_addr_str = addr_tuple4_to_str(&outer_addr); TFE_LOG_DEBUG(logger, "%s: pkt_trace_id: %lu, outer_addr: %s, inner_addr: %s, is_internal: %d, hash_method: %s, hash_value: %lu", - LOG_TAG_RAWPKT, handler->pkt_trace_id, outer_addr_str, inner_addr_str, dir_is_internal, ldbc_method_to_string(method), hash_value); + LOG_TAG_RAWPKT, handler->pkt_trace_id, outer_addr_str, inner_addr_str, dir_is_internal, ldbc_method_to_string(method), hash_value); free(inner_addr_str); free(outer_addr_str); @@ -889,7 +947,7 @@ static const void *parse_vxlan(struct raw_pkt_parser *handler, const void *data, return data; } - //struct vxlan_hdr *vxlan_hdr = (struct vxlan_hdr *)data; + // struct vxlan_hdr *vxlan_hdr = (struct vxlan_hdr *)data; uint16_t hdr_len = sizeof(struct vxlan_hdr); const void *data_next_layer = (const char *)data + hdr_len; size_t data_next_length = length - hdr_len; |
