summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2024-04-26 17:37:54 +0800
committerluwenpeng <[email protected]>2024-04-29 17:41:15 +0800
commita56f93982aa194df8a014ba77afd3f9b90148ac0 (patch)
tree95412ca4be880f60ab5ed7b6fa2e39b4b9963e51
parent3385cbaf72988a64231f4a55a26124860afd89c7 (diff)
SCE适配marsio_dp_trace_measurements_can_emit()的变更v1.2.15-20240429
-rw-r--r--platform/include/packet_trace.h145
-rw-r--r--platform/src/packet_io.cpp2
-rw-r--r--test/gmock_marsio.cpp10
3 files changed, 92 insertions, 65 deletions
diff --git a/platform/include/packet_trace.h b/platform/include/packet_trace.h
index 5ac1d6f..3ca4312 100644
--- a/platform/include/packet_trace.h
+++ b/platform/include/packet_trace.h
@@ -14,14 +14,15 @@ extern "C"
/*
* SCE packet trace info format
*
- * PACKET_TRACE_ON_NEW : "(Packet I/O) new packet"
- * PACKET_TRACE_ON_FREE : "(Packet I/O) free packet"
- * PACKET_TRACE_ON_CTRL : "(Session Synchronization) ${MSG}"
+ * PACKET_TRACE_ON_NEW : "Packet I/O new packet"
+ * PACKET_TRACE_ON_FREE : "Packet I/O free packet"
+ * PACKET_TRACE_ON_CTRL : "Session Synchronization ${MSG}"
*
* Service Function Path (SFP) https://datatracker.ietf.org/doc/html/rfc7665
*
- * PACKET_TRACE_ON_POLICY : "(Policy) rule_list: [${Rule_ID1}, ${Rule_ID2}, ...], SFP_list: [${SF_ID1}, ${SF_ID2}, ...]"
- * PACKET_TRACE_ON_CHAIN : "(Forwarder) SF_id: ${SF_ID}, fwd_type: ${FWD_TYPE}, pkt_dir: ${PKT_DIR}, pkt_type: ${PKT_TYPE}, state: ${STATE} ${ACTION}"
+ * PACKET_TRACE_ON_POLICY : "Policy rule list=[${Rule_ID1}, ${Rule_ID2}, ...], SFP list=[${SF_ID1}, ${SF_ID2}, ...]"
+ * PACKET_TRACE_ON_CHAIN : "Forwarder sc rule id=${Rule_ID}, sf id=${SF_ID}, fwd type=${FWD_TYPE}, pkt dir=${PKT_DIR}, pkt type=${PKT_TYPE}, state=${STATE} ${ACTION}"
+ * Forwarder sc rule id=${Rule_ID}, sf id=${SF_ID}, type=${FWD_TYPE}, action=${ACTION}
*
* ${FWD_TYPE}
* steering
@@ -82,67 +83,95 @@ static inline int sf_id_tostring(struct selected_chaining *chain, char *buffer,
return used;
}
-#define PACKET_TRACE_ON_NEW(mr_ins, mr_buff) \
- do \
- { \
- marsio_dp_trace_filter_exec(mr_ins, mr_buff); \
- if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff)) \
- { \
- marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE, "(Packet I/O)", "new packet"); \
- } \
- } while (0)
-
-#define PACKET_TRACE_ON_FREE(mr_ins, mr_buff) \
- do \
- { \
- if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff)) \
- { \
- marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE, "(Packet I/O)", "free packet"); \
- } \
- } while (0)
-
-#define PACKET_TRACE_ON_CTRL(mr_ins, mr_buff, state) \
+#define PACKET_TRACE_ON_NEW(mr_ins, mr_buff) \
do \
{ \
- if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff)) \
+ if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE)) \
{ \
- marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE, "(Session Synchronization)", \
- control_packte_state_to_string(state)); \
+ marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE, "Packet I/O", "new packet"); \
} \
} while (0)
-#define PACKET_TRACE_ON_POLICY(mr_ins, mr_buff, rule_ids, chain) \
- do \
- { \
- if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff)) \
- { \
- char rule_id_str[1024] = {0}; \
- char sf_id_str[1024] = {0}; \
- char buff[4096] = {0}; \
- rule_id_tostring(rule_ids, rule_id_str, sizeof(rule_id_str)); \
- sf_id_tostring(chain, sf_id_str, sizeof(sf_id_str)); \
- snprintf(buff, sizeof(buff), "rule_list: %s, SFP_list: %s", rule_id_str, sf_id_str); \
- marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE, "(Policy)", buff); \
- marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TELEMETRY, "(Policy)", buff); \
- } \
+#define PACKET_TRACE_ON_FREE(mr_ins, mr_buff) \
+ do \
+ { \
+ if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE)) \
+ { \
+ marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE, "Packet I/O", "free packet"); \
+ } \
+ } while (0)
+
+#define PACKET_TRACE_ON_CTRL(mr_ins, mr_buff, state) \
+ do \
+ { \
+ if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE)) \
+ { \
+ marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE, "Session Synchronization", \
+ control_packte_state_to_string(state)); \
+ } \
+ } while (0)
+
+#define PACKET_TRACE_ON_POLICY(mr_ins, mr_buff, rule_ids, chain) \
+ do \
+ { \
+ if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE)) \
+ { \
+ char rule_id_str[1024] = {0}; \
+ char sf_id_str[1024] = {0}; \
+ char buff[4096] = {0}; \
+ rule_id_tostring(rule_ids, rule_id_str, sizeof(rule_id_str)); \
+ sf_id_tostring(chain, sf_id_str, sizeof(sf_id_str)); \
+ snprintf(buff, sizeof(buff), "sc rule list=%s, SFP list=%s", rule_id_str, sf_id_str); \
+ marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE, "Policy", buff); \
+ } \
+ } while (0)
+
+#define PACKET_TELEMETRY_ON_POLICY(mr_ins, mr_buff, rule_ids, chain) \
+ do \
+ { \
+ if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TELEMETRY)) \
+ { \
+ char rule_id_str[1024] = {0}; \
+ char sf_id_str[1024] = {0}; \
+ char buff[4096] = {0}; \
+ rule_id_tostring(rule_ids, rule_id_str, sizeof(rule_id_str)); \
+ sf_id_tostring(chain, sf_id_str, sizeof(sf_id_str)); \
+ snprintf(buff, sizeof(buff), "sc rule list=%s, SFP list=%s", rule_id_str, sf_id_str); \
+ marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TELEMETRY, "Policy", buff); \
+ } \
+ } while (0)
+
+#define PACKET_TRACE_ON_CHAIN(mr_ins, mr_buff, sf, meta) \
+ do \
+ { \
+ if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE)) \
+ { \
+ char buff[2048] = {0}; \
+ snprintf(buff, sizeof(buff), "sc rule id=%lu, sf id=%d, fwd type=%s, pkt dir=%s, pkt type=%s, state=%s %s", \
+ (sf)->rule_id, \
+ (sf)->sf_profile_id, \
+ forward_type_tostring((sf)->sff_forward_type), \
+ ((meta)->direction ? "E2I" : "I2E"), \
+ ((meta)->is_decrypted ? "decrypted" : "raw"), \
+ ((sf)->sf_action == SESSION_ACTION_FORWARD ? "success" : "failure"), \
+ ((sf)->sf_action == SESSION_ACTION_FORWARD ? "" : action_desc_tostring((sf)->sf_action_desc))); \
+ marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE, "Forwarder", buff); \
+ } \
} while (0)
-#define PACKET_TRACE_ON_CHAIN(mr_ins, mr_buff, sf, meta) \
- do \
- { \
- if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff)) \
- { \
- char buff[2048] = {0}; \
- snprintf(buff, sizeof(buff), "SF_id: %d, fwd_type: %s, pkt_dir: %s, pkt_type: %s, state: %s %s", \
- (sf)->sf_profile_id, \
- forward_type_tostring((sf)->sff_forward_type), \
- ((meta)->direction ? "E2I" : "I2E"), \
- ((meta)->is_decrypted ? "decrypted" : "raw"), \
- ((sf)->sf_action == SESSION_ACTION_FORWARD ? "success" : "failure"), \
- ((sf)->sf_action == SESSION_ACTION_FORWARD ? "" : action_desc_tostring((sf)->sf_action_desc))); \
- marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE, "(Forwarder)", buff); \
- marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TELEMETRY, "(Forwarder)", buff); \
- } \
+#define PACKET_TELEMETRY_ON_CHAIN(mr_ins, mr_buff, sf, meta) \
+ do \
+ { \
+ if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TELEMETRY)) \
+ { \
+ char buff[2048] = {0}; \
+ snprintf(buff, sizeof(buff), "sc rule id=%lu, sf id=%d, type=%s, action=%s", \
+ (sf)->rule_id, \
+ (sf)->sf_profile_id, \
+ forward_type_tostring((sf)->sff_forward_type), \
+ action_desc_tostring((sf)->sf_action_desc)); \
+ marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TELEMETRY, "Forwarder", buff); \
+ } \
} while (0)
#ifdef __cpluscplus
diff --git a/platform/src/packet_io.cpp b/platform/src/packet_io.cpp
index 2dc2f3f..2cd58d7 100644
--- a/platform/src/packet_io.cpp
+++ b/platform/src/packet_io.cpp
@@ -694,6 +694,7 @@ static void action_sf_chaining(struct thread_ctx *thread_ctx, struct session_ctx
(meta->is_decrypted ? "decrypted" : "raw"), (meta->direction ? "E2I" : "I2E"), forward_type_tostring(sf->sff_forward_type), action_desc_tostring(sf->sf_action_desc));
PACKET_TRACE_ON_CHAIN(thread_ctx->ref_io->instance, rx_buff, sf, meta);
+ PACKET_TELEMETRY_ON_CHAIN(thread_ctx->ref_io->instance, rx_buff, sf, meta);
switch (sf->sf_action)
{
case SESSION_ACTION_BYPASS:
@@ -1192,6 +1193,7 @@ static void handle_data_packet(marsio_buff_t *rx_buff, struct thread_ctx *thread
THROUGHPUT_METRICS_INC(&(thread_metrics->raw_rx), 1, meta.raw_len);
}
PACKET_TRACE_ON_POLICY(thread_ctx->ref_io->instance, rx_buff, &session_ctx->rule_ids, chaining);
+ PACKET_TELEMETRY_ON_POLICY(thread_ctx->ref_io->instance, rx_buff, &session_ctx->rule_ids, chaining);
action_sf_chaining(thread_ctx, session_ctx, chaining, rx_buff, &meta, 0);
return;
diff --git a/test/gmock_marsio.cpp b/test/gmock_marsio.cpp
index 7e810ae..68c5b55 100644
--- a/test/gmock_marsio.cpp
+++ b/test/gmock_marsio.cpp
@@ -486,21 +486,17 @@ marsio_buff_t *marsio_mbuff_dup(marsio_buff_t *m)
return mbuf;
}
-void marsio_dp_trace_filter_exec(struct mr_instance *instance, marsio_buff_t *mbuf)
-{
-}
-
-int marsio_dp_trace_measurements_can_emit(struct mr_instance *instance, const marsio_buff_t *mbuf)
+int marsio_dp_trace_measurements_can_emit(struct mr_instance *instance, const marsio_buff_t *mbuf, uint8_t measurement_type)
{
return 0;
}
-int marsio_dp_trace_measurement_emit_str(struct mr_instance *instance, marsio_buff_t *mbuf, enum dp_trace_measurements_type type, const char *module, const char *str)
+int marsio_dp_trace_measurement_emit_str(struct mr_instance *instance, marsio_buff_t *mbuf, uint8_t measurement_type, const char *module, const char *str)
{
return 0;
}
-int marsio_dp_trace_measurement_emit_fmt(struct mr_instance *instance, marsio_buff_t *mbuf, enum dp_trace_measurements_type type, const char *module, const char *format, ...)
+int marsio_dp_trace_measurement_emit_fmt(struct mr_instance *instance, marsio_buff_t *mbuf, uint8_t measurement_type, const char *module, const char *format, ...)
{
return 0;
} \ No newline at end of file