diff mbox

[ovs-dev,RFC,v2,04/13] Add APIs to set NSH keys for match fields

Message ID 1468344439-11264-1-git-send-email-johnson.li@intel.com
State Changes Requested
Headers show

Commit Message

Johnson.Li July 12, 2016, 5:27 p.m. UTC
Signed-off-by: Johnson Li <johnson.li@intel.com>

Comments

Simon Horman Aug. 9, 2016, 2:53 p.m. UTC | #1
On Wed, Jul 13, 2016 at 01:27:19AM +0800, Johnson Li wrote:
> Signed-off-by: Johnson Li <johnson.li@intel.com>
> 
> diff --git a/include/openvswitch/match.h b/include/openvswitch/match.h
> index c955753..4c79da3 100644
> --- a/include/openvswitch/match.h
> +++ b/include/openvswitch/match.h
> @@ -40,6 +40,18 @@ struct match {
>  /* Initializer for a "struct match" that matches every packet. */
>  #define MATCH_CATCHALL_INITIALIZER { .flow = { .dl_type = 0 } }
>  
> +#define MATCH_SET_FIELD_MASKED(match, field, value, msk)      \
> +    do {                                                      \
> +        (match)->wc.masks.field = (msk);                      \
> +        (match)->flow.field = (value) & (msk);                \
> +    } while (0)
> +
> +#define MATCH_SET_FIELD_UINT8(match, field, value)            \
> +    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
> +
> +#define MATCH_SET_FIELD_BE32(match, field, value)             \
> +    MATCH_SET_FIELD_MASKED(match, field, value, OVS_BE32_MAX)
> +
>  void match_init(struct match *,
>                  const struct flow *, const struct flow_wildcards *);
>  void match_wc_init(struct match *match, const struct flow *flow);

This patch seems more generic than the changelog indicates.

And if this approach is acceptable it seems that as a follow-up
it could be used extensively in lib/match.c.
diff mbox

Patch

diff --git a/include/openvswitch/match.h b/include/openvswitch/match.h
index c955753..4c79da3 100644
--- a/include/openvswitch/match.h
+++ b/include/openvswitch/match.h
@@ -40,6 +40,18 @@  struct match {
 /* Initializer for a "struct match" that matches every packet. */
 #define MATCH_CATCHALL_INITIALIZER { .flow = { .dl_type = 0 } }
 
+#define MATCH_SET_FIELD_MASKED(match, field, value, msk)      \
+    do {                                                      \
+        (match)->wc.masks.field = (msk);                      \
+        (match)->flow.field = (value) & (msk);                \
+    } while (0)
+
+#define MATCH_SET_FIELD_UINT8(match, field, value)            \
+    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
+
+#define MATCH_SET_FIELD_BE32(match, field, value)             \
+    MATCH_SET_FIELD_MASKED(match, field, value, OVS_BE32_MAX)
+
 void match_init(struct match *,
                 const struct flow *, const struct flow_wildcards *);
 void match_wc_init(struct match *match, const struct flow *flow);