summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author童宗振 <[email protected]>2024-05-17 14:29:24 +0000
committer童宗振 <[email protected]>2024-05-17 14:29:24 +0000
commita92b24ab49e2de0ad3461867aa10947a14998687 (patch)
treed183d32bc6b1bab08f5f4883eb2717af827dec27
parentadfdd8368973fabbf1580edf9df21471c8c5ae04 (diff)
parentd386e297b7a1739542064600a008c70e33c25f3b (diff)
Merge branch 'add_debug_option' into 'master'v0.1.12-20240517
Add debug option See merge request tsg/dp_telemetry_app!39
-rw-r--r--etc/dp_trace.conf2
-rw-r--r--etc/dp_trace_dy.conf7
-rw-r--r--include/config.h7
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/config.c8
-rw-r--r--src/trace_output.c55
-rw-r--r--test/CMakeLists.txt2
7 files changed, 70 insertions, 13 deletions
diff --git a/etc/dp_trace.conf b/etc/dp_trace.conf
index 21fbcce..a213ee2 100644
--- a/etc/dp_trace.conf
+++ b/etc/dp_trace.conf
@@ -5,7 +5,6 @@ dp_trace_dir=./
device_group="device-xxx"
data_center="center-nyj-one"
monit_file_path=/var/run/mrzcpd/mrmonit.app.dp_trace_telemetry.saving
-send_ctrlbuf=0
[http_server]
listen_addr=127.0.0.1
@@ -13,7 +12,6 @@ listen_port=10000
keep_alive_path=/probe
[kafka]
-kafka_dump_to_log=0
borker_list="192.168.44.12:9094"
topic_name="DATAPATH-TELEMETRY-RECORD"
sasl_username=admin
diff --git a/etc/dp_trace_dy.conf b/etc/dp_trace_dy.conf
index 4c0b92d..47d5e75 100644
--- a/etc/dp_trace_dy.conf
+++ b/etc/dp_trace_dy.conf
@@ -7,4 +7,9 @@ enable=0
bpf_expr=ether host 00:15:5d:b8:10:a6
pkt_cnt_max=0
sampling=1
-snaplen=0 \ No newline at end of file
+snaplen=0
+
+[debug]
+send_ctrlbuf=0
+kafka_dump_to_log=0
+arp_pkt_has_ip_test=0 \ No newline at end of file
diff --git a/include/config.h b/include/config.h
index c499a65..2ef5440 100644
--- a/include/config.h
+++ b/include/config.h
@@ -18,7 +18,6 @@ struct config
char monit_file_path[PATH_MAX];
cpu_set_t cpu_set_io;
- unsigned int send_ctrlbuf;
// device Information
char * sled_ip;
@@ -31,7 +30,6 @@ struct config
char keep_alive_path[MR_SYMBOL_MAX];
// kafka
- unsigned int kafka_dump_to_log;
char topic_name[MR_SYMBOL_MAX];
char broker_list[1024];
char sasl_username[MR_SYMBOL_MAX];
@@ -55,6 +53,11 @@ struct config
unsigned int nr_desc;
struct dp_trace_job_desc desc[DP_TRACE_JOB_NUM_MAX];
+
+ // debug
+ unsigned int send_ctrlbuf;
+ unsigned int kafka_dump_to_log;
+ unsigned int arp_pkt_has_ip_test;
};
const struct config * config_create(const char * config_path, const char * dy_config_path);
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
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 2098f58..8c90a88 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -14,4 +14,4 @@ set(DP_TRACE_TELEMETRY_SOURCES
${CMAKE_SOURCE_DIR}/support/mpack/mpack.c)
add_executable(cmocka_test cmocka_test.c ${DP_TRACE_TELEMETRY_SOURCES})
-target_link_libraries(cmocka_test libpcapng libmarsio maatframe MESA_prof_load libevent-static rdkafka libcmocka libzlog libcjson uuid pthread)
+target_link_libraries(cmocka_test libpcapng libmarsio maatframe MESA_prof_load libevent-static rdkafka libcmocka libzlog libcjson uuid pthread pcap)