On Dec 27, 2012, at 7:23 , ext Simon Horman wrote:

> diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c
> index 6468cac..c631c0a 100644
> --- a/lib/ofp-actions.c
> +++ b/lib/ofp-actions.c

> @@ -1052,7 +1088,8 @@ exit:
> }
> 
> static enum ofperr
> -ofpact_check__(const struct ofpact *a, const struct flow *flow, int 
> max_ports)
> +ofpact_check__(const struct ofpact *a, const struct flow *flow, int 
> max_ports,
> +               ovs_be16 *dl_type)
> {
>     const struct ofpact_enqueue *enqueue;
> 
> @@ -1094,8 +1131,11 @@ ofpact_check__(const struct ofpact *a, const struct 
> flow *flow, int max_ports)
>     case OFPACT_REG_MOVE:
>         return nxm_reg_move_check(ofpact_get_REG_MOVE(a), flow);
> 
> -    case OFPACT_REG_LOAD:
> -        return nxm_reg_load_check(ofpact_get_REG_LOAD(a), flow);
> +    case OFPACT_REG_LOAD: {
> +        struct flow updated_flow = *flow;
> +        updated_flow.dl_type = *dl_type;
> +        return nxm_reg_load_check(ofpact_get_REG_LOAD(a), &updated_flow);
> +    }
> 

Maybe copy & update flow only if (*dl_type != flow->dl_type) ?

>     case OFPACT_DEC_TTL:
>     case OFPACT_SET_TUNNEL:
> @@ -1118,6 +1158,14 @@ ofpact_check__(const struct ofpact *a, const struct 
> flow *flow, int max_ports)
>     case OFPACT_EXIT:
>         return 0;
> 
> +    case OFPACT_PUSH_MPLS:
> +        *dl_type = ofpact_get_PUSH_MPLS(a)->ethertype;
> +        return 0;
> +
> +    case OFPACT_POP_MPLS:
> +        *dl_type = ofpact_get_POP_MPLS(a)->ethertype;
> +        return 0;
> +
>     case OFPACT_CLEAR_ACTIONS:
>     case OFPACT_WRITE_METADATA:
>     case OFPACT_GOTO_TABLE:
> @@ -1136,9 +1184,11 @@ ofpacts_check(const struct ofpact ofpacts[], size_t 
> ofpacts_len,
>               const struct flow *flow, int max_ports)
> {
>     const struct ofpact *a;
> +    ovs_be16 dl_type = flow->dl_type;
> 
>     OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
> -        enum ofperr error = ofpact_check__(a, flow, max_ports);
> +        enum ofperr error = ofpact_check__(a, flow, max_ports,
> +                                           &dl_type);
>         if (error) {
>             return error;
>         }
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to