[ovs-dev] [PATCH ovn v3 3/5] meta-flow: Add new functions for subvalues.

Andy Zhou azhou at nicira.com
Mon Apr 6 22:28:37 UTC 2015


On Tue, Mar 31, 2015 at 9:52 PM, Ben Pfaff <blp at nicira.com> wrote:
> To be first used in upcoming commits.
>
> Signed-off-by: Ben Pfaff <blp at nicira.com>

> +/* Consider the two value/mask pairs 'a_value/a_mask' and 'b_value/b_mask' as
> + * restrictions on a field's value.  Then, this function initializes
> + * 'dst_value/dst_mask' such that it combines the restrictions of both pairs.
> + * This is not always possible, i.e. if one pair insists on a value of 0 in
> + * some bit and the other pair insists on a value of 1 in that bit.  This
> + * function returns false in a case where the combined restriction is
> + * impossible (in which case 'dst_value/dst_mask' is not fully initialized),
> + * true otherwise. */
> +bool
> +mf_subvalue_intersect(const union mf_subvalue *a_value,
> +                      const union mf_subvalue *a_mask,
> +                      const union mf_subvalue *b_value,
> +                      const union mf_subvalue *b_mask,
> +                      union mf_subvalue *dst_value,
> +                      union mf_subvalue *dst_mask)
> +{
> +    for (int i = 0; i < ARRAY_SIZE(a_value->be64); i++) {
> +        ovs_be64 av = a_value->be64[i];
> +        ovs_be64 am = a_mask->be64[i];
> +        ovs_be64 bv = b_value->be64[i];
> +        ovs_be64 bm = b_mask->be64[i];
> +        ovs_be64 *dv = &dst_value->be64[i];
> +        ovs_be64 *dm = &dst_mask->be64[i];
> +
> +        if ((av ^ bv) & (am & bm)) {
> +            return false;
> +        }
> +        *dv = av | bv;
> +        *dm = am | bm;
Should this be *dv = (av & am) | (bv & bm)?  I have not read the following patch
to check the actual usage, so my interpretation of 'intersect' may be
different than
what's intended here.
> +    }
> +    return true;
> +}
> +



More information about the dev mailing list