summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author童宗振 <[email protected]>2024-07-10 07:04:46 +0000
committer童宗振 <[email protected]>2024-07-10 07:04:46 +0000
commitb1d39093ebd855be544c036d0fbd393addc23c91 (patch)
tree5f1174c5bbb4a989afea94968b1752dee05509ae
parentaf9177f5e0b15c80d5370e681526fc1ccac7d0ff (diff)
(TSG-21729)metadata add egress_action fieldv4.8.15-20240710
-rw-r--r--app/src/dp_trace.c47
-rw-r--r--app/src/mrb.c3
-rw-r--r--app/src/version.map4
-rw-r--r--include/external/marsio.h19
-rw-r--r--include/internal/mrb_define.h1
-rw-r--r--infra/include/dp_trace.h3
-rw-r--r--service/src/dp_trace.c19
7 files changed, 26 insertions, 70 deletions
diff --git a/app/src/dp_trace.c b/app/src/dp_trace.c
index 39972af..361da17 100644
--- a/app/src/dp_trace.c
+++ b/app/src/dp_trace.c
@@ -23,44 +23,6 @@ int marsio_dp_trace_init(struct mr_instance * mr_instance)
return RT_SUCCESS;
}
-int marsio_dp_trace_record_can_emit(const marsio_buff_t * mbuf)
-{
- return dp_trace_record_can_emit((struct rte_mbuf *)mbuf, DP_TRACE_MEASUREMENT_TYPE_TRACE);
-}
-
-int marsio_dp_trace_record_emit_str(struct mr_instance * mr_instance, marsio_buff_t * mbuf, const char * module,
- const char * str)
-{
- struct dp_trace_record_meta meta = {
- .measurement_type = DP_TRACE_MEASUREMENT_TYPE_TRACE, .module = module, .appsym = mr_instance->appsym};
- return dp_trace_record_emit_str(mr_instance->trace, (struct rte_mbuf *)mbuf, marsio_thread_id_get(), &meta, str);
-}
-
-int marsio_dp_trace_record_emit_fmt(struct mr_instance * mr_instance, marsio_buff_t * mbuf, const char * module,
- const char * format, ...)
-{
- struct dp_trace_process * trace = mr_instance->trace;
-
- char buffer[512];
- va_list args;
- va_start(args, format);
- int ret = vsnprintf(buffer, sizeof(buffer), format, args);
- va_end(args);
-
- if (unlikely(ret < 0 || ret >= sizeof(buffer)))
- {
- thread_id_t thread_id = marsio_thread_id_get();
- trace->statistics[thread_id].record_emit_failed_trace_oversize++;
- return -1;
- }
-
- struct dp_trace_record_meta meta = {
- .measurement_type = DP_TRACE_MEASUREMENT_TYPE_TRACE, .module = module, .appsym = mr_instance->appsym};
-
- ret = dp_trace_record_emit_str(trace, (struct rte_mbuf *)mbuf, marsio_thread_id_get(), &meta, buffer);
- return ret;
-}
-
int marsio_dp_trace_measurements_can_emit(__rte_unused struct mr_instance * instance, const marsio_buff_t * mbuf,
uint8_t measurement_type)
{
@@ -105,11 +67,6 @@ int marsio_dp_trace_measurement_emit_fmt(struct mr_instance * mr_instance, marsi
return ret;
}
-void marsio_dp_trace_filter_exec(struct mr_instance * instance, marsio_buff_t * mbuf)
-{
- dp_trace_filter_exec(instance->trace, (struct rte_mbuf *)mbuf, 0, marsio_thread_id_get());
-}
-
void marsio_dp_trace_record_write(struct mr_instance * mr_instance, marsio_buff_t * mbuf)
{
return dp_trace_record_write(mr_instance->trace, (struct rte_mbuf *)mbuf, marsio_thread_id_get());
@@ -120,6 +77,8 @@ void marsio_rte_pktmbuf_free(struct rte_mbuf * m)
if (unlikely(m == NULL))
return;
struct mr_instance * mr_instance = marsio_current();
+ struct mrb_metadata * mrb_meta = rte_mbuf_to_priv(m);
+ mrb_meta->egress_action = MR_EGRESS_ACTION_DROP;
marsio_dp_trace_record_write(mr_instance, m);
rte_pktmbuf_free(m);
}
@@ -349,6 +308,8 @@ int marsio_dp_trace_buffer_info_get(const marsio_buff_t * mbuf, struct dp_trace_
info->inner_src_port = dp_trace_buffer->inner_src_port;
info->inner_dst_port = dp_trace_buffer->inner_dst_port;
+ info->egress_action = mrb_meta->egress_action;
+
return 0;
}
diff --git a/app/src/mrb.c b/app/src/mrb.c
index d156f34..fe2a3ea 100644
--- a/app/src/mrb.c
+++ b/app/src/mrb.c
@@ -130,6 +130,9 @@ void marsio_buff_free_v2(struct mr_instance * instance, marsio_buff_t * buff[],
{
marsio_dp_trace_measurement_emit_str(instance, m, DP_TRACE_MEASUREMENT_TYPE_TRACE, NULL, "packet dropped");
}
+
+ struct mrb_metadata * mrb_meta = rte_mbuf_to_priv(m);
+ mrb_meta->egress_action = MR_EGRESS_ACTION_DROP;
marsio_dp_trace_record_write(instance, (struct rte_mbuf *)m);
__rte_mbuf_sanity_check(m, 1);
diff --git a/app/src/version.map b/app/src/version.map
index 6d5e927..b522bfd 100644
--- a/app/src/version.map
+++ b/app/src/version.map
@@ -84,10 +84,6 @@ global:
marsio_poll_wait;
marsio_poll_register_eventfd;
- marsio_dp_trace_filter_exec;
- marsio_dp_trace_record_can_emit;
- marsio_dp_trace_record_emit_str;
- marsio_dp_trace_record_emit_fmt;
marsio_dp_trace_measurements_can_emit;
marsio_dp_trace_measurement_emit_str;
marsio_dp_trace_measurement_emit_fmt;
diff --git a/include/external/marsio.h b/include/external/marsio.h
index b74c792..12e4bd1 100644
--- a/include/external/marsio.h
+++ b/include/external/marsio.h
@@ -295,26 +295,9 @@ int marsio_buff_prepend_sid_list(marsio_buff_t * m, sid_t * slist, uint8_t sz_sl
int marsio_buff_get_current_sid(marsio_buff_t * m, sid_t * sid);
/******************************** data path trace**************************************/
-__attribute__((deprecated(
- "use marsio_dp_trace_measurements_can_emit replace.the current interface will be removed in 24.06."))) int
-marsio_dp_trace_record_can_emit(const marsio_buff_t * mbuf);
-
-__attribute__((
- deprecated("use marsio_dp_trace_measurement_emit_str replace.the current interface will be removed in 24.06."))) int
-marsio_dp_trace_record_emit_str(struct mr_instance * instance, marsio_buff_t * mbuf, const char * module,
- const char * str);
-__attribute__((
- deprecated("use marsio_dp_trace_measurement_emit_fmt replace.the current interface will be removed in 24.06."))) int
-marsio_dp_trace_record_emit_fmt(struct mr_instance * instance, marsio_buff_t * mbuf, const char * module,
- const char * format, ...);
-
#define DP_TRACE_MEASUREMENT_TYPE_TRACE (1 << 0)
#define DP_TRACE_MEASUREMENT_TYPE_TELEMETRY (1 << 1)
-__attribute__((
- deprecated("Users do not need to manually call this function.The current function will be removed in 24.06."))) void
-marsio_dp_trace_filter_exec(struct mr_instance * instance, marsio_buff_t * mbuf);
-
int marsio_dp_trace_measurements_can_emit(struct mr_instance * instance, const marsio_buff_t * mbuf,
uint8_t measurement_type);
@@ -351,6 +334,8 @@ struct dp_trace_buffer_telemetry
char inner_dst_addr_str[INET6_ADDRSTRLEN];
int32_t inner_src_port;
int32_t inner_dst_port;
+
+ uint8_t egress_action;
};
struct dp_trace_record_header
diff --git a/include/internal/mrb_define.h b/include/internal/mrb_define.h
index cad8c44..1fd663c 100644
--- a/include/internal/mrb_define.h
+++ b/include/internal/mrb_define.h
@@ -41,6 +41,7 @@ struct mrb_metadata
/* ingress, egress */
uint16_t port_ingress;
uint16_t port_egress;
+ uint8_t egress_action;
/* Session Id */
uint64_t session_id;
diff --git a/infra/include/dp_trace.h b/infra/include/dp_trace.h
index 820e966..7a01866 100644
--- a/infra/include/dp_trace.h
+++ b/infra/include/dp_trace.h
@@ -37,6 +37,9 @@
#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)
+#define MR_EGRESS_ACTION_SEND 0
+#define MR_EGRESS_ACTION_DROP 1
+
enum dp_trace_req_action
{
DP_TRACE_INSTANCE_GET,
diff --git a/service/src/dp_trace.c b/service/src/dp_trace.c
index 2db3647..4d4b656 100644
--- a/service/src/dp_trace.c
+++ b/service/src/dp_trace.c
@@ -206,6 +206,9 @@ void hook_rte_pktmbuf_free(struct rte_mbuf * m)
.measurement_type = DP_TRACE_MEASUREMENT_TYPE_TRACE, .appsym = MR_TRACE_APPSYM, .module = ""};
dp_trace_record_emit_str(sc_main_get()->trace, m, rte_lcore_id(), &meta, "packet dropped");
}
+
+ struct mrb_metadata * mrb_meta = rte_mbuf_to_priv(m);
+ mrb_meta->egress_action = MR_EGRESS_ACTION_DROP;
dp_trace_record_write(trace, m, rte_lcore_id());
rte_pktmbuf_free(m);
}
@@ -215,21 +218,25 @@ void hook_rte_pktmbuf_free_bulk(struct rte_mbuf ** mbufs, unsigned int count)
struct dp_trace_process * trace = sc_main_get()->trace;
for (unsigned int idx = 0; idx < count; idx++)
{
- if (mbufs[idx] == NULL)
+ struct rte_mbuf * mbuf = mbufs[idx];
+ if (mbuf == NULL)
continue;
- if (unlikely(dp_trace_record_can_emit(mbufs[idx], DP_TRACE_MEASUREMENT_TYPE_TELEMETRY)))
+ if (unlikely(dp_trace_record_can_emit(mbuf, DP_TRACE_MEASUREMENT_TYPE_TELEMETRY)))
{
struct dp_trace_record_meta meta = {
.measurement_type = DP_TRACE_MEASUREMENT_TYPE_TELEMETRY, .appsym = MR_TRACE_APPSYM, .module = ""};
- dp_trace_record_emit_str(sc_main_get()->trace, mbufs[idx], rte_lcore_id(), &meta, "packet dropped");
+ dp_trace_record_emit_str(sc_main_get()->trace, mbuf, rte_lcore_id(), &meta, "packet dropped");
}
- if (unlikely(dp_trace_record_can_emit(mbufs[idx], DP_TRACE_MEASUREMENT_TYPE_TRACE)))
+ if (unlikely(dp_trace_record_can_emit(mbuf, DP_TRACE_MEASUREMENT_TYPE_TRACE)))
{
struct dp_trace_record_meta meta = {
.measurement_type = DP_TRACE_MEASUREMENT_TYPE_TRACE, .appsym = MR_TRACE_APPSYM, .module = ""};
- dp_trace_record_emit_str(sc_main_get()->trace, mbufs[idx], rte_lcore_id(), &meta, "packet dropped");
+ dp_trace_record_emit_str(sc_main_get()->trace, mbuf, rte_lcore_id(), &meta, "packet dropped");
}
- dp_trace_record_write(trace, mbufs[idx], rte_lcore_id());
+
+ struct mrb_metadata * mrb_meta = rte_mbuf_to_priv(mbuf);
+ mrb_meta->egress_action = MR_EGRESS_ACTION_DROP;
+ dp_trace_record_write(trace, mbuf, rte_lcore_id());
}
rte_pktmbuf_free_bulk(mbufs, count);
} \ No newline at end of file