[ovs-dev] [PATCH v3 10/41] ofproto: Handle monitor and delete commands in flow monitor requests

Ben Pfaff blp at nicira.com
Tue Jun 24 00:14:52 UTC 2014


On Mon, Jun 16, 2014 at 11:29:30AM +0900, Simon Horman wrote:
> Handle modify and delete commands in OpenFlow1.4 flow monitor requests.
> These commands are not yet allowed by the decoder which
> will be updated by a subsequent patch.
> 
> Signed-off-by: Simon Horman <horms at verge.net.au>
> 
> ---
> v2
> * No change
> ---
>  ofproto/ofproto.c | 19 +++++++++++++++----
>  1 file changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
> index 3153e71..211f45e 100644
> --- a/ofproto/ofproto.c
> +++ b/ofproto/ofproto.c
> @@ -4880,12 +4880,23 @@ handle_flow_monitor_request(struct ofconn *ofconn, const struct ofp_header *oh)
>              goto error;
>          }
>  
> -        error = ofmonitor_create(&request, ofconn, &m);
> -        if (error) {
> -            goto error;
> +        if (request.command == OFPFMC14_DELETE ||
> +            request.command == OFPFMC14_MODIFY) {
> +            error = flow_monitor_delete(ofconn, request.id);
> +            if (error) {
> +                goto error;
> +            }
>          }
>  
> -        list_insert(&monitor_list, &m->list_node);
> +        if (request.command == OFPFMC14_ADD ||
> +            request.command == OFPFMC14_MODIFY) {
> +            error = ofmonitor_create(&request, ofconn, &m);
> +            if (error) {
> +                goto error;
> +            }
> +
> +            list_insert(&monitor_list, &m->list_node);
> +        }
>      }
>  
>      rule_collection_init(&rules);

I think that this is correct, but this way it is written makes it look
like a "modify" could fail in the middle with the monitor deleted and
not re-created.  That can't actually happen because ofmonitor_create()
only fails if there's a duplicate id.  I'd rather have to code written
to be more obviously correct.  (One way to do that would be to have an
ofmonitor_modify() function, I guess, but there might be other ways
too.)



More information about the dev mailing list