[RFC] ethdev: introduce entropy calculation
Ferruh Yigit
ferruh.yigit at amd.com
Thu Dec 14 12:34:39 CET 2023
On 12/10/2023 8:30 AM, Ori Kam wrote:
> When offloading rules with the encap action, the HW may calculate entropy based on the encap protocol.
> Each HW can implement a different algorithm.
>
Hi Ori,
Can you please provide more details what this 'entropy' is used for,
what is the usecase?
> When the application receives packets that should have been
> encaped by the HW, but didn't reach this stage yet (for example TCP SYN packets),
> then when encap is done in SW, application must apply
> the same entropy calculation algorithm.
>> Using the new API application can request the PMD to calculate the
> value as if the packet passed in the HW.
>
So is this new API a datapath API? Is the intention that application
call this API per packet that is missing 'entropy' information?
> Signed-off-by: Ori Kam <orika at nvidia.com>
> ---
> lib/ethdev/rte_flow.h | 49 +++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 49 insertions(+)
>
> diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
> index affdc8121b..3989b089dd 100644
> --- a/lib/ethdev/rte_flow.h
> +++ b/lib/ethdev/rte_flow.h
> @@ -6753,6 +6753,55 @@ rte_flow_calc_table_hash(uint16_t port_id, const struct rte_flow_template_table
> const struct rte_flow_item pattern[], uint8_t pattern_template_index,
> uint32_t *hash, struct rte_flow_error *error);
>
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice.
> + *
> + * Destination field type for the entropy calculation.
> + *
> + * @see function rte_flow_calc_encap_entropy
> + */
> +enum rte_flow_entropy_dest {
> + /* Calculate entropy placed in UDP source port field. */
> + RTE_FLOW_ENTROPY_DEST_UDP_SRC_PORT,
> + /* Calculate entropy placed in NVGRE flow ID field. */
> + RTE_FLOW_ENTROPY_DEST_NVGRE_FLOW_ID,
> +};
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice.
> + *
> + * Calculate the entropy generated by the HW for a given pattern,
> + * when encapsulation flow action is executed.
> + *
> + * @param[in] port_id
> + * Port identifier of Ethernet device.
> + * @param[in] pattern
> + * The values to be used in the entropy calculation.
> + * @param[in] dest_field
> + * Type of destination field for entropy calculation.
> + * @param[out] entropy
> + * Used to return the calculated entropy. It will be written in network order,
> + * so entropy[0] is the MSB.
> + * The number of bytes is based on the destination field type.
>
Is the size same as field size in the 'dest_field'?
Like for 'RTE_FLOW_ENTROPY_DEST_UDP_SRC_PORT' is it two bytes?
> + * @param[out] error
> + * Perform verbose error reporting if not NULL.
> + * PMDs initialize this structure in case of error only.
> + *
> + * @return
> + * - (0) if success.
> + * - (-ENODEV) if *port_id* invalid.
> + * - (-ENOTSUP) if underlying device does not support this functionality.
> + * - (-EINVAL) if *pattern* doesn't hold enough information to calculate the entropy
> + * or the dest is not supported.
> + */
> +__rte_experimental
> +int
> +rte_flow_calc_encap_entropy(uint16_t port_id, const struct rte_flow_item pattern[],
> + enum rte_flow_entropy_dest dest_field, uint8_t *entropy,
> + struct rte_flow_error *error);
> +
> #ifdef __cplusplus
> }
> #endif
More information about the dev
mailing list