diff options
| author | tongzongzhen <[email protected]> | 2024-05-17 22:27:22 +0800 |
|---|---|---|
| committer | tongzongzhen <[email protected]> | 2024-05-17 22:27:22 +0800 |
| commit | d386e297b7a1739542064600a008c70e33c25f3b (patch) | |
| tree | d183d32bc6b1bab08f5f4883eb2717af827dec27 /src | |
| parent | adfdd8368973fabbf1580edf9df21471c8c5ae04 (diff) | |
add debug option for arp test
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/config.c | 8 | ||||
| -rw-r--r-- | src/trace_output.c | 55 |
3 files changed, 58 insertions, 7 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e3f4365..e3b4c2e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,7 +16,7 @@ set(DP_TELEMETRY_SRC ${CMAKE_SOURCE_DIR}/support/mpack/mpack.c) add_executable(${PROJECT_NAME} ${DP_TELEMETRY_SRC}) -target_link_libraries(${PROJECT_NAME} libpcapng libmarsio maatframe MESA_prof_load libevent-static rdkafka libcmocka libzlog libcjson uuid pthread) +target_link_libraries(${PROJECT_NAME} libpcapng libmarsio maatframe MESA_prof_load libevent-static rdkafka libcmocka libzlog libcjson uuid pthread pcap) if(ENABLE_DEVELOP_MOCKING) target_link_options(${PROJECT_NAME} PRIVATE -Wl,--wrap=kafka_handle_create,--wrap=kafka_topic_new,--wrap=kafka_produce) endif() diff --git a/src/config.c b/src/config.c index 0bac464..a70e5d4 100644 --- a/src/config.c +++ b/src/config.c @@ -76,8 +76,6 @@ void config_load() sizeof(g_conf->monit_file_path), "/var/run/mrzcpd/mrmonit.app.dp_trace_telemetry.saving"); - MESA_load_profile_uint_def(config_path, "global", "send_ctrlbuf", &g_conf->send_ctrlbuf, 0); - MESA_load_profile_string_def(config_path, "global", "device_group", g_conf->device_group, sizeof(g_conf->device_group), ""); MESA_load_profile_string_def(config_path, "global", "data_center", g_conf->data_center, sizeof(g_conf->data_center), @@ -97,7 +95,6 @@ void config_load() printf("SLED_IP environment variable does not exist.\n"); } - MESA_load_profile_int_def(config_path, "kafka", "kafka_dump_to_log", &(g_conf->kafka_dump_to_log), 0); MESA_load_profile_string_def(config_path, "kafka", "borker_list", g_conf->broker_list, sizeof(g_conf->broker_list), ""); MESA_load_profile_string_def(config_path, "kafka", "topic_name", g_conf->topic_name, sizeof(g_conf->topic_name), @@ -189,6 +186,11 @@ void dynamic_config_load() desc_i->measurement_type = DP_TRACE_MEASUREMENT_TYPE_TRACE; } + MESA_load_profile_uint_def(g_conf->dy_config_path, "debug", "send_ctrlbuf", &g_conf->send_ctrlbuf, 0); + MESA_load_profile_uint_def(g_conf->dy_config_path, "debug", "kafka_dump_to_log", &(g_conf->kafka_dump_to_log), 0); + MESA_load_profile_uint_def(g_conf->dy_config_path, "debug", "arp_pkt_has_ip_test", &(g_conf->arp_pkt_has_ip_test), + 0); + dzlog_info("Loading data path trace configuration file is completed."); } diff --git a/src/trace_output.c b/src/trace_output.c index 83083ab..d3f48a4 100644 --- a/src/trace_output.c +++ b/src/trace_output.c @@ -17,6 +17,7 @@ #include <netinet/ip6.h> #include <netinet/tcp.h> #include <netinet/udp.h> +#include <pcap.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> @@ -47,6 +48,7 @@ static void dp_trace_decode_to_message_pack(marsio_buff_t * mr_mbuf, char ** dat static int dp_trace_record_decode_to_str(marsio_buff_t * mr_mbuf, char * data, unsigned int size); static void thread_id_to_ring_id_calculate(unsigned int nr_thread, unsigned int nr_ring, unsigned int thread_id, unsigned int qids[], unsigned int * nr_qids); +void arp_pkt_no_ip_verify(marsio_buff_t * mr_mbuf); struct dp_trace_output { @@ -498,6 +500,12 @@ static void dp_trace_decode_to_message_pack(marsio_buff_t * mr_mbuf, char ** dat marsio_dp_trace_buffer_info_get(mr_mbuf, &trace_buff_info); unsigned int position = 0; + const struct config * conf = global_config_get(); + + if (conf->arp_pkt_has_ip_test == 1) + { + arp_pkt_no_ip_verify(mr_mbuf); + } struct timeval tv; gettimeofday(&tv, NULL); @@ -518,9 +526,9 @@ static void dp_trace_decode_to_message_pack(marsio_buff_t * mr_mbuf, char ** dat mpack_write_cstr(&writer, uuid_str); mpack_write_cstr(&writer, "sled_ip"); - if (global_config_get()->sled_ip != NULL) + if (conf->sled_ip != NULL) { - mpack_write_cstr(&writer, global_config_get()->sled_ip); + mpack_write_cstr(&writer, conf->sled_ip); } else { @@ -528,7 +536,7 @@ static void dp_trace_decode_to_message_pack(marsio_buff_t * mr_mbuf, char ** dat } mpack_write_cstr(&writer, "device_group"); - mpack_write_cstr(&writer, global_config_get()->device_group); + mpack_write_cstr(&writer, conf->device_group); mpack_write_cstr(&writer, "traffic_link_id"); mpack_write_i32(&writer, trace_buff_info.traffic_link_id); @@ -725,4 +733,45 @@ void dp_trace_ring_clear() } dzlog_info("The program starts and clears %u mbufs", ring_clear_cnt); +} + +// During the development process, arp packets showed IP on the UI. This function is specially added to locate the +// problem location +void arp_pkt_no_ip_verify(marsio_buff_t * mr_mbuf) +{ + pcap_t * pcap_handle = NULL; + struct bpf_program fp = {}; + pcap_handle = pcap_open_dead(DLT_EN10MB, 65535); + if (pcap_compile(pcap_handle, &fp, "arp", 0, PCAP_NETMASK_UNKNOWN) < 0) + { + dzlog_warn("fail to comple arp bpf expr"); + return; + } + + unsigned int packet_length = marsio_buff_buflen(mr_mbuf); +#define BPF_CAPTURE_PACKAGE_LENGTH 256 + unsigned char tmp_buf[BPF_CAPTURE_PACKAGE_LENGTH]; + unsigned int need_pkt_len = BPF_CAPTURE_PACKAGE_LENGTH < packet_length ? BPF_CAPTURE_PACKAGE_LENGTH : packet_length; + + struct pcap_pkthdr header = {.caplen = need_pkt_len, .len = packet_length}; + const unsigned char * pkt = marsio_buff_mtod(mr_mbuf); + + if ((pcap_offline_filter(&fp, &header, pkt) != 0)) + { + // arp packet + struct dp_trace_buffer_telemetry trace_buff_info; + marsio_dp_trace_buffer_info_get(mr_mbuf, &trace_buff_info); + + if (strlen(trace_buff_info.inner_src_addr_str) != 0) + { + dzlog_error("arp pkt has inner src ip:", trace_buff_info.inner_src_addr_str); + } + if (strlen(trace_buff_info.inner_dst_addr_str) != 0) + { + dzlog_error("arp pkt has inner dst ip:", trace_buff_info.inner_dst_addr_str); + } + } + + pcap_freecode(&fp); + pcap_close(pcap_handle); }
\ No newline at end of file |
