[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