#ifndef _TFE_DP_TRACE_H #define _TFE_DP_TRACE_H #ifdef __cpluscplus extern "C" { #endif #include static inline void record_msg_on_ctrl_pkt(char *buff, int size, char *rule_id, uint64_t session_id, const char *state, const char *action, const char *reason) { int n = snprintf(buff, size, "intercept rule id=%s, session=%lu, state=%s", rule_id, session_id, state); if (action) { n += snprintf(buff + n, size - n, ", action=%s", action); } if (reason) { n += snprintf(buff + n, size - n, ", reason=%s", reason); } } static inline void record_msg_on_raw_pkt(char *buff, int size, char *rule_id, const char *traffic, const char *action, const char *reason) { int n = snprintf(buff, size, "intercept rule id=%s, traffic=%s, action=%s", rule_id, traffic, action); if (reason) { snprintf(buff + n, size - n, ", reason=%s", reason); } } static inline void tfe_dp_telemetry_on_ctrl_pkt(mr_instance *mr_ins, marsio_buff_t *mr_buff, char *rule_id, uint64_t session_id, const char *state, const char *action, const char *reason) { if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE)) { char buff[512] = {0}; record_msg_on_ctrl_pkt(buff, sizeof(buff), rule_id, session_id, state, action, reason); marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE, "Session Synchronization", buff); } if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TELEMETRY)) { char buff[512] = {0}; record_msg_on_ctrl_pkt(buff, sizeof(buff), rule_id, session_id, state, action, reason); marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TELEMETRY, "Session Synchronization", buff); } } static inline void tfe_dp_on_raw_pkt(mr_instance *mr_ins, marsio_buff_t *mr_buff, char *rule_id, const char *traffic, const char *action, const char *reason) { if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE)) { char buff[512] = {0}; record_msg_on_raw_pkt(buff, sizeof(buff), rule_id, traffic, action, reason); marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TRACE, "Packet I/O", buff); } if (marsio_dp_trace_measurements_can_emit(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TELEMETRY)) { char buff[512] = {0}; record_msg_on_raw_pkt(buff, sizeof(buff), rule_id, traffic, action, reason); marsio_dp_trace_measurement_emit_str(mr_ins, mr_buff, DP_TRACE_MEASUREMENT_TYPE_TELEMETRY, "Packet I/O", buff); } } #ifdef __cpluscplus } #endif #endif