summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author童宗振 <[email protected]>2024-04-28 14:29:58 +0000
committer童宗振 <[email protected]>2024-04-28 14:29:58 +0000
commitb1c532ecb6c849b5538adef7a1c11a51b774f712 (patch)
tree244e3b420339d0ba04469e98ddb8a36013ec5172
parent42c89e380c3da4b0d40d0ffc0a2e39e45ffe8356 (diff)
fix: inner layer jumpv4.8.5-20240429
-rw-r--r--app/src/dp_trace.c6
-rw-r--r--infra/include/dp_trace.h1
-rw-r--r--infra/src/dp_trace.c1
-rw-r--r--tools/tcpdump/pdump.c1
4 files changed, 9 insertions, 0 deletions
diff --git a/app/src/dp_trace.c b/app/src/dp_trace.c
index 77d162b..9d4a47f 100644
--- a/app/src/dp_trace.c
+++ b/app/src/dp_trace.c
@@ -64,6 +64,11 @@ int marsio_dp_trace_record_emit_fmt(struct mr_instance * mr_instance, marsio_buf
int marsio_dp_trace_measurements_can_emit(__rte_unused struct mr_instance * instance, const marsio_buff_t * mbuf,
uint8_t measurement_type)
{
+ struct mrb_metadata * mrb_meta = rte_mbuf_to_priv((struct rte_mbuf *)mbuf);
+ if (unlikely(mrb_meta->measurement_type == DP_TRACE_MEASUREMENT_TYPE_UNKNOW))
+ {
+ marsio_dp_trace_filter_exec(instance, (struct rte_mbuf *)mbuf);
+ }
return dp_trace_record_can_emit((struct rte_mbuf *)mbuf, measurement_type);
}
@@ -373,6 +378,7 @@ void * marsio_pkt_jump_to_innermost_layer(const marsio_buff_t * mbuf, enum compl
if (pkt_parser_result->layers[i].type_id == layer_id)
{
ret = rte_pktmbuf_mtod((struct rte_mbuf *)mbuf, void *) + pkt_parser_result->layers[i].offset;
+ break;
}
}
diff --git a/infra/include/dp_trace.h b/infra/include/dp_trace.h
index 689023d..6e0fc68 100644
--- a/infra/include/dp_trace.h
+++ b/infra/include/dp_trace.h
@@ -35,6 +35,7 @@
#define DP_TRACE_MEASUREMENT_TYPE_UNKNOW (0)
#define DP_TRACE_MEASUREMENT_TYPE_UNMATCH (1 << 3)
+#define DP_TRACE_MEASUREMENT_TYPE_BUF_ALLOC_FAILED (1 << 4)
#define DP_TRACE_MEASUREMENT_TYPE_MATCHED (DP_TRACE_MEASUREMENT_TYPE_TRACE | DP_TRACE_MEASUREMENT_TYPE_TELEMETRY)
enum dp_trace_req_action
diff --git a/infra/src/dp_trace.c b/infra/src/dp_trace.c
index ea0a748..7b31559 100644
--- a/infra/src/dp_trace.c
+++ b/infra/src/dp_trace.c
@@ -343,6 +343,7 @@ void dp_trace_filter_exec(struct dp_trace_process * trace, struct rte_mbuf * mbu
if (rte_mempool_get(trace->inst->pool, (void **)&(mrb_meta->dp_trace_buffer)) != 0)
{
statistics->record_buf_alloc_failed_no_mem++;
+ mrb_meta->measurement_type = DP_TRACE_MEASUREMENT_TYPE_BUF_ALLOC_FAILED;
}
else
{
diff --git a/tools/tcpdump/pdump.c b/tools/tcpdump/pdump.c
index f7d77d9..9d7ebee 100644
--- a/tools/tcpdump/pdump.c
+++ b/tools/tcpdump/pdump.c
@@ -576,6 +576,7 @@ int mr_pcapng_add_opt(struct rte_mbuf * mbuf, uint16_t port_id, uint32_t rx_tx_f
len += snprintf(str_rx_tx + len, str_maxlen - len, ", port_ingress:%u", mrb_metadata->port_ingress);
len += snprintf(str_rx_tx + len, str_maxlen - len, ", port_egress:%u", mrb_metadata->port_egress);
len += snprintf(str_rx_tx + len, str_maxlen - len, ", is_nf_create:%u", mrb_metadata->packet_create_from_nf);
+ len += snprintf(str_rx_tx + len, str_maxlen - len, ", measurement_type:%u", mrb_metadata->measurement_type);
len += snprintf(str_rx_tx + len, str_maxlen - len, ", is_ctrlbuf:%u", mrb_metadata->is_ctrlbuf);
len += snprintf(str_rx_tx + len, str_maxlen - len, ", payload_offset:%u", mrb_metadata->payload_offset);
len += snprintf(str_rx_tx + len, str_maxlen - len, ", user0:%u", mrb_metadata->user_0);