diff options
author | Jason Wang <jasowang@redhat.com> | 2021-04-02 11:03:20 +0800 |
---|---|---|
committer | Jason Wang <jasowang@redhat.com> | 2021-04-08 17:33:59 +0800 |
commit | 603f2f7c6c8c747d0189936a74fb33e610ce7858 (patch) | |
tree | e940c7db13a812592ae647a494a1a5b205186f51 | |
parent | d89b4f839f0770a3adbedd5a727482f0aa2478a6 (diff) |
Revert "hmp: Use QAPI NetdevInfo in hmp_info_network"
Several issues has been reported for query-netdev info
series. Consider it's late in the rc, this reverts commit
a0724776c5a98a08fc946bb5a4ad16410ca64c0e.
Signed-off-by: Jason Wang <jasowang@redhat.com>
-rw-r--r-- | include/qapi/hmp-output-visitor.h | 30 | ||||
-rw-r--r-- | net/net.c | 31 | ||||
-rw-r--r-- | qapi/hmp-output-visitor.c | 193 | ||||
-rw-r--r-- | qapi/meson.build | 1 |
4 files changed, 1 insertions, 254 deletions
diff --git a/include/qapi/hmp-output-visitor.h b/include/qapi/hmp-output-visitor.h deleted file mode 100644 index 541e4002e3..0000000000 --- a/include/qapi/hmp-output-visitor.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * HMP string output Visitor - * - * Copyright Yandex N.V., 2021 - * - * This work is licensed under the terms of the GNU GPL, version 2 or later. - * See the COPYING file in the top-level directory. - * - */ - -#ifndef HMP_OUTPUT_VISITOR_H -#define HMP_OUTPUT_VISITOR_H - -#include "qapi/visitor.h" - -typedef struct HMPOutputVisitor HMPOutputVisitor; - -/** - * Create a HMP string output visitor for @obj - * - * Flattens dicts/structures, only shows arrays borders. - * - * Errors are not expected to happen. - * - * The caller is responsible for freeing the visitor with - * visit_free(). - */ -Visitor *hmp_output_visitor_new(char **result); - -#endif @@ -55,7 +55,6 @@ #include "sysemu/sysemu.h" #include "net/filter.h" #include "qapi/string-output-visitor.h" -#include "qapi/hmp-output-visitor.h" /* Net bridge is currently not supported for W32. */ #if !defined(_WIN32) @@ -1222,42 +1221,14 @@ static void netfilter_print_info(Monitor *mon, NetFilterState *nf) monitor_printf(mon, "\n"); } -static char *generate_info_str(NetClientState *nc) -{ - NetdevInfo *ni = nc->stored_config; - char *ret_out = NULL; - Visitor *v; - - /* Use legacy field info_str for NIC and hubports */ - if ((nc->info->type == NET_CLIENT_DRIVER_NIC) || - (nc->info->type == NET_CLIENT_DRIVER_HUBPORT)) { - return g_strdup(nc->info_str ? nc->info_str : ""); - } - - if (!ni) { - return g_malloc0(1); - } - - v = hmp_output_visitor_new(&ret_out); - if (visit_type_NetdevInfo(v, "", &ni, NULL)) { - visit_complete(v, &ret_out); - } - visit_free(v); - - return ret_out; -} - void print_net_client(Monitor *mon, NetClientState *nc) { NetFilterState *nf; - char *info_str = generate_info_str(nc); monitor_printf(mon, "%s: index=%d,type=%s,%s\n", nc->name, nc->queue_index, NetClientDriver_str(nc->info->type), - info_str); - g_free(info_str); - + nc->info_str ? nc->info_str : ""); if (!QTAILQ_EMPTY(&nc->filters)) { monitor_printf(mon, "filters:\n"); } diff --git a/qapi/hmp-output-visitor.c b/qapi/hmp-output-visitor.c deleted file mode 100644 index 8036605f97..0000000000 --- a/qapi/hmp-output-visitor.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * HMP string output Visitor - * - * Copyright Yandex N.V., 2021 - * - * This work is licensed under the terms of the GNU GPL, version 2 or later. - * See the COPYING file in the top-level directory. - * - */ - -#include "qemu/osdep.h" -#include "qemu/cutils.h" -#include "qapi/hmp-output-visitor.h" -#include "qapi/visitor-impl.h" - -struct HMPOutputVisitor { - Visitor visitor; - char **result; - GString *buffer; - bool is_continue; -}; - -static HMPOutputVisitor *to_hov(Visitor *v) -{ - return container_of(v, HMPOutputVisitor, visitor); -} - -static void hmp_output_append_formatted(Visitor *v, const char *fmt, ...) -{ - HMPOutputVisitor *ov = to_hov(v); - va_list args; - - if (ov->is_continue) { - g_string_append(ov->buffer, ","); - } else { - ov->is_continue = true; - } - - va_start(args, fmt); - g_string_append_vprintf(ov->buffer, fmt, args); - va_end(args); -} - -static void hmp_output_skip_comma(Visitor *v) -{ - HMPOutputVisitor *ov = to_hov(v); - - ov->is_continue = false; -} - -static bool hmp_output_start_struct(Visitor *v, const char *name, - void **obj, size_t unused, Error **errp) -{ - return true; -} - -static void hmp_output_end_struct(Visitor *v, void **obj) {} - -static bool hmp_output_start_list(Visitor *v, const char *name, - GenericList **listp, size_t size, - Error **errp) -{ - hmp_output_append_formatted(v, "%s=[", name); - /* First element in array without comma before it */ - hmp_output_skip_comma(v); - - return true; -} - -static GenericList *hmp_output_next_list(Visitor *v, GenericList *tail, - size_t size) -{ - return tail->next; -} - -static void hmp_output_end_list(Visitor *v, void **obj) -{ - /* Don't need comma after last array element */ - hmp_output_skip_comma(v); - hmp_output_append_formatted(v, "]"); -} - -static bool hmp_output_type_int64(Visitor *v, const char *name, - int64_t *obj, Error **errp) -{ - hmp_output_append_formatted(v, "%s=%" PRId64, name, *obj); - - return true; -} - -static bool hmp_output_type_uint64(Visitor *v, const char *name, - uint64_t *obj, Error **errp) -{ - hmp_output_append_formatted(v, "%s=%" PRIu64, name, *obj); - - return true; -} - -static bool hmp_output_type_bool(Visitor *v, const char *name, bool *obj, - Error **errp) -{ - hmp_output_append_formatted(v, "%s=%s", name, *obj ? "true" : "false"); - - return true; -} - -static bool hmp_output_type_str(Visitor *v, const char *name, char **obj, - Error **errp) -{ - /* Skip already printed or unused fields */ - if (!*obj || g_str_equal(name, "id") || g_str_equal(name, "type")) { - return true; - } - - /* Do not print stub name for StringList elements */ - if (g_str_equal(name, "str")) { - hmp_output_append_formatted(v, "%s", *obj); - } else { - hmp_output_append_formatted(v, "%s=%s", name, *obj); - } - - return true; -} - -static bool hmp_output_type_number(Visitor *v, const char *name, - double *obj, Error **errp) -{ - hmp_output_append_formatted(v, "%s=%.17g", name, *obj); - - return true; -} - -/* TODO: remove this function? */ -static bool hmp_output_type_any(Visitor *v, const char *name, - QObject **obj, Error **errp) -{ - return true; -} - -static bool hmp_output_type_null(Visitor *v, const char *name, - QNull **obj, Error **errp) -{ - hmp_output_append_formatted(v, "%s=NULL", name); - - return true; -} - -static void hmp_output_complete(Visitor *v, void *opaque) -{ - HMPOutputVisitor *ov = to_hov(v); - - *ov->result = g_string_free(ov->buffer, false); - ov->buffer = NULL; -} - -static void hmp_output_free(Visitor *v) -{ - HMPOutputVisitor *ov = to_hov(v); - - if (ov->buffer) { - g_string_free(ov->buffer, true); - } - g_free(v); -} - -Visitor *hmp_output_visitor_new(char **result) -{ - HMPOutputVisitor *v; - - v = g_malloc0(sizeof(*v)); - - v->visitor.type = VISITOR_OUTPUT; - v->visitor.start_struct = hmp_output_start_struct; - v->visitor.end_struct = hmp_output_end_struct; - v->visitor.start_list = hmp_output_start_list; - v->visitor.next_list = hmp_output_next_list; - v->visitor.end_list = hmp_output_end_list; - v->visitor.type_int64 = hmp_output_type_int64; - v->visitor.type_uint64 = hmp_output_type_uint64; - v->visitor.type_bool = hmp_output_type_bool; - v->visitor.type_str = hmp_output_type_str; - v->visitor.type_number = hmp_output_type_number; - v->visitor.type_any = hmp_output_type_any; - v->visitor.type_null = hmp_output_type_null; - v->visitor.complete = hmp_output_complete; - v->visitor.free = hmp_output_free; - - v->result = result; - v->buffer = g_string_new(""); - v->is_continue = false; - - return &v->visitor; -} diff --git a/qapi/meson.build b/qapi/meson.build index 0d20226fa3..376f4ceafe 100644 --- a/qapi/meson.build +++ b/qapi/meson.build @@ -8,7 +8,6 @@ util_ss.add(files( 'qobject-output-visitor.c', 'string-input-visitor.c', 'string-output-visitor.c', - 'hmp-output-visitor.c', )) if have_system or have_tools util_ss.add(files( |