On 10/10/22 14:10, Dumitru Ceara wrote:
On 9/27/22 09:31, Adrian Moreno wrote:
sample ovn action encodes into the OFPACT_SAMPLE ovs action.
OVN action allows the following parameters:
- obs_domain_id: 8-bit integer that identifies the sampling application.
This value will be combined with the datapath's tunnel_id to form the
final observation_domain_id that will be used in the OVS action.
- obs_point_id: a 32-bit integer or the $cookie macro that will be
expanded into the first 32 bits of the lflow's UUID.
- probability: a 16-bit integer that specifies the sampling probability.
Specifying 0 has no effect and 65535 means sampling all packets.
Signed-off-by: Adrian Moreno <amore...@redhat.com>
---
controller/lflow.c | 1 +
include/ovn/actions.h | 16 ++++++
lib/actions.c | 120 ++++++++++++++++++++++++++++++++++++++++++
tests/ovn.at | 25 +++++++++
tests/test-ovn.c | 3 ++
utilities/ovn-trace.c | 2 +
6 files changed, 167 insertions(+)
diff --git a/controller/lflow.c b/controller/lflow.c
index eef44389f..cbda6cdfb 100644
--- a/controller/lflow.c
+++ b/controller/lflow.c
@@ -1163,6 +1163,7 @@ add_matches_to_flow_table(const struct sbrec_logical_flow
*lflow,
.group_table = l_ctx_out->group_table,
.meter_table = l_ctx_out->meter_table,
.lflow_uuid = lflow->header_.uuid,
+ .tunnel_key = ldp->datapath->tunnel_key,
.pipeline = ingress ? OVNACT_P_INGRESS : OVNACT_P_EGRESS,
.ingress_ptable = OFTABLE_LOG_INGRESS_PIPELINE,
diff --git a/include/ovn/actions.h b/include/ovn/actions.h
index d7ee84dac..c7f40cb7d 100644
--- a/include/ovn/actions.h
+++ b/include/ovn/actions.h
@@ -121,6 +121,7 @@ struct ovn_extend_table;
OVNACT(COMMIT_ECMP_NH, ovnact_commit_ecmp_nh) \
OVNACT(CHK_ECMP_NH_MAC, ovnact_result) \
OVNACT(CHK_ECMP_NH, ovnact_result) \
+ OVNACT(SAMPLE, ovnact_sample) \
/* enum ovnact_type, with a member OVNACT_<ENUM> for each action. */
enum OVS_PACKED_ENUM ovnact_type {
@@ -456,6 +457,18 @@ struct ovnact_lookup_fdb {
struct expr_field dst; /* 1-bit destination field. */
};
+/* OVNACT_SAMPLE */
+struct ovnact_sample {
+ struct ovnact ovnact;
+ uint16_t probability; /* probability over UINT16_MAX. */
+ uint8_t obs_domain_id; /* most significant byte of the
+ observation domain id. The other 24 bits
+ will come from the datapath's tunnel key. */
+ uint32_t collector_set_id; /* colector_set_id. */
+ uint32_t obs_point_id; /* observation point id. */
+ bool use_cookie; /* use cookie as obs_point_id */
+};
+
/* OVNACT_COMMIT_ECMP_NH. */
struct ovnact_commit_ecmp_nh {
struct ovnact ovnact;
@@ -785,6 +798,9 @@ struct ovnact_encode_params {
/* The logical flow uuid that drove this action. */
struct uuid lflow_uuid;
+ /* The tunnel key of the datapath. */
+ uint32_t tunnel_key;
+
It might be more readable to call this 'datapath_key' or 'dp_key'.
There are multiple tunnel keys in ovn (port_binding, datapath_binding,
multicast_group, etc.).
Sure, will resubmit with the name change.
Thanks,
Dumitru
Thanks.
--
Adrián Moreno
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev