[ovs-dev] [PATCH v5 2/3] dpif-netdev: move dpcls lookup structures to .h
Eelco Chaudron
echaudro at redhat.com
Fri Mar 22 12:17:28 UTC 2019
On 25 Feb 2019, at 17:18, Harry van Haaren wrote:
> This commit moves some data-structures to be available
> in the dpif-netdev.h header. This allows specific implementations
> of the subtable lookup function to include just that header
> file, and not require that the code exists in dpif-netdev.c
>
> Signed-off-by: Harry van Haaren <harry.van.haaren at intel.com>
> ---
> lib/dpif-netdev.c | 50
> -----------------------------------------------
> lib/dpif-netdev.h | 50
> +++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 50 insertions(+), 50 deletions(-)
>
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index 2ae380640..143f1c288 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -128,15 +128,6 @@ static struct odp_support dp_netdev_support = {
> .ct_orig_tuple6 = true,
> };
>
> -/* Stores a miniflow with inline values */
> -
> -struct netdev_flow_key {
> - uint32_t hash; /* Hash function differs for different
> users. */
> - uint32_t len; /* Length of the following miniflow (incl.
> map). */
> - struct miniflow mf;
> - uint64_t buf[FLOW_MAX_PACKET_U64S];
> -};
> -
> /* EMC cache and SMC cache compose the datapath flow cache (DFC)
> *
> * Exact match cache for frequently used flows
> @@ -7579,47 +7570,6 @@ dpif_dummy_register(enum dummy_level level)
>
> /* Datapath Classifier. */
>
> -/* forward declaration for lookup_func typedef */
> -struct dpcls_subtable;
> -
> -/** Lookup function for a subtable in the dpcls. This function is
> called
> - * by each subtable with an array of packets, and a bitmask of
> packets to
> - * perform the lookup on. Using a function pointer gives flexibility
> to
> - * optimize the lookup function based on subtable properties and the
> - * CPU instruction set available at runtime.
> - */
> -typedef uint32_t (*dpcls_subtable_lookup_func)(struct dpcls_subtable
> *subtable,
> - uint32_t keys_map, const struct netdev_flow_key
> *keys[],
> - struct dpcls_rule **rules);
> -
> -/** Prototype for generic lookup func, using same code path as before
> */
> -uint32_t
> -dpcls_subtable_lookup_generic(struct dpcls_subtable *subtable,
> - uint32_t keys_map,
> - const struct netdev_flow_key *keys[],
> - struct dpcls_rule **rules);
> -
> -
> -/* A set of rules that all have the same fields wildcarded. */
> -struct dpcls_subtable {
> - /* The fields are only used by writers. */
> - struct cmap_node cmap_node OVS_GUARDED; /* Within dpcls
> 'subtables_map'. */
> -
> - /* These fields are accessed by readers. */
> - struct cmap rules; /* Contains "struct dpcls_rule"s. */
> - uint32_t hit_cnt; /* Number of match hits in subtable
> in current
> - optimization interval. */
> -
> - /* the lookup function to use for this subtable. If there is a
> known
> - * property of the subtable (eg: only 3 bits of miniflow metadata
> is
> - * used for the lookup) then this can point at an optimized
> version of
> - * the lookup function for this particular subtable. */
> - dpcls_subtable_lookup_func lookup_func;
> -
> - struct netdev_flow_key mask; /* Wildcards for fields (const). */
> - /* 'mask' must be the last field, additional space is allocated
> here. */
> -};
> -
> /* Initializes 'cls' as a classifier that initially contains no
> classification
> * rules. */
> static void
> diff --git a/lib/dpif-netdev.h b/lib/dpif-netdev.h
> index 6db6ed2e2..720425fb3 100644
> --- a/lib/dpif-netdev.h
> +++ b/lib/dpif-netdev.h
> @@ -24,6 +24,7 @@
> #include "openvswitch/types.h"
> #include "dp-packet.h"
> #include "packets.h"
> +#include "cmap.h"
>
> #ifdef __cplusplus
> extern "C" {
> @@ -38,6 +39,55 @@ bool dpif_is_netdev(const struct dpif *);
> #define NR_QUEUE 1
> #define NR_PMD_THREADS 1
>
> +/* forward declaration for lookup_func typedef */
> +struct dpcls_subtable;
> +struct dpcls_rule;
> +
> +/* must be public as it is intantiated in subtable struct below */
> +struct netdev_flow_key {
> + uint32_t hash; /* Hash function differs for different
> users. */
> + uint32_t len; /* Length of the following miniflow (incl.
> map). */
> + struct miniflow mf;
> + uint64_t buf[FLOW_MAX_PACKET_U64S];
> +};
> +
> +/** Lookup function for a subtable in the dpcls. This function is
> called
^^
Same comment as in 1/3.
> + * by each subtable with an array of packets, and a bitmask of
> packets to
> + * perform the lookup on. Using a function pointer gives flexibility
> to
> + * optimize the lookup function based on subtable properties and the
> + * CPU instruction set available at runtime.
> + */
> +typedef uint32_t (*dpcls_subtable_lookup_func)(struct dpcls_subtable
> *subtable,
> + uint32_t keys_map, const struct netdev_flow_key
> *keys[],
> + struct dpcls_rule **rules);
> +
> +/** Prototype for generic lookup func, using same code path as before
> */
^^
Same comment as in 1/3.
> +uint32_t
> +dpcls_subtable_lookup_generic(struct dpcls_subtable *subtable,
> + uint32_t keys_map,
> + const struct netdev_flow_key *keys[],
> + struct dpcls_rule **rules);
> +
> +/* A set of rules that all have the same fields wildcarded. */
> +struct dpcls_subtable {
> + /* The fields are only used by writers. */
> + struct cmap_node cmap_node OVS_GUARDED; /* Within dpcls
> 'subtables_map'. */
> +
> + /* These fields are accessed by readers. */
> + struct cmap rules; /* Contains "struct dpcls_rule"s. */
> + uint32_t hit_cnt; /* Number of match hits in subtable
> in current
> + optimization interval. */
> +
> + /* the lookup function to use for this subtable. If there is a
> known
> + * property of the subtable (eg: only 3 bits of miniflow metadata
> is
> + * used for the lookup) then this can point at an optimized
> version of
> + * the lookup function for this particular subtable. */
> + dpcls_subtable_lookup_func lookup_func;
> +
> + struct netdev_flow_key mask; /* Wildcards for fields (const). */
> + /* 'mask' must be the last field, additional space is allocated
> here. */
> +};
> +
> #ifdef __cplusplus
> }
> #endif
> --
> 2.17.1
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
More information about the dev
mailing list