LGTM,

Acked-by: Jarno Rajahalme <[email protected]>

> On Nov 7, 2015, at 12:05 PM, Joe Stringer <[email protected]> wrote:
> 
> This function finds the mf destination field for any ofpact, returning
> NULL if not applicable. It will be used by the next patch to properly
> reject OpenFlow flows with conntrack actions when conntrack is
> unsupported by the datapath.
> 
> Signed-off-by: Joe Stringer <[email protected]>
> ---
> lib/ofp-actions.c | 18 +++++++++++-------
> lib/ofp-actions.h |  1 +
> 2 files changed, 12 insertions(+), 7 deletions(-)
> 
> diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c
> index 5f72fda16154..625e7b8168a8 100644
> --- a/lib/ofp-actions.c
> +++ b/lib/ofp-actions.c
> @@ -6270,16 +6270,20 @@ ofpacts_check_consistency(struct ofpact ofpacts[], 
> size_t ofpacts_len,
>             : 0);
> }
> 
> -static const struct mf_field *
> -ofpact_get_mf_field(enum ofpact_type type, const void *ofpact)
> +/* Returns the destination field that 'ofpact' would write to, or NULL
> + * if the action would not write to an mf_field. */
> +const struct mf_field *
> +ofpact_get_mf_dst(const struct ofpact *ofpact)
> {
> -    if (type == OFPACT_SET_FIELD) {
> -        const struct ofpact_set_field *orl = ofpact;
> +    if (ofpact->type == OFPACT_SET_FIELD) {
> +        const struct ofpact_set_field *orl;
> 
> +        orl = CONTAINER_OF(ofpact, struct ofpact_set_field, ofpact);
>         return orl->field;
> -    } else if (type == OFPACT_REG_MOVE) {
> -        const struct ofpact_reg_move *orm = ofpact;
> +    } else if (ofpact->type == OFPACT_REG_MOVE) {
> +        const struct ofpact_reg_move *orm;
> 
> +        orm = CONTAINER_OF(ofpact, struct ofpact_reg_move, ofpact);
>         return orm->dst.field;
>     }
> 
> @@ -6304,7 +6308,7 @@ field_requires_ct(enum mf_field_id field)
> static enum ofperr
> ofpacts_verify_nested(const struct ofpact *a, enum ofpact_type outer_action)
> {
> -    const struct mf_field *field = ofpact_get_mf_field(a->type, a);
> +    const struct mf_field *field = ofpact_get_mf_dst(a);
> 
>     if (field && field_requires_ct(field->id) && outer_action != OFPACT_CT) {
>         VLOG_WARN("cannot set CT fields outside of ct action");
> diff --git a/lib/ofp-actions.h b/lib/ofp-actions.h
> index 773b6170474d..6d893eafc83e 100644
> --- a/lib/ofp-actions.h
> +++ b/lib/ofp-actions.h
> @@ -821,6 +821,7 @@ bool ofpacts_output_to_group(const struct ofpact[], 
> size_t ofpacts_len,
>                              uint32_t group_id);
> bool ofpacts_equal(const struct ofpact a[], size_t a_len,
>                    const struct ofpact b[], size_t b_len);
> +const struct mf_field *ofpact_get_mf_dst(const struct ofpact *ofpact);
> uint32_t ofpacts_get_meter(const struct ofpact[], size_t ofpacts_len);
> 
> /* Formatting and parsing ofpacts. */
> -- 
> 2.1.4
> 
> _______________________________________________
> dev mailing list
> [email protected]
> http://openvswitch.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to