Acked-by: Jarno Rajahalme <ja...@ovn.org>

> On Jan 18, 2016, at 11:26 PM, Ben Pfaff <b...@ovn.org> wrote:
> 
> The callers call dump_stats_transaction() for OFPST_* messages and
> dump_transaction() for other messages, but the callee can easily
> distinguish the two types, so this commit eliminates the difference for the
> callers to simplify use.
> 
> This will be more valuable in an upcoming commit in which a single
> ofputil_encode_*() function can produce an OFPT_* request for some
> OpenFlow versions and an OFPST_* request for others.  (Specifically, OF1.4
> changes OFPT_QUEUE_GET_CONFIG_REQUEST into OFPST_QUEUE_DESC.)
> 
> Also merges dump_trivial_stats_transaction() into
> dump_trivial_transaction() for the same reason.
> 
> Signed-off-by: Ben Pfaff <b...@ovn.org>
> ---
> utilities/ovs-ofctl.c | 123 ++++++++++++++++++++++----------------------------
> 1 file changed, 54 insertions(+), 69 deletions(-)
> 
> diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
> index 332a99d..4dbd4ed 100644
> --- a/utilities/ovs-ofctl.c
> +++ b/utilities/ovs-ofctl.c
> @@ -532,78 +532,64 @@ send_openflow_buffer(struct vconn *vconn, struct ofpbuf 
> *buffer)
> static void
> dump_transaction(struct vconn *vconn, struct ofpbuf *request)
> {
> -    struct ofpbuf *reply;
> -
> -    run(vconn_transact(vconn, request, &reply), "talking to %s",
> -        vconn_get_name(vconn));
> -    ofp_print(stdout, reply->data, reply->size, verbosity + 1);
> -    ofpbuf_delete(reply);
> -}
> -
> -static void
> -dump_trivial_transaction(const char *vconn_name, enum ofpraw raw)
> -{
> -    struct ofpbuf *request;
> -    struct vconn *vconn;
> -
> -    open_vconn(vconn_name, &vconn);
> -    request = ofpraw_alloc(raw, vconn_get_version(vconn), 0);
> -    dump_transaction(vconn, request);
> -    vconn_close(vconn);
> -}
> +    const struct ofp_header *oh = request->data;
> +    if (ofpmsg_is_stat_request(oh)) {
> +        ovs_be32 send_xid = oh->xid;
> +        enum ofpraw request_raw;
> +        enum ofpraw reply_raw;
> +        bool done = false;
> 
> -static void
> -dump_stats_transaction(struct vconn *vconn, struct ofpbuf *request)
> -{
> -    const struct ofp_header *request_oh = request->data;
> -    ovs_be32 send_xid = request_oh->xid;
> -    enum ofpraw request_raw;
> -    enum ofpraw reply_raw;
> -    bool done = false;
> -
> -    ofpraw_decode_partial(&request_raw, request->data, request->size);
> -    reply_raw = ofpraw_stats_request_to_reply(request_raw,
> -                                              request_oh->version);
> +        ofpraw_decode_partial(&request_raw, request->data, request->size);
> +        reply_raw = ofpraw_stats_request_to_reply(request_raw, oh->version);
> 
> -    send_openflow_buffer(vconn, request);
> -    while (!done) {
> -        ovs_be32 recv_xid;
> -        struct ofpbuf *reply;
> +        send_openflow_buffer(vconn, request);
> +        while (!done) {
> +            ovs_be32 recv_xid;
> +            struct ofpbuf *reply;
> 
> -        run(vconn_recv_block(vconn, &reply), "OpenFlow packet receive 
> failed");
> -        recv_xid = ((struct ofp_header *) reply->data)->xid;
> -        if (send_xid == recv_xid) {
> -            enum ofpraw raw;
> +            run(vconn_recv_block(vconn, &reply),
> +                "OpenFlow packet receive failed");
> +            recv_xid = ((struct ofp_header *) reply->data)->xid;
> +            if (send_xid == recv_xid) {
> +                enum ofpraw raw;
> 
> -            ofp_print(stdout, reply->data, reply->size, verbosity + 1);
> +                ofp_print(stdout, reply->data, reply->size, verbosity + 1);
> 
> -            ofpraw_decode(&raw, reply->data);
> -            if (ofptype_from_ofpraw(raw) == OFPTYPE_ERROR) {
> -                done = true;
> -            } else if (raw == reply_raw) {
> -                done = !ofpmp_more(reply->data);
> +                ofpraw_decode(&raw, reply->data);
> +                if (ofptype_from_ofpraw(raw) == OFPTYPE_ERROR) {
> +                    done = true;
> +                } else if (raw == reply_raw) {
> +                    done = !ofpmp_more(reply->data);
> +                } else {
> +                    ovs_fatal(0, "received bad reply: %s",
> +                              ofp_to_string(reply->data, reply->size,
> +                                            verbosity + 1));
> +                }
>             } else {
> -                ovs_fatal(0, "received bad reply: %s",
> -                          ofp_to_string(reply->data, reply->size,
> -                                        verbosity + 1));
> +                VLOG_DBG("received reply with xid %08"PRIx32" "
> +                         "!= expected %08"PRIx32, recv_xid, send_xid);
>             }
> -        } else {
> -            VLOG_DBG("received reply with xid %08"PRIx32" "
> -                     "!= expected %08"PRIx32, recv_xid, send_xid);
> +            ofpbuf_delete(reply);
>         }
> +    } else {
> +        struct ofpbuf *reply;
> +
> +        run(vconn_transact(vconn, request, &reply), "talking to %s",
> +            vconn_get_name(vconn));
> +        ofp_print(stdout, reply->data, reply->size, verbosity + 1);
>         ofpbuf_delete(reply);
>     }
> }
> 
> static void
> -dump_trivial_stats_transaction(const char *vconn_name, enum ofpraw raw)
> +dump_trivial_transaction(const char *vconn_name, enum ofpraw raw)
> {
>     struct ofpbuf *request;
>     struct vconn *vconn;
> 
>     open_vconn(vconn_name, &vconn);
>     request = ofpraw_alloc(raw, vconn_get_version(vconn), 0);
> -    dump_stats_transaction(vconn, request);
> +    dump_transaction(vconn, request);
>     vconn_close(vconn);
> }
> 
> @@ -704,7 +690,7 @@ ofctl_show(struct ovs_cmdl_context *ctx)
> 
>     if (!has_ports) {
>         request = ofputil_encode_port_desc_stats_request(version, OFPP_ANY);
> -        dump_stats_transaction(vconn, request);
> +        dump_transaction(vconn, request);
>     }
>     dump_trivial_transaction(vconn_name, OFPRAW_OFPT_GET_CONFIG_REQUEST);
>     vconn_close(vconn);
> @@ -713,13 +699,13 @@ ofctl_show(struct ovs_cmdl_context *ctx)
> static void
> ofctl_dump_desc(struct ovs_cmdl_context *ctx)
> {
> -    dump_trivial_stats_transaction(ctx->argv[1], OFPRAW_OFPST_DESC_REQUEST);
> +    dump_trivial_transaction(ctx->argv[1], OFPRAW_OFPST_DESC_REQUEST);
> }
> 
> static void
> ofctl_dump_tables(struct ovs_cmdl_context *ctx)
> {
> -    dump_trivial_stats_transaction(ctx->argv[1], OFPRAW_OFPST_TABLE_REQUEST);
> +    dump_trivial_transaction(ctx->argv[1], OFPRAW_OFPST_TABLE_REQUEST);
> }
> 
> static void
> @@ -731,7 +717,7 @@ ofctl_dump_table_features(struct ovs_cmdl_context *ctx)
>     open_vconn(ctx->argv[1], &vconn);
>     request = ofputil_encode_table_features_request(vconn_get_version(vconn));
> 
> -    /* The following is similar to dump_trivial_stats_transaction(), but it
> +    /* The following is similar to dump_trivial_transaction(), but it
>      * maintains the previous 'ofputil_table_features' from one stats reply
>      * message to the next, which allows duplication to be eliminated in the
>      * output across messages.  Otherwise the output is much larger and harder
> @@ -810,7 +796,7 @@ ofctl_dump_table_desc(struct ovs_cmdl_context *ctx)
>     open_vconn(ctx->argv[1], &vconn);
>     request = ofputil_encode_table_desc_request(vconn_get_version(vconn));
>     if (request) {
> -        dump_stats_transaction(vconn, request);
> +        dump_transaction(vconn, request);
>     }
> 
>     vconn_close(vconn);
> @@ -1102,7 +1088,7 @@ ofctl_dump_flows__(int argc, char *argv[], bool 
> aggregate)
>     struct vconn *vconn;
> 
>     vconn = prepare_dump_flows(argc, argv, aggregate, &request);
> -    dump_stats_transaction(vconn, request);
> +    dump_transaction(vconn, request);
>     vconn_close(vconn);
> }
> 
> @@ -1238,7 +1224,7 @@ ofctl_queue_stats(struct ovs_cmdl_context *ctx)
>     }
> 
>     request = ofputil_encode_queue_stats_request(vconn_get_version(vconn), 
> &oqs);
> -    dump_stats_transaction(vconn, request);
> +    dump_transaction(vconn, request);
>     vconn_close(vconn);
> }
> 
> @@ -1776,7 +1762,7 @@ ofctl_monitor(struct ovs_cmdl_context *ctx)
> 
>             msg = ofpbuf_new(0);
>             ofputil_append_flow_monitor_request(&fmr, msg);
> -            dump_stats_transaction(vconn, msg);
> +            dump_transaction(vconn, msg);
>             fflush(stdout);
>         } else {
>             ovs_fatal(0, "%s: unsupported \"monitor\" argument", arg);
> @@ -1839,7 +1825,7 @@ ofctl_dump_ports(struct ovs_cmdl_context *ctx)
>     open_vconn(ctx->argv[1], &vconn);
>     port = ctx->argc > 2 ? str_to_port_no(ctx->argv[1], ctx->argv[2]) : 
> OFPP_ANY;
>     request = ofputil_encode_dump_ports_request(vconn_get_version(vconn), 
> port);
> -    dump_stats_transaction(vconn, request);
> +    dump_transaction(vconn, request);
>     vconn_close(vconn);
> }
> 
> @@ -1854,7 +1840,7 @@ ofctl_dump_ports_desc(struct ovs_cmdl_context *ctx)
>     port = ctx->argc > 2 ? str_to_port_no(ctx->argv[1], ctx->argv[2]) : 
> OFPP_ANY;
>     request = ofputil_encode_port_desc_stats_request(vconn_get_version(vconn),
>                                                      port);
> -    dump_stats_transaction(vconn, request);
> +    dump_transaction(vconn, request);
>     vconn_close(vconn);
> }
> 
> @@ -2495,7 +2481,7 @@ ofctl_dump_group_stats(struct ovs_cmdl_context *ctx)
>     request = ofputil_encode_group_stats_request(vconn_get_version(vconn),
>                                                  group_id);
>     if (request) {
> -        dump_stats_transaction(vconn, request);
> +        dump_transaction(vconn, request);
>     }
> 
>     vconn_close(vconn);
> @@ -2517,7 +2503,7 @@ ofctl_dump_group_desc(struct ovs_cmdl_context *ctx)
>     request = ofputil_encode_group_desc_request(vconn_get_version(vconn),
>                                                 group_id);
>     if (request) {
> -        dump_stats_transaction(vconn, request);
> +        dump_transaction(vconn, request);
>     }
> 
>     vconn_close(vconn);
> @@ -2532,7 +2518,7 @@ ofctl_dump_group_features(struct ovs_cmdl_context *ctx)
>     open_vconn(ctx->argv[1], &vconn);
>     request = ofputil_encode_group_features_request(vconn_get_version(vconn));
>     if (request) {
> -        dump_stats_transaction(vconn, request);
> +        dump_transaction(vconn, request);
>     }
> 
>     vconn_close(vconn);
> @@ -3147,9 +3133,8 @@ ofctl_meter_request__(const char *bridge, const char 
> *str,
> 
>     protocol = open_vconn_for_flow_mod(bridge, &vconn, usable_protocols);
>     version = ofputil_protocol_to_ofp_version(protocol);
> -    dump_stats_transaction(vconn,
> -                           ofputil_encode_meter_request(version, type,
> -                                                        mm.meter.meter_id));
> +    dump_transaction(vconn, ofputil_encode_meter_request(version, type,
> +                                                         mm.meter.meter_id));
>     vconn_close(vconn);
> }
> 
> -- 
> 2.1.3
> 
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to