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 <[email protected]> > --- > 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.). Thanks, Dumitru _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
