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_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_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_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