summaryrefslogtreecommitdiff
path: root/common/include/tfe_dp_trace.h
blob: e5acdb360fc91e38938592654de88fd131c3a1ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#ifndef _TFE_DP_TRACE_H
#define _TFE_DP_TRACE_H

#ifdef __cpluscplus
extern "C"
{
#endif

#include <marsio.h>

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