diff options
| author | luwenpeng <[email protected]> | 2024-02-29 18:18:30 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2024-03-01 16:14:48 +0800 |
| commit | 93d659601c17f0744a7c87dd52c5b13e79508e79 (patch) | |
| tree | 29fb799982cd5149631b6c882062cf1251bdb9c9 /platform/src | |
| parent | b4e0025e30823b40e71ab00b3c0061a4507ed1c2 (diff) | |
TSG-19631 SCE Support Datapath Packet Trace
Diffstat (limited to 'platform/src')
| -rw-r--r-- | platform/src/packet_io.cpp | 20 | ||||
| -rw-r--r-- | platform/src/policy.cpp | 30 |
2 files changed, 31 insertions, 19 deletions
diff --git a/platform/src/packet_io.cpp b/platform/src/packet_io.cpp index 18ca37a..c27f512 100644 --- a/platform/src/packet_io.cpp +++ b/platform/src/packet_io.cpp @@ -14,6 +14,7 @@ #include "utils.h" #include "vxlan.h" #include "packet_io.h" +#include "packet_trace.h" #include "sf_metrics.h" #include "control_packet.h" #include "global_metrics.h" @@ -528,6 +529,7 @@ static inline int send_packet_to_sf(struct session_ctx *session_ctx, marsio_buff meta->direction, meta->is_decrypted, sf->sf_index); nsend = marsio_buff_datalen(mbuff); marsio_buff_set_metadata(mbuff, MR_BUFF_REHASH_INDEX, &rehash_index, sizeof(rehash_index)); + PACKET_TRACE_ON_NEW(packet_io->instance, mbuff); marsio_send_burst(packet_io->dev_endpoint_l3.mr_path, thread_ctx->thread_index, &mbuff, 1); THROUGHPUT_METRICS_INC(&(thread_metrics->endpoint_vxlan_tx), 1, nsend); break; @@ -537,6 +539,7 @@ static inline int send_packet_to_sf(struct session_ctx *session_ctx, marsio_buff packet_io->config.vlan_encapsulate_replace_orig_vlan_header); nsend = marsio_buff_datalen(mbuff); marsio_buff_set_metadata(mbuff, MR_BUFF_REHASH_INDEX, &rehash_index, sizeof(rehash_index)); + PACKET_TRACE_ON_NEW(packet_io->instance, mbuff); marsio_send_burst(packet_io->dev_endpoint_l2.mr_path, thread_ctx->thread_index, &mbuff, 1); THROUGHPUT_METRICS_INC(&(thread_metrics->endpoint_vlan_tx), 1, nsend); break; @@ -570,6 +573,7 @@ static inline void action_err_block(marsio_buff_t *rx_buff, struct metadata *met int thread_index = thread_ctx->thread_index; THROUGHPUT_METRICS_INC(&(thread_metrics->error_block), 1, meta->raw_len); + PACKET_TRACE_ON_FREE(packet_io->instance, rx_buff); marsio_buff_free(packet_io->instance, &rx_buff, 1, 0, thread_index); } @@ -649,6 +653,7 @@ static inline void action_stee_block(marsio_buff_t *rx_buff, struct metadata *me int thread_index = thread_ctx->thread_index; THROUGHPUT_METRICS_INC(&(thread_metrics->stee_block), 1, meta->raw_len); + PACKET_TRACE_ON_FREE(packet_io->instance, rx_buff); marsio_buff_free(packet_io->instance, &rx_buff, 1, 0, thread_index); } @@ -679,6 +684,7 @@ static void action_sf_chaining(struct thread_ctx *thread_ctx, struct session_ctx sf->rule_id, sf->sff_profile_id, sf->sf_profile_id, (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); switch (sf->sf_action) { case SESSION_ACTION_BYPASS: @@ -873,6 +879,7 @@ static int send_ctrl_packet(struct session_ctx *session_ctx, struct thread_ctx * route_ctx_copy(&meta.route_ctx, &(session_ctx->ctrl_route_ctx)); mbuff_set_metadata(tx_buffs[0], &meta); int nsend = marsio_buff_datalen(tx_buffs[0]); + PACKET_TRACE_ON_NEW(packet_io->instance, tx_buffs[0]); marsio_send_burst(packet_io->dev_nf.mr_path, thread_index, tx_buffs, 1); free(data); @@ -1050,6 +1057,7 @@ static void handle_control_packet(marsio_buff_t *rx_buff, struct thread_ctx *thr struct thread_metrics *thread_metrics = &thread_ctx->thread_metrics; struct metadata meta; struct control_packet ctrl_pkt; + enum control_packet_state packet_state = CTRL_PKT_SUCCESS; memset(&meta, 0, sizeof(struct metadata)); meta.is_ctrl_pkt = 1; @@ -1061,7 +1069,8 @@ static void handle_control_packet(marsio_buff_t *rx_buff, struct thread_ctx *thr goto error_ctrl_pkt; } - if (control_packet_parse(&ctrl_pkt, meta.raw_data + meta.l7offset, meta.raw_len - meta.l7offset) == -1) + packet_state = control_packet_parse(&ctrl_pkt, meta.raw_data + meta.l7offset, meta.raw_len - meta.l7offset); + if (packet_state != CTRL_PKT_SUCCESS) { LOG_ERROR("%s: unexpected control packet, unable to parse data", LOG_TAG_PKTIO); goto error_ctrl_pkt; @@ -1070,6 +1079,7 @@ static void handle_control_packet(marsio_buff_t *rx_buff, struct thread_ctx *thr if (ctrl_pkt.session_id != meta.session_id) { LOG_ERROR("%s: unexpected control packet, metadata's session %lu != control packet's session %lu", LOG_TAG_PKTIO, meta.session_id, ctrl_pkt.session_id); + packet_state = CTRL_PKT_INVALID_SESSION_ID; goto error_ctrl_pkt; } @@ -1095,9 +1105,11 @@ static void handle_control_packet(marsio_buff_t *rx_buff, struct thread_ctx *thr default: goto error_ctrl_pkt; } + PACKET_TRACE_ON_CTRL(thread_ctx->ref_io->instance, rx_buff, packet_state); return; error_ctrl_pkt: + PACKET_TRACE_ON_CTRL(thread_ctx->ref_io->instance, rx_buff, packet_state); ATOMIC_INC(&(thread_metrics->ctrl_error)); return; } @@ -1160,6 +1172,7 @@ static void handle_data_packet(marsio_buff_t *rx_buff, struct thread_ctx *thread goto error_bypass; } + PACKET_TRACE_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; @@ -1512,7 +1525,8 @@ int packet_io_polling_nf(struct packet_io *handle, struct thread_ctx *thread_ctx { for (int j = 0; j < nr_recv; j++) { - int raw_len = marsio_buff_datalen(rx_buffs[j]); + marsio_buff_t *rx_buff = rx_buffs[j]; + int raw_len = marsio_buff_datalen(rx_buff); THROUGHPUT_METRICS_INC(&(thread_metrics->nf_rx), 1, raw_len); THROUGHPUT_METRICS_INC(&(thread_metrics->nf_tx), 1, raw_len); @@ -1582,6 +1596,7 @@ int packet_io_polling_endpoint_l3(struct packet_io *handle, struct thread_ctx *t THROUGHPUT_METRICS_INC(&(thread_metrics->uplink_rx), 1, raw_len); THROUGHPUT_METRICS_INC(&(thread_metrics->uplink_tx_drop), 1, raw_len); + PACKET_TRACE_ON_FREE(handle->instance, rx_buff); marsio_buff_free(handle->instance, &rx_buff, 1, 0, thread_index); } else @@ -1615,6 +1630,7 @@ int packet_io_polling_endpoint_l2(struct packet_io *handle, struct thread_ctx *t THROUGHPUT_METRICS_INC(&(thread_metrics->endpoint_vlan_rx), 1, raw_len); THROUGHPUT_METRICS_INC(&(thread_metrics->endpoint_vlan_drop), 1, raw_len); + PACKET_TRACE_ON_FREE(handle->instance, rx_buff); marsio_buff_free(handle->instance, &rx_buff, 1, 0, thread_index); } diff --git a/platform/src/policy.cpp b/platform/src/policy.cpp index 018c15a..7becfc2 100644 --- a/platform/src/policy.cpp +++ b/platform/src/policy.cpp @@ -1298,24 +1298,20 @@ const char *action_desc_tostring(enum action_desc action_desc) { switch (action_desc) { - case ACTION_BYPASS_DUE_DEFAULT: - return "bypass(default)"; - case ACTION_BYPASS_DUE_HEALTH_SF_LIMIT: - return "bypass(health_sf_limit)"; - case ACTION_BYPASS_DUE_UNAVAILABLE_ACTION: - return "bypass(unavailable_action)"; - case ACTION_BYPASS_DUE_FAILURE_ACTION: - return "bypass(failure_action)"; - case ACTION_BYPASS_DUE_INVALID_POLICY: - return "bypass(invalid_policy)"; - case ACTION_BLOCK_DUE_UNAVAILABLE_ACTION: - return "block(unavailable_action)"; - case ACTION_BLOCK_DUE_FAILURE_ACTION: - return "block(failure_action)"; - case ACTION_FORWAED_DUE_SELECTED_SF: - return "forward(selected_sf)"; + // success action + case ACTION_FORWAED_DUE_SELECTED_SF: return "forward"; + // failure action + case ACTION_BYPASS_DUE_FAILURE_ACTION: return "bypass"; + case ACTION_BLOCK_DUE_FAILURE_ACTION: return "block"; + case ACTION_BLOCK_DUE_UNAVAILABLE_ACTION: return "re-dispatch block"; + case ACTION_BYPASS_DUE_UNAVAILABLE_ACTION: return "re-dispatch bypass"; + case ACTION_BYPASS_DUE_HEALTH_SF_LIMIT: return "re-dispatch bypass(health SF limit)"; + // default action + case ACTION_BYPASS_DUE_DEFAULT: return "bypass(default)"; + case ACTION_BYPASS_DUE_INVALID_POLICY: return "bypass(invalid policy)"; + // unreachable default: - return "unknown"; + return "action unknown"; } } |
