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

Reply via email to