diff options
| author | 童宗振 <[email protected]> | 2024-04-28 14:29:58 +0000 |
|---|---|---|
| committer | 童宗振 <[email protected]> | 2024-04-28 14:29:58 +0000 |
| commit | b1c532ecb6c849b5538adef7a1c11a51b774f712 (patch) | |
| tree | 244e3b420339d0ba04469e98ddb8a36013ec5172 | |
| parent | 42c89e380c3da4b0d40d0ffc0a2e39e45ffe8356 (diff) | |
fix: inner layer jumpv4.8.5-20240429
| -rw-r--r-- | app/src/dp_trace.c | 6 | ||||
| -rw-r--r-- | infra/include/dp_trace.h | 1 | ||||
| -rw-r--r-- | infra/src/dp_trace.c | 1 | ||||
| -rw-r--r-- | tools/tcpdump/pdump.c | 1 |
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); |
