[ovs-dev] [tests+nxm-ofctl 18/42] ovs-ofctl: Check that commands actually succeed.

Ethan Jackson ethan at nicira.com
Thu Dec 2 20:35:19 UTC 2010


Looks Good.

On Tue, Nov 23, 2010 at 2:43 PM, Ben Pfaff <blp at nicira.com> wrote:
> Until now, when it sends commands to switches that ordinarily have no
> reply, ovs-ofctl has not waited around to see whether the command succeeds
> or fails.  This commit fixes the problem: errors will now be reported.
> ---
>  utilities/ovs-ofctl.c |   34 ++++++++++++++++++++++++++--------
>  1 files changed, 26 insertions(+), 8 deletions(-)
>
> diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
> index 869c754..54e4b0c 100644
> --- a/utilities/ovs-ofctl.c
> +++ b/utilities/ovs-ofctl.c
> @@ -337,6 +337,24 @@ dump_trivial_stats_transaction(const char *vconn_name, uint8_t stats_type)
>     dump_stats_transaction(vconn_name, request);
>  }
>
> +/* Sends 'request', which should be a request that only has a reply if an error
> + * occurs, and waits for it to succeed or fail.  If an error does occur, prints
> + * it and exits with an error. */
> +static void
> +dump_noreply_transaction(struct vconn *vconn, struct ofpbuf *request)
> +{
> +    struct ofpbuf *reply;
> +
> +    update_openflow_length(request);
> +    run(vconn_transact_noreply(vconn, request, &reply),
> +        "talking to %s", vconn_get_name(vconn));
> +    if (reply) {
> +        ofp_print(stderr, reply->data, reply->size, 2);
> +        exit(1);
> +    }
> +    ofpbuf_delete(reply);
> +}
> +
>  static void
>  do_show(int argc OVS_UNUSED, char *argv[])
>  {
> @@ -509,12 +527,12 @@ static void
>  do_add_flow(int argc OVS_UNUSED, char *argv[])
>  {
>     struct vconn *vconn;
> -    struct ofpbuf *buffer;
> +    struct ofpbuf *request;
>
> -    buffer = parse_ofp_flow_mod_str(argv[2], OFPFC_ADD);
> +    request = parse_ofp_flow_mod_str(argv[2], OFPFC_ADD);
>
>     open_vconn(argv[1], &vconn);
> -    send_openflow_buffer(vconn, buffer);
> +    dump_noreply_transaction(vconn, request);
>     vconn_close(vconn);
>  }
>
> @@ -532,7 +550,7 @@ do_add_flows(int argc OVS_UNUSED, char *argv[])
>
>     open_vconn(argv[1], &vconn);
>     while ((b = parse_ofp_add_flow_file(file)) != NULL) {
> -        send_openflow_buffer(vconn, b);
> +        dump_noreply_transaction(vconn, b);
>     }
>     vconn_close(vconn);
>     fclose(file);
> @@ -548,7 +566,7 @@ do_mod_flows(int argc OVS_UNUSED, char *argv[])
>     command = strict ? OFPFC_MODIFY_STRICT : OFPFC_MODIFY;
>     buffer = parse_ofp_flow_mod_str(argv[2], command);
>     open_vconn(argv[1], &vconn);
> -    send_openflow_buffer(vconn, buffer);
> +    dump_noreply_transaction(vconn, buffer);
>     vconn_close(vconn);
>  }
>
> @@ -562,7 +580,7 @@ static void do_del_flows(int argc, char *argv[])
>     buffer = parse_ofp_flow_mod_str(argc > 2 ? argv[2] : "", command);
>
>     open_vconn(argv[1], &vconn);
> -    send_openflow_buffer(vconn, buffer);
> +    dump_noreply_transaction(vconn, buffer);
>     vconn_close(vconn);
>  }
>
> @@ -590,7 +608,7 @@ do_monitor(int argc, char *argv[])
>
>         osc = make_openflow(sizeof *osc, OFPT_SET_CONFIG, &buf);
>         osc->miss_send_len = htons(miss_send_len);
> -        send_openflow_buffer(vconn, buf);
> +        dump_noreply_transaction(vconn, buf);
>     }
>     monitor_vconn(vconn);
>  }
> @@ -666,7 +684,7 @@ do_mod_port(int argc OVS_UNUSED, char *argv[])
>     }
>
>     open_vconn(argv[1], &vconn);
> -    send_openflow_buffer(vconn, request);
> +    dump_noreply_transaction(vconn, request);
>     vconn_close(vconn);
>  }
>
> --
> 1.7.1
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev_openvswitch.org
>




More information about the dev mailing list