On Mon, Jun 23, 2014 at 02:38:50PM -0700, Ben Pfaff wrote:
> On Sat, Jun 14, 2014 at 08:33:13AM +0900, Simon Horman wrote:
> > Previously the out_port of a flow monitor was
> > checked in ofmonitor_report() using ofoperation_has_out_port().
> >
> > When ofoperation_has_out_port() was removed so was the call to
> > it in ofmonitor_report() thus flow monitor updates are longer
> > filtered on the out_port.
> >
> > This restores filtering on the out_port by using
> > ofproto_rule_has_out_port to check the actions of the rule.
> > If the actions have been changed by a modify actions then
> > ofpacts_output_to_port() is also used to check the old actions.
> >
> > This patch also adds a test to exercise out_ports for flow monitors.
> >
> > This resolves what appears to be a regression introduced by
> > b20f4073eecd4761 ("ofproto: Do straightforward removal of asynchronous flow
> > operations.")
> >
> > Signed-off-by: Simon Horman <[email protected]>
>
> Good catch. Thank you!
>
> In modify_flows__(), moving the destruction of 'actions' later wasn't
> necessary, because rule_actions_destroy() postpones the actual
> destruction until the next RCU grace period, but it is less confusing
> to readers to "destroy" it after the last use, so I'm happy to move it
> later. However, in that case we should move it after the *actual*
> last use, so I folded in this incremental:
Thanks.
>
> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
> index 50ba91a..458703d 100644
> --- a/ofproto/ofproto.c
> +++ b/ofproto/ofproto.c
> @@ -4202,9 +4202,9 @@ modify_flows__(struct ofproto *ofproto, struct
> ofputil_flow_mod *fm,
> }
>
> if (change_actions) {
> - rule_actions_destroy(actions);
> learned_cookies_inc(ofproto, rule_get_actions(rule));
> learned_cookies_dec(ofproto, actions, &dead_cookies);
> + rule_actions_destroy(actions);
> }
> }
> learned_cookies_flush(ofproto, &dead_cookies);
>
> With that change, I applied this to master.
>
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev