All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] Revert query-netdev command for 6.0
@ 2021-04-02  8:15 Jason Wang
  2021-04-02  8:15 ` [PATCH 1/5] Revert "net: Do not fill legacy info_str for backends" Jason Wang
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Jason Wang @ 2021-04-02  8:15 UTC (permalink / raw)
  To: qemu-devel, lekiravi; +Cc: Jason Wang

Hi All:

Several issues has been reported for query-netdev command:

- coverity warnings of memory leak and cut-and-paste issue
- lacking of documentation for future new netdev development

Consider it's late in the rc, I would like to revert this series and
let's retry for 6.1.

Thanks

Jason Wang (5):
  Revert "net: Do not fill legacy info_str for backends"
  Revert "hmp: Use QAPI NetdevInfo in hmp_info_network"
  Revert "net: Move NetClientState.info_str to dynamic allocations"
  Revert "tests: Add tests for query-netdev command"
  Revert "qapi: net: Add query-netdev command"

 hw/net/xen_nic.c                  |   5 +-
 include/net/net.h                 |   5 +-
 include/qapi/hmp-output-visitor.h |  30 -----
 net/l2tpv3.c                      |   8 +-
 net/net.c                         |  73 ++---------
 net/netmap.c                      |   7 --
 net/slirp.c                       | 124 +------------------
 net/socket.c                      |  92 ++++----------
 net/tap-win32.c                   |  10 +-
 net/tap.c                         | 107 ++---------------
 net/vde.c                         |  25 +---
 net/vhost-user.c                  |  20 +---
 net/vhost-vdpa.c                  |  15 +--
 qapi/hmp-output-visitor.c         | 193 ------------------------------
 qapi/meson.build                  |   1 -
 qapi/net.json                     |  80 -------------
 tests/qtest/meson.build           |   3 -
 tests/qtest/test-query-netdev.c   | 120 -------------------
 18 files changed, 62 insertions(+), 856 deletions(-)
 delete mode 100644 include/qapi/hmp-output-visitor.h
 delete mode 100644 qapi/hmp-output-visitor.c
 delete mode 100644 tests/qtest/test-query-netdev.c

-- 
2.24.3 (Apple Git-128)



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/5] Revert "net: Do not fill legacy info_str for backends"
  2021-04-02  8:15 [PATCH 0/5] Revert query-netdev command for 6.0 Jason Wang
@ 2021-04-02  8:15 ` Jason Wang
  2021-04-02  8:15 ` [PATCH 2/5] Revert "hmp: Use QAPI NetdevInfo in hmp_info_network" Jason Wang
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Jason Wang @ 2021-04-02  8:15 UTC (permalink / raw)
  To: qemu-devel, lekiravi; +Cc: Jason Wang

Several issues has been reported for query-netdev info
series. Consider it's late in the rc, this reverts commit
f2e8319d456724c3d8514d943dc4607e2f08e88a.

Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 net/l2tpv3.c     |  2 ++
 net/slirp.c      |  3 +++
 net/socket.c     | 28 ++++++++++++++++++++++++++++
 net/tap-win32.c  |  2 ++
 net/tap.c        |  9 +++++++++
 net/vde.c        |  2 ++
 net/vhost-user.c |  1 +
 net/vhost-vdpa.c |  1 +
 8 files changed, 48 insertions(+)

diff --git a/net/l2tpv3.c b/net/l2tpv3.c
index b7e1d84674..96611cb4af 100644
--- a/net/l2tpv3.c
+++ b/net/l2tpv3.c
@@ -729,6 +729,8 @@ int net_init_l2tpv3(const Netdev *netdev,
 
     QAPI_CLONE_MEMBERS(NetdevL2TPv3Options,
                        &nc->stored_config->u.l2tpv3, l2tpv3);
+
+    s->nc.info_str = g_strdup_printf("l2tpv3: connected");
     return 0;
 outerr:
     qemu_del_net_client(nc);
diff --git a/net/slirp.c b/net/slirp.c
index a9fdc7a08f..67f0f1d925 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -674,6 +674,9 @@ static int net_slirp_init(NetClientState *peer, const char *model,
         stored->tftp_server_name = g_strdup(tftp_server_name);
     }
 
+    nc->info_str = g_strdup_printf("net=%s,restrict=%s", inet_ntoa(net),
+                                   restricted ? "on" : "off");
+
     s = DO_UPCAST(SlirpState, nc, nc);
 
     s->slirp = slirp_init(restricted, ipv4, net, mask, host,
diff --git a/net/socket.c b/net/socket.c
index c0de10c0c0..98172347d7 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -180,6 +180,8 @@ static void net_socket_send(void *opaque)
         s->fd = -1;
         net_socket_rs_init(&s->rs, net_socket_rs_finalize, false);
         s->nc.link_down = true;
+        g_free(s->nc.info_str);
+        s->nc.info_str = g_new0(char, 1);
 
         return;
     }
@@ -399,10 +401,16 @@ static NetSocketState *net_socket_fd_init_dgram(NetClientState *peer,
         stored->mcast = g_strdup(mcast);
 
         s->dgram_dst = saddr;
+        nc->info_str = g_strdup_printf("socket: fd=%d (cloned mcast=%s:%d)",
+                                       fd, inet_ntoa(saddr.sin_addr),
+                                       ntohs(saddr.sin_port));
     } else {
         if (sa_type == SOCKET_ADDRESS_TYPE_UNIX) {
             s->dgram_dst.sin_family = AF_UNIX;
         }
+
+        nc->info_str = g_strdup_printf("socket: fd=%d %s",
+                                       fd, SocketAddressType_str(sa_type));
     }
 
     return s;
@@ -437,6 +445,8 @@ static NetSocketState *net_socket_fd_init_stream(NetClientState *peer,
 
     nc = qemu_new_net_client(&net_socket_info, peer, model, name);
 
+    nc->info_str = g_strdup_printf("socket: fd=%d", fd);
+
     s = DO_UPCAST(NetSocketState, nc, nc);
 
     s->fd = fd;
@@ -518,6 +528,11 @@ static void net_socket_accept(void *opaque)
 
     stored->has_fd = true;
     stored->fd = g_strdup_printf("%d", fd);
+
+    g_free(s->nc.info_str);
+    s->nc.info_str = g_strdup_printf("socket: connection from %s:%d",
+                                     inet_ntoa(saddr.sin_addr),
+                                     ntohs(saddr.sin_port));
 }
 
 static int net_socket_listen_init(NetClientState *peer,
@@ -632,6 +647,10 @@ static int net_socket_connect_init(NetClientState *peer,
     stored->has_connect = true;
     stored->connect = g_strdup(host_str);
 
+    g_free(s->nc.info_str);
+    s->nc.info_str = g_strdup_printf("socket: connect to %s:%d",
+                                     inet_ntoa(saddr.sin_addr),
+                                     ntohs(saddr.sin_port));
     return 0;
 }
 
@@ -688,7 +707,12 @@ static int net_socket_mcast_init(NetClientState *peer,
         stored->localaddr = g_strdup(localaddr_str);
     }
 
+    g_free(s->nc.info_str);
+    s->nc.info_str = g_strdup_printf("socket: mcast=%s:%d",
+                                     inet_ntoa(saddr.sin_addr),
+                                     ntohs(saddr.sin_port));
     return 0;
+
 }
 
 static int net_socket_udp_init(NetClientState *peer,
@@ -749,6 +773,10 @@ static int net_socket_udp_init(NetClientState *peer,
     stored->has_udp = true;
     stored->udp = g_strdup(rhost);
 
+    g_free(s->nc.info_str);
+    s->nc.info_str = g_strdup_printf("socket: udp=%s:%d",
+                                     inet_ntoa(raddr.sin_addr),
+                                     ntohs(raddr.sin_port));
     return 0;
 }
 
diff --git a/net/tap-win32.c b/net/tap-win32.c
index d7c2a8759c..959266c658 100644
--- a/net/tap-win32.c
+++ b/net/tap-win32.c
@@ -797,6 +797,8 @@ static int tap_win32_init(NetClientState *peer, const char *model,
     stored->has_ifname = true;
     stored->ifname = g_strdup(ifname);
 
+    s->nc.info_str = g_strdup_printf("tap: ifname=%s", ifname);
+
     s->handle = handle;
 
     qemu_add_wait_object(s->handle->tap_semaphore, tap_win32_send, s);
diff --git a/net/tap.c b/net/tap.c
index d6d8456188..522ce7e487 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -635,6 +635,8 @@ int net_init_bridge(const Netdev *netdev, const char *name,
         stored->helper = g_strdup(helper);
     }
 
+    s->nc.info_str = g_strdup_printf("helper=%s,br=%s", helper, br);
+
     return 0;
 }
 
@@ -720,6 +722,8 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
             stored->fds = g_strdup_printf("%s:%d", stored->fds, fd);
             g_free(tmp_s);
         }
+
+        s->nc.info_str = g_strdup_printf("fd=%d", fd);
     } else if (tap->has_helper) {
         if (!stored->has_helper) {
             stored->has_helper = true;
@@ -731,6 +735,8 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
             stored->br = tap->has_br ? g_strdup(tap->br) :
                                        g_strdup(DEFAULT_BRIDGE_INTERFACE);
         }
+
+        s->nc.info_str = g_strdup_printf("helper=%s", tap->helper);
     } else {
         if (ifname && !stored->has_ifname) {
             stored->has_ifname = true;
@@ -747,6 +753,9 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
             stored->downscript = g_strdup(downscript);
         }
 
+        s->nc.info_str = g_strdup_printf("ifname=%s,script=%s,downscript=%s",
+                                         ifname, script, downscript);
+
         if (strcmp(downscript, "no") != 0) {
             snprintf(s->down_script, sizeof(s->down_script), "%s", downscript);
             snprintf(s->down_script_arg, sizeof(s->down_script_arg),
diff --git a/net/vde.c b/net/vde.c
index 64bdb937ca..67de6eb0c5 100644
--- a/net/vde.c
+++ b/net/vde.c
@@ -100,6 +100,8 @@ static int net_vde_init(NetClientState *peer, const char *model,
 
     nc = qemu_new_net_client(&net_vde_info, peer, model, name);
 
+    nc->info_str = g_strdup_printf("sock=%s,fd=%d", sock, vde_datafd(vde));
+
     s = DO_UPCAST(VDEState, nc, nc);
 
     s->vde = vde;
diff --git a/net/vhost-user.c b/net/vhost-user.c
index e443c4b2b5..49c9a740c2 100644
--- a/net/vhost-user.c
+++ b/net/vhost-user.c
@@ -327,6 +327,7 @@ static int net_vhost_user_init(NetClientState *peer, const char *device,
     user = g_new0(struct VhostUserState, 1);
     for (i = 0; i < queues; i++) {
         nc = qemu_new_net_client(&net_vhost_user_info, peer, device, name);
+        nc->info_str = g_strdup_printf("vhost-user%d to %s", i, chr->label);
         nc->queue_index = i;
         if (!nc0) {
             nc0 = nc;
diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
index 5a28bbcd7b..423d71770d 100644
--- a/net/vhost-vdpa.c
+++ b/net/vhost-vdpa.c
@@ -200,6 +200,7 @@ static int net_vhost_vdpa_init(NetClientState *peer, const char *device,
     stored->has_queues = true;
     stored->queues = 1; /* TODO: change when support multiqueue */
 
+    nc->info_str = g_strdup_printf(TYPE_VHOST_VDPA);
     nc->queue_index = 0;
     s = DO_UPCAST(VhostVDPAState, nc, nc);
     vdpa_device_fd = qemu_open_old(vhostdev, O_RDWR);
-- 
2.24.3 (Apple Git-128)



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/5] Revert "hmp: Use QAPI NetdevInfo in hmp_info_network"
  2021-04-02  8:15 [PATCH 0/5] Revert query-netdev command for 6.0 Jason Wang
  2021-04-02  8:15 ` [PATCH 1/5] Revert "net: Do not fill legacy info_str for backends" Jason Wang
@ 2021-04-02  8:15 ` Jason Wang
  2021-04-02  8:15 ` [PATCH 3/5] Revert "net: Move NetClientState.info_str to dynamic allocations" Jason Wang
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Jason Wang @ 2021-04-02  8:15 UTC (permalink / raw)
  To: qemu-devel, lekiravi; +Cc: Jason Wang

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>
---
 include/qapi/hmp-output-visitor.h |  30 -----
 net/net.c                         |  31 +----
 qapi/hmp-output-visitor.c         | 193 ------------------------------
 qapi/meson.build                  |   1 -
 4 files changed, 1 insertion(+), 254 deletions(-)
 delete mode 100644 include/qapi/hmp-output-visitor.h
 delete mode 100644 qapi/hmp-output-visitor.c

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
diff --git a/net/net.c b/net/net.c
index 725a4e1450..277da712eb 100644
--- a/net/net.c
+++ b/net/net.c
@@ -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(
-- 
2.24.3 (Apple Git-128)



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/5] Revert "net: Move NetClientState.info_str to dynamic allocations"
  2021-04-02  8:15 [PATCH 0/5] Revert query-netdev command for 6.0 Jason Wang
  2021-04-02  8:15 ` [PATCH 1/5] Revert "net: Do not fill legacy info_str for backends" Jason Wang
  2021-04-02  8:15 ` [PATCH 2/5] Revert "hmp: Use QAPI NetdevInfo in hmp_info_network" Jason Wang
@ 2021-04-02  8:15 ` Jason Wang
  2021-04-02  9:00   ` Jason Wang
  2021-04-02  8:15 ` [PATCH 4/5] Revert "tests: Add tests for query-netdev command" Jason Wang
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 8+ messages in thread
From: Jason Wang @ 2021-04-02  8:15 UTC (permalink / raw)
  To: qemu-devel, lekiravi; +Cc: Jason Wang

Several issues has been reported for query-netdev info
series. Consider it's late in the rc, this reverts commitThis reverts
commit 59b5437eb732d6b103a9bc279c3482c834d1eff9.

Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 hw/net/xen_nic.c  |  5 +++--
 include/net/net.h |  2 +-
 net/l2tpv3.c      |  3 ++-
 net/net.c         | 14 ++++++--------
 net/slirp.c       |  5 +++--
 net/socket.c      | 43 +++++++++++++++++++------------------------
 net/tap-win32.c   |  3 ++-
 net/tap.c         | 13 ++++++++-----
 net/vde.c         |  3 ++-
 net/vhost-user.c  |  3 ++-
 net/vhost-vdpa.c  |  2 +-
 11 files changed, 49 insertions(+), 47 deletions(-)

diff --git a/hw/net/xen_nic.c b/hw/net/xen_nic.c
index 8431808ea0..5c815b4f0c 100644
--- a/hw/net/xen_nic.c
+++ b/hw/net/xen_nic.c
@@ -296,8 +296,9 @@ static int net_init(struct XenLegacyDevice *xendev)
     netdev->nic = qemu_new_nic(&net_xen_info, &netdev->conf,
                                "xen", NULL, netdev);
 
-    qemu_get_queue(netdev->nic)->info_str = g_strdup_printf(
-        "nic: xenbus vif macaddr=%s", netdev->mac);
+    snprintf(qemu_get_queue(netdev->nic)->info_str,
+             sizeof(qemu_get_queue(netdev->nic)->info_str),
+             "nic: xenbus vif macaddr=%s", netdev->mac);
 
     /* fill info */
     xenstore_write_be_int(&netdev->xendev, "feature-rx-copy", 1);
diff --git a/include/net/net.h b/include/net/net.h
index 3559f3ca19..e5ba61cf8d 100644
--- a/include/net/net.h
+++ b/include/net/net.h
@@ -94,7 +94,7 @@ struct NetClientState {
     NetQueue *incoming_queue;
     char *model;
     char *name;
-    char *info_str;
+    char info_str[256];
     NetdevInfo *stored_config;
     unsigned receive_disabled : 1;
     NetClientDestructor *destructor;
diff --git a/net/l2tpv3.c b/net/l2tpv3.c
index 96611cb4af..8aa0a3e1a0 100644
--- a/net/l2tpv3.c
+++ b/net/l2tpv3.c
@@ -730,7 +730,8 @@ int net_init_l2tpv3(const Netdev *netdev,
     QAPI_CLONE_MEMBERS(NetdevL2TPv3Options,
                        &nc->stored_config->u.l2tpv3, l2tpv3);
 
-    s->nc.info_str = g_strdup_printf("l2tpv3: connected");
+    snprintf(s->nc.info_str, sizeof(s->nc.info_str),
+             "l2tpv3: connected");
     return 0;
 outerr:
     qemu_del_net_client(nc);
diff --git a/net/net.c b/net/net.c
index 277da712eb..9a2a6ab155 100644
--- a/net/net.c
+++ b/net/net.c
@@ -129,12 +129,11 @@ char *qemu_mac_strdup_printf(const uint8_t *macaddr)
 
 void qemu_format_nic_info_str(NetClientState *nc, uint8_t macaddr[6])
 {
-    g_free(nc->info_str);
-    nc->info_str = g_strdup_printf(
-        "model=%s,macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
-        nc->model,
-        macaddr[0], macaddr[1], macaddr[2],
-        macaddr[3], macaddr[4], macaddr[5]);
+    snprintf(nc->info_str, sizeof(nc->info_str),
+             "model=%s,macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
+             nc->model,
+             macaddr[0], macaddr[1], macaddr[2],
+             macaddr[3], macaddr[4], macaddr[5]);
 }
 
 static int mac_table[256] = {0};
@@ -353,7 +352,6 @@ static void qemu_free_net_client(NetClientState *nc)
     }
     g_free(nc->name);
     g_free(nc->model);
-    g_free(nc->info_str);
     qapi_free_NetdevInfo(nc->stored_config);
     if (nc->destructor) {
         nc->destructor(nc);
@@ -1228,7 +1226,7 @@ void print_net_client(Monitor *mon, NetClientState *nc)
     monitor_printf(mon, "%s: index=%d,type=%s,%s\n", nc->name,
                    nc->queue_index,
                    NetClientDriver_str(nc->info->type),
-                   nc->info_str ? nc->info_str : "");
+                   nc->info_str);
     if (!QTAILQ_EMPTY(&nc->filters)) {
         monitor_printf(mon, "filters:\n");
     }
diff --git a/net/slirp.c b/net/slirp.c
index 67f0f1d925..b3b979845e 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -674,8 +674,9 @@ static int net_slirp_init(NetClientState *peer, const char *model,
         stored->tftp_server_name = g_strdup(tftp_server_name);
     }
 
-    nc->info_str = g_strdup_printf("net=%s,restrict=%s", inet_ntoa(net),
-                                   restricted ? "on" : "off");
+    snprintf(nc->info_str, sizeof(nc->info_str),
+             "net=%s,restrict=%s", inet_ntoa(net),
+             restricted ? "on" : "off");
 
     s = DO_UPCAST(SlirpState, nc, nc);
 
diff --git a/net/socket.c b/net/socket.c
index 98172347d7..1614523b82 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -180,8 +180,7 @@ static void net_socket_send(void *opaque)
         s->fd = -1;
         net_socket_rs_init(&s->rs, net_socket_rs_finalize, false);
         s->nc.link_down = true;
-        g_free(s->nc.info_str);
-        s->nc.info_str = g_new0(char, 1);
+        memset(s->nc.info_str, 0, sizeof(s->nc.info_str));
 
         return;
     }
@@ -401,16 +400,16 @@ static NetSocketState *net_socket_fd_init_dgram(NetClientState *peer,
         stored->mcast = g_strdup(mcast);
 
         s->dgram_dst = saddr;
-        nc->info_str = g_strdup_printf("socket: fd=%d (cloned mcast=%s:%d)",
-                                       fd, inet_ntoa(saddr.sin_addr),
-                                       ntohs(saddr.sin_port));
+        snprintf(nc->info_str, sizeof(nc->info_str),
+                 "socket: fd=%d (cloned mcast=%s:%d)",
+                 fd, inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
     } else {
         if (sa_type == SOCKET_ADDRESS_TYPE_UNIX) {
             s->dgram_dst.sin_family = AF_UNIX;
         }
 
-        nc->info_str = g_strdup_printf("socket: fd=%d %s",
-                                       fd, SocketAddressType_str(sa_type));
+        snprintf(nc->info_str, sizeof(nc->info_str),
+                 "socket: fd=%d %s", fd, SocketAddressType_str(sa_type));
     }
 
     return s;
@@ -445,7 +444,7 @@ static NetSocketState *net_socket_fd_init_stream(NetClientState *peer,
 
     nc = qemu_new_net_client(&net_socket_info, peer, model, name);
 
-    nc->info_str = g_strdup_printf("socket: fd=%d", fd);
+    snprintf(nc->info_str, sizeof(nc->info_str), "socket: fd=%d", fd);
 
     s = DO_UPCAST(NetSocketState, nc, nc);
 
@@ -529,10 +528,9 @@ static void net_socket_accept(void *opaque)
     stored->has_fd = true;
     stored->fd = g_strdup_printf("%d", fd);
 
-    g_free(s->nc.info_str);
-    s->nc.info_str = g_strdup_printf("socket: connection from %s:%d",
-                                     inet_ntoa(saddr.sin_addr),
-                                     ntohs(saddr.sin_port));
+    snprintf(s->nc.info_str, sizeof(s->nc.info_str),
+             "socket: connection from %s:%d",
+             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
 }
 
 static int net_socket_listen_init(NetClientState *peer,
@@ -647,10 +645,9 @@ static int net_socket_connect_init(NetClientState *peer,
     stored->has_connect = true;
     stored->connect = g_strdup(host_str);
 
-    g_free(s->nc.info_str);
-    s->nc.info_str = g_strdup_printf("socket: connect to %s:%d",
-                                     inet_ntoa(saddr.sin_addr),
-                                     ntohs(saddr.sin_port));
+    snprintf(s->nc.info_str, sizeof(s->nc.info_str),
+             "socket: connect to %s:%d",
+             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
     return 0;
 }
 
@@ -707,10 +704,9 @@ static int net_socket_mcast_init(NetClientState *peer,
         stored->localaddr = g_strdup(localaddr_str);
     }
 
-    g_free(s->nc.info_str);
-    s->nc.info_str = g_strdup_printf("socket: mcast=%s:%d",
-                                     inet_ntoa(saddr.sin_addr),
-                                     ntohs(saddr.sin_port));
+    snprintf(s->nc.info_str, sizeof(s->nc.info_str),
+             "socket: mcast=%s:%d",
+             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
     return 0;
 
 }
@@ -773,10 +769,9 @@ static int net_socket_udp_init(NetClientState *peer,
     stored->has_udp = true;
     stored->udp = g_strdup(rhost);
 
-    g_free(s->nc.info_str);
-    s->nc.info_str = g_strdup_printf("socket: udp=%s:%d",
-                                     inet_ntoa(raddr.sin_addr),
-                                     ntohs(raddr.sin_port));
+    snprintf(s->nc.info_str, sizeof(s->nc.info_str),
+             "socket: udp=%s:%d",
+             inet_ntoa(raddr.sin_addr), ntohs(raddr.sin_port));
     return 0;
 }
 
diff --git a/net/tap-win32.c b/net/tap-win32.c
index 959266c658..2a2ba4f527 100644
--- a/net/tap-win32.c
+++ b/net/tap-win32.c
@@ -797,7 +797,8 @@ static int tap_win32_init(NetClientState *peer, const char *model,
     stored->has_ifname = true;
     stored->ifname = g_strdup(ifname);
 
-    s->nc.info_str = g_strdup_printf("tap: ifname=%s", ifname);
+    snprintf(s->nc.info_str, sizeof(s->nc.info_str),
+             "tap: ifname=%s", ifname);
 
     s->handle = handle;
 
diff --git a/net/tap.c b/net/tap.c
index 522ce7e487..35895192c5 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -635,7 +635,8 @@ int net_init_bridge(const Netdev *netdev, const char *name,
         stored->helper = g_strdup(helper);
     }
 
-    s->nc.info_str = g_strdup_printf("helper=%s,br=%s", helper, br);
+    snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=%s,br=%s", helper,
+             br);
 
     return 0;
 }
@@ -723,7 +724,7 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
             g_free(tmp_s);
         }
 
-        s->nc.info_str = g_strdup_printf("fd=%d", fd);
+        snprintf(s->nc.info_str, sizeof(s->nc.info_str), "fd=%d", fd);
     } else if (tap->has_helper) {
         if (!stored->has_helper) {
             stored->has_helper = true;
@@ -736,7 +737,8 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
                                        g_strdup(DEFAULT_BRIDGE_INTERFACE);
         }
 
-        s->nc.info_str = g_strdup_printf("helper=%s", tap->helper);
+        snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=%s",
+                 tap->helper);
     } else {
         if (ifname && !stored->has_ifname) {
             stored->has_ifname = true;
@@ -753,8 +755,9 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
             stored->downscript = g_strdup(downscript);
         }
 
-        s->nc.info_str = g_strdup_printf("ifname=%s,script=%s,downscript=%s",
-                                         ifname, script, downscript);
+        snprintf(s->nc.info_str, sizeof(s->nc.info_str),
+                 "ifname=%s,script=%s,downscript=%s", ifname, script,
+                 downscript);
 
         if (strcmp(downscript, "no") != 0) {
             snprintf(s->down_script, sizeof(s->down_script), "%s", downscript);
diff --git a/net/vde.c b/net/vde.c
index 67de6eb0c5..b0b8800571 100644
--- a/net/vde.c
+++ b/net/vde.c
@@ -100,7 +100,8 @@ static int net_vde_init(NetClientState *peer, const char *model,
 
     nc = qemu_new_net_client(&net_vde_info, peer, model, name);
 
-    nc->info_str = g_strdup_printf("sock=%s,fd=%d", sock, vde_datafd(vde));
+    snprintf(nc->info_str, sizeof(nc->info_str), "sock=%s,fd=%d",
+             sock, vde_datafd(vde));
 
     s = DO_UPCAST(VDEState, nc, nc);
 
diff --git a/net/vhost-user.c b/net/vhost-user.c
index 49c9a740c2..5b7056be25 100644
--- a/net/vhost-user.c
+++ b/net/vhost-user.c
@@ -327,7 +327,8 @@ static int net_vhost_user_init(NetClientState *peer, const char *device,
     user = g_new0(struct VhostUserState, 1);
     for (i = 0; i < queues; i++) {
         nc = qemu_new_net_client(&net_vhost_user_info, peer, device, name);
-        nc->info_str = g_strdup_printf("vhost-user%d to %s", i, chr->label);
+        snprintf(nc->info_str, sizeof(nc->info_str), "vhost-user%d to %s",
+                 i, chr->label);
         nc->queue_index = i;
         if (!nc0) {
             nc0 = nc;
diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
index 423d71770d..8c27ea0142 100644
--- a/net/vhost-vdpa.c
+++ b/net/vhost-vdpa.c
@@ -200,7 +200,7 @@ static int net_vhost_vdpa_init(NetClientState *peer, const char *device,
     stored->has_queues = true;
     stored->queues = 1; /* TODO: change when support multiqueue */
 
-    nc->info_str = g_strdup_printf(TYPE_VHOST_VDPA);
+    snprintf(nc->info_str, sizeof(nc->info_str), TYPE_VHOST_VDPA);
     nc->queue_index = 0;
     s = DO_UPCAST(VhostVDPAState, nc, nc);
     vdpa_device_fd = qemu_open_old(vhostdev, O_RDWR);
-- 
2.24.3 (Apple Git-128)



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/5] Revert "tests: Add tests for query-netdev command"
  2021-04-02  8:15 [PATCH 0/5] Revert query-netdev command for 6.0 Jason Wang
                   ` (2 preceding siblings ...)
  2021-04-02  8:15 ` [PATCH 3/5] Revert "net: Move NetClientState.info_str to dynamic allocations" Jason Wang
@ 2021-04-02  8:15 ` Jason Wang
  2021-04-02  8:15 ` [PATCH 5/5] Revert "qapi: net: Add " Jason Wang
  2021-04-06  4:05 ` [PATCH 0/5] Revert query-netdev command for 6.0 Jason Wang
  5 siblings, 0 replies; 8+ messages in thread
From: Jason Wang @ 2021-04-02  8:15 UTC (permalink / raw)
  To: qemu-devel, lekiravi; +Cc: Jason Wang

Several issues has been reported for query-netdev series. Consider
it's late in the rc, this reverts commitThis reverts commit
3c3b656885473ef0d699290ba966177f17839aa5.

Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 tests/qtest/meson.build         |   3 -
 tests/qtest/test-query-netdev.c | 120 --------------------------------
 2 files changed, 123 deletions(-)
 delete mode 100644 tests/qtest/test-query-netdev.c

diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build
index 902cfef7cb..420cd9986e 100644
--- a/tests/qtest/meson.build
+++ b/tests/qtest/meson.build
@@ -33,9 +33,6 @@ qtests_generic = \
 if config_host.has_key('CONFIG_MODULES')
   qtests_generic += [ 'modules-test' ]
 endif
-if slirp.found()
-  qtests_generic += [ 'test-query-netdev' ]
-endif
 
 qtests_pci = \
   (config_all_devices.has_key('CONFIG_VGA') ? ['display-vga-test'] : []) +                  \
diff --git a/tests/qtest/test-query-netdev.c b/tests/qtest/test-query-netdev.c
deleted file mode 100644
index 1118537a9f..0000000000
--- a/tests/qtest/test-query-netdev.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * QTest testcase for the query-netdev
- *
- * Copyright Yandex N.V., 2019
- *
- * 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 "libqos/libqtest.h"
-#include "qapi/qmp/qdict.h"
-#include "qapi/qmp/qlist.h"
-
-/*
- * Events can get in the way of responses we are actually waiting for.
- */
-GCC_FMT_ATTR(2, 3)
-static QObject *wait_command(QTestState *who, const char *command, ...)
-{
-    va_list ap;
-    QDict *response;
-    QObject *result;
-
-    va_start(ap, command);
-    qtest_qmp_vsend(who, command, ap);
-    va_end(ap);
-
-    response = qtest_qmp_receive(who);
-
-    result = qdict_get(response, "return");
-    g_assert(result);
-    qobject_ref(result);
-    qobject_unref(response);
-
-    return result;
-}
-
-static void qmp_query_netdev_no_error(QTestState *qts, size_t netdevs_count)
-{
-    QObject *resp;
-    QList *netdevs;
-
-    resp = wait_command(qts, "{'execute': 'query-netdev'}");
-
-    netdevs = qobject_to(QList, resp);
-    g_assert(netdevs);
-    g_assert(qlist_size(netdevs) == netdevs_count);
-
-    qobject_unref(resp);
-}
-
-static void test_query_netdev(void)
-{
-    const char *arch = qtest_get_arch();
-    QObject *resp;
-    QTestState *state;
-
-    /* Choosing machine for platforms without default one */
-    if (g_str_equal(arch, "arm") ||
-        g_str_equal(arch, "aarch64")) {
-        state = qtest_init(
-            "-nodefaults "
-            "-M virt "
-            "-netdev user,id=slirp0");
-    } else if (g_str_equal(arch, "tricore")) {
-        state = qtest_init(
-            "-nodefaults "
-            "-M tricore_testboard "
-            "-netdev user,id=slirp0");
-    } else if (g_str_equal(arch, "avr")) {
-        state = qtest_init(
-            "-nodefaults "
-            "-M mega2560 "
-            "-netdev user,id=slirp0");
-    } else if (g_str_equal(arch, "rx")) {
-        state = qtest_init(
-            "-nodefaults "
-            "-M gdbsim-r5f562n8 "
-            "-netdev user,id=slirp0");
-    } else {
-        state = qtest_init(
-            "-nodefaults "
-            "-netdev user,id=slirp0");
-    }
-    g_assert(state);
-
-    qmp_query_netdev_no_error(state, 1);
-
-    resp = wait_command(state,
-        "{'execute': 'netdev_add', 'arguments': {"
-        " 'id': 'slirp1',"
-        " 'type': 'user'}}");
-    qobject_unref(resp);
-
-    qmp_query_netdev_no_error(state, 2);
-
-    resp = wait_command(state,
-        "{'execute': 'netdev_del', 'arguments': {"
-        " 'id': 'slirp1'}}");
-    qobject_unref(resp);
-
-    qmp_query_netdev_no_error(state, 1);
-
-    qtest_quit(state);
-}
-
-int main(int argc, char **argv)
-{
-    int ret = 0;
-    g_test_init(&argc, &argv, NULL);
-
-    qtest_add_func("/net/qapi/query_netdev", test_query_netdev);
-
-    ret = g_test_run();
-
-    return ret;
-}
-- 
2.24.3 (Apple Git-128)



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 5/5] Revert "qapi: net: Add query-netdev command"
  2021-04-02  8:15 [PATCH 0/5] Revert query-netdev command for 6.0 Jason Wang
                   ` (3 preceding siblings ...)
  2021-04-02  8:15 ` [PATCH 4/5] Revert "tests: Add tests for query-netdev command" Jason Wang
@ 2021-04-02  8:15 ` Jason Wang
  2021-04-06  4:05 ` [PATCH 0/5] Revert query-netdev command for 6.0 Jason Wang
  5 siblings, 0 replies; 8+ messages in thread
From: Jason Wang @ 2021-04-02  8:15 UTC (permalink / raw)
  To: qemu-devel, lekiravi; +Cc: Jason Wang

Several issues has been reported for query-netdev series. Consider
it's late in the rc, this reverts commitThis reverts commit
d32ad10a14d46dfe9304e3ed5858a11dcd5c71a0.

Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 include/net/net.h |   3 --
 net/l2tpv3.c      |   7 ---
 net/net.c         |  30 +-----------
 net/netmap.c      |   7 ---
 net/slirp.c       | 122 ----------------------------------------------
 net/socket.c      |  71 ---------------------------
 net/tap-win32.c   |   9 ----
 net/tap.c         | 103 ++------------------------------------
 net/vde.c         |  22 ---------
 net/vhost-user.c  |  18 ++-----
 net/vhost-vdpa.c  |  14 ------
 qapi/net.json     |  80 ------------------------------
 12 files changed, 9 insertions(+), 477 deletions(-)

diff --git a/include/net/net.h b/include/net/net.h
index e5ba61cf8d..eff24519d2 100644
--- a/include/net/net.h
+++ b/include/net/net.h
@@ -5,8 +5,6 @@
 #include "qapi/qapi-types-net.h"
 #include "net/queue.h"
 #include "hw/qdev-properties-system.h"
-#include "qapi/clone-visitor.h"
-#include "qapi/qapi-visit-net.h"
 
 #define MAC_FMT "%02X:%02X:%02X:%02X:%02X:%02X"
 #define MAC_ARG(x) ((uint8_t *)(x))[0], ((uint8_t *)(x))[1], \
@@ -95,7 +93,6 @@ struct NetClientState {
     char *model;
     char *name;
     char info_str[256];
-    NetdevInfo *stored_config;
     unsigned receive_disabled : 1;
     NetClientDestructor *destructor;
     unsigned int queue_index;
diff --git a/net/l2tpv3.c b/net/l2tpv3.c
index 8aa0a3e1a0..e4d4218db6 100644
--- a/net/l2tpv3.c
+++ b/net/l2tpv3.c
@@ -723,13 +723,6 @@ int net_init_l2tpv3(const Netdev *netdev,
 
     l2tpv3_read_poll(s, true);
 
-    /* Store startup parameters */
-    nc->stored_config = g_new0(NetdevInfo, 1);
-    nc->stored_config->type = NET_BACKEND_L2TPV3;
-
-    QAPI_CLONE_MEMBERS(NetdevL2TPv3Options,
-                       &nc->stored_config->u.l2tpv3, l2tpv3);
-
     snprintf(s->nc.info_str, sizeof(s->nc.info_str),
              "l2tpv3: connected");
     return 0;
diff --git a/net/net.c b/net/net.c
index 9a2a6ab155..edf9b95418 100644
--- a/net/net.c
+++ b/net/net.c
@@ -36,6 +36,7 @@
 #include "monitor/monitor.h"
 #include "qemu/help_option.h"
 #include "qapi/qapi-commands-net.h"
+#include "qapi/qapi-visit-net.h"
 #include "qapi/qmp/qdict.h"
 #include "qapi/qmp/qerror.h"
 #include "qemu/error-report.h"
@@ -352,7 +353,6 @@ static void qemu_free_net_client(NetClientState *nc)
     }
     g_free(nc->name);
     g_free(nc->model);
-    qapi_free_NetdevInfo(nc->stored_config);
     if (nc->destructor) {
         nc->destructor(nc);
     }
@@ -1289,34 +1289,6 @@ RxFilterInfoList *qmp_query_rx_filter(bool has_name, const char *name,
     return filter_list;
 }
 
-NetdevInfoList *qmp_query_netdev(Error **errp)
-{
-    NetdevInfoList *list = NULL;
-    NetClientState *nc;
-
-    QTAILQ_FOREACH(nc, &net_clients, next) {
-        /*
-         * Only look at netdevs (backend network devices), not for each queue
-         * or NIC / hubport
-         */
-        if (nc->stored_config) {
-            NetdevInfo *element = QAPI_CLONE(NetdevInfo, nc->stored_config);
-
-            g_free(element->id); /* Need to dealloc empty id after clone */
-            element->id = g_strdup(nc->name);
-
-            element->has_peer_id = nc->peer != NULL;
-            if (element->has_peer_id) {
-                element->peer_id = g_strdup(nc->peer->name);
-            }
-
-            QAPI_LIST_PREPEND(list, element);
-        }
-    }
-
-    return list;
-}
-
 void hmp_info_network(Monitor *mon, const QDict *qdict)
 {
     NetClientState *nc, *peer;
diff --git a/net/netmap.c b/net/netmap.c
index ad59d4ade4..350f097f91 100644
--- a/net/netmap.c
+++ b/net/netmap.c
@@ -427,13 +427,6 @@ int net_init_netmap(const Netdev *netdev,
     pstrcpy(s->ifname, sizeof(s->ifname), netmap_opts->ifname);
     netmap_read_poll(s, true); /* Initially only poll for reads. */
 
-    /* Store startup parameters */
-    nc->stored_config = g_new0(NetdevInfo, 1);
-    nc->stored_config->type = NET_BACKEND_NETMAP;
-
-    QAPI_CLONE_MEMBERS(NetdevNetmapOptions,
-                       &nc->stored_config->u.netmap, netmap_opts);
-
     return 0;
 }
 
diff --git a/net/slirp.c b/net/slirp.c
index b3b979845e..a01a0fccd3 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -387,9 +387,6 @@ static int net_slirp_init(NetClientState *peer, const char *model,
     int shift;
     char *end;
     struct slirp_config_str *config;
-    NetdevUserOptions *stored;
-    StringList **stored_hostfwd;
-    StringList **stored_guestfwd;
 
     if (!ipv4 && (vnetwork || vhost || vnameserver)) {
         error_setg(errp, "IPv4 disabled but netmask/host/dns provided");
@@ -565,115 +562,6 @@ static int net_slirp_init(NetClientState *peer, const char *model,
 
     nc = qemu_new_net_client(&net_slirp_info, peer, model, name);
 
-    /* Store startup parameters */
-    nc->stored_config = g_new0(NetdevInfo, 1);
-    nc->stored_config->type = NET_BACKEND_USER;
-    stored = &nc->stored_config->u.user;
-
-    if (vhostname) {
-        stored->has_hostname = true;
-        stored->hostname = g_strdup(vhostname);
-    }
-
-    stored->has_q_restrict = true;
-    stored->q_restrict = restricted;
-
-    stored->has_ipv4 = true;
-    stored->ipv4 = ipv4;
-
-    stored->has_ipv6 = true;
-    stored->ipv6 = ipv6;
-
-    if (ipv4) {
-        uint8_t *net_bytes = (uint8_t *)&net;
-        uint8_t *mask_bytes = (uint8_t *)&mask;
-
-        stored->has_net = true;
-        stored->net = g_strdup_printf("%d.%d.%d.%d/%d.%d.%d.%d",
-                                      net_bytes[0], net_bytes[1],
-                                      net_bytes[2], net_bytes[3],
-                                      mask_bytes[0], mask_bytes[1],
-                                      mask_bytes[2], mask_bytes[3]);
-
-        stored->has_host = true;
-        stored->host = g_strdup(inet_ntoa(host));
-    }
-
-    if (tftp_export) {
-        stored->has_tftp = true;
-        stored->tftp = g_strdup(tftp_export);
-    }
-
-    if (bootfile) {
-        stored->has_bootfile = true;
-        stored->bootfile = g_strdup(bootfile);
-    }
-
-    if (vdhcp_start) {
-        stored->has_dhcpstart = true;
-        stored->dhcpstart = g_strdup(vdhcp_start);
-    }
-
-    if (ipv4) {
-        stored->has_dns = true;
-        stored->dns = g_strdup(inet_ntoa(dns));
-    }
-
-    if (dnssearch) {
-        stored->has_dnssearch = true;
-        StringList **stored_list = &stored->dnssearch;
-
-        for (int i = 0; dnssearch[i]; i++) {
-            String *element = g_new0(String, 1);
-
-            element->str = g_strdup(dnssearch[i]);
-            QAPI_LIST_APPEND(stored_list, element);
-        }
-    }
-
-    if (vdomainname) {
-        stored->has_domainname = true;
-        stored->domainname = g_strdup(vdomainname);
-    }
-
-    if (ipv6) {
-        char addrstr[INET6_ADDRSTRLEN];
-        const char *res;
-
-        stored->has_ipv6_prefix = true;
-        stored->ipv6_prefix = g_strdup(vprefix6);
-
-        stored->has_ipv6_prefixlen = true;
-        stored->ipv6_prefixlen = vprefix6_len;
-
-        res = inet_ntop(AF_INET6, &ip6_host,
-                        addrstr, sizeof(addrstr));
-
-        stored->has_ipv6_host = true;
-        stored->ipv6_host = g_strdup(res);
-
-        res = inet_ntop(AF_INET6, &ip6_dns,
-                        addrstr, sizeof(addrstr));
-
-        stored->has_ipv6_dns = true;
-        stored->ipv6_dns = g_strdup(res);
-    }
-
-    if (smb_export) {
-        stored->has_smb = true;
-        stored->smb = g_strdup(smb_export);
-    }
-
-    if (vsmbserver) {
-        stored->has_smbserver = true;
-        stored->smbserver = g_strdup(vsmbserver);
-    }
-
-    if (tftp_server_name) {
-        stored->has_tftp_server_name = true;
-        stored->tftp_server_name = g_strdup(tftp_server_name);
-    }
-
     snprintf(nc->info_str, sizeof(nc->info_str),
              "net=%s,restrict=%s", inet_ntoa(net),
              restricted ? "on" : "off");
@@ -703,25 +591,15 @@ static int net_slirp_init(NetClientState *peer, const char *model,
     s->poll_notifier.notify = net_slirp_poll_notify;
     main_loop_poll_add_notifier(&s->poll_notifier);
 
-    stored_hostfwd = &stored->hostfwd;
-    stored_guestfwd = &stored->guestfwd;
-
     for (config = slirp_configs; config; config = config->next) {
-        String *element = g_new0(String, 1);
-
-        element->str = g_strdup(config->str);
         if (config->flags & SLIRP_CFG_HOSTFWD) {
             if (slirp_hostfwd(s, config->str, errp) < 0) {
                 goto error;
             }
-            stored->has_hostfwd = true;
-            QAPI_LIST_APPEND(stored_hostfwd, element);
         } else {
             if (slirp_guestfwd(s, config->str, errp) < 0) {
                 goto error;
             }
-            stored->has_guestfwd = true;
-            QAPI_LIST_APPEND(stored_guestfwd, element);
         }
     }
 #ifndef _WIN32
diff --git a/net/socket.c b/net/socket.c
index 1614523b82..15b410e8d8 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -342,7 +342,6 @@ static NetSocketState *net_socket_fd_init_dgram(NetClientState *peer,
     NetSocketState *s;
     SocketAddress *sa;
     SocketAddressType sa_type;
-    NetdevSocketOptions *stored;
 
     sa = socket_local_address(fd, errp);
     if (!sa) {
@@ -386,19 +385,8 @@ static NetSocketState *net_socket_fd_init_dgram(NetClientState *peer,
     net_socket_rs_init(&s->rs, net_socket_rs_finalize, false);
     net_socket_read_poll(s, true);
 
-    /* Store startup parameters */
-    nc->stored_config = g_new0(NetdevInfo, 1);
-    nc->stored_config->type = NET_BACKEND_SOCKET;
-    stored = &nc->stored_config->u.socket;
-
-    stored->has_fd = true;
-    stored->fd = g_strdup_printf("%d", fd);
-
     /* mcast: save bound address as dst */
     if (is_connected && mcast != NULL) {
-        stored->has_mcast = true;
-        stored->mcast = g_strdup(mcast);
-
         s->dgram_dst = saddr;
         snprintf(nc->info_str, sizeof(nc->info_str),
                  "socket: fd=%d (cloned mcast=%s:%d)",
@@ -440,7 +428,6 @@ static NetSocketState *net_socket_fd_init_stream(NetClientState *peer,
 {
     NetClientState *nc;
     NetSocketState *s;
-    NetdevSocketOptions *stored;
 
     nc = qemu_new_net_client(&net_socket_info, peer, model, name);
 
@@ -460,15 +447,6 @@ static NetSocketState *net_socket_fd_init_stream(NetClientState *peer,
     } else {
         qemu_set_fd_handler(s->fd, NULL, net_socket_connect, s);
     }
-
-    /* Store startup parameters */
-    nc->stored_config = g_new0(NetdevInfo, 1);
-    nc->stored_config->type = NET_BACKEND_SOCKET;
-    stored = &nc->stored_config->u.socket;
-
-    stored->has_fd = true;
-    stored->fd = g_strdup_printf("%d", fd);
-
     return s;
 }
 
@@ -505,7 +483,6 @@ static void net_socket_accept(void *opaque)
     struct sockaddr_in saddr;
     socklen_t len;
     int fd;
-    NetdevSocketOptions *stored;
 
     for(;;) {
         len = sizeof(saddr);
@@ -521,13 +498,6 @@ static void net_socket_accept(void *opaque)
     s->fd = fd;
     s->nc.link_down = false;
     net_socket_connect(s);
-
-    /* Store additional startup parameters (extend net_socket_listen_init) */
-    stored = &s->nc.stored_config->u.socket;
-
-    stored->has_fd = true;
-    stored->fd = g_strdup_printf("%d", fd);
-
     snprintf(s->nc.info_str, sizeof(s->nc.info_str),
              "socket: connection from %s:%d",
              inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
@@ -543,7 +513,6 @@ static int net_socket_listen_init(NetClientState *peer,
     NetSocketState *s;
     struct sockaddr_in saddr;
     int fd, ret;
-    NetdevSocketOptions *stored;
 
     if (parse_host_port(&saddr, host_str, errp) < 0) {
         return -1;
@@ -580,15 +549,6 @@ static int net_socket_listen_init(NetClientState *peer,
     net_socket_rs_init(&s->rs, net_socket_rs_finalize, false);
 
     qemu_set_fd_handler(s->listen_fd, net_socket_accept, NULL, s);
-
-    /* Store startup parameters */
-    nc->stored_config = g_new0(NetdevInfo, 1);
-    nc->stored_config->type = NET_BACKEND_SOCKET;
-    stored = &nc->stored_config->u.socket;
-
-    stored->has_listen = true;
-    stored->listen = g_strdup(host_str);
-
     return 0;
 }
 
@@ -601,7 +561,6 @@ static int net_socket_connect_init(NetClientState *peer,
     NetSocketState *s;
     int fd, connected, ret;
     struct sockaddr_in saddr;
-    NetdevSocketOptions *stored;
 
     if (parse_host_port(&saddr, host_str, errp) < 0) {
         return -1;
@@ -639,12 +598,6 @@ static int net_socket_connect_init(NetClientState *peer,
         return -1;
     }
 
-    /* Store additional startup parameters (extend net_socket_fd_init) */
-    stored = &s->nc.stored_config->u.socket;
-
-    stored->has_connect = true;
-    stored->connect = g_strdup(host_str);
-
     snprintf(s->nc.info_str, sizeof(s->nc.info_str),
              "socket: connect to %s:%d",
              inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
@@ -662,7 +615,6 @@ static int net_socket_mcast_init(NetClientState *peer,
     int fd;
     struct sockaddr_in saddr;
     struct in_addr localaddr, *param_localaddr;
-    NetdevSocketOptions *stored;
 
     if (parse_host_port(&saddr, host_str, errp) < 0) {
         return -1;
@@ -691,19 +643,6 @@ static int net_socket_mcast_init(NetClientState *peer,
 
     s->dgram_dst = saddr;
 
-    /* Store additional startup parameters (extend net_socket_fd_init) */
-    stored = &s->nc.stored_config->u.socket;
-
-    if (!stored->has_mcast) {
-        stored->has_mcast = true;
-        stored->mcast = g_strdup(host_str);
-    }
-
-    if (localaddr_str) {
-        stored->has_localaddr = true;
-        stored->localaddr = g_strdup(localaddr_str);
-    }
-
     snprintf(s->nc.info_str, sizeof(s->nc.info_str),
              "socket: mcast=%s:%d",
              inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
@@ -721,7 +660,6 @@ static int net_socket_udp_init(NetClientState *peer,
     NetSocketState *s;
     int fd, ret;
     struct sockaddr_in laddr, raddr;
-    NetdevSocketOptions *stored;
 
     if (parse_host_port(&laddr, lhost, errp) < 0) {
         return -1;
@@ -760,15 +698,6 @@ static int net_socket_udp_init(NetClientState *peer,
 
     s->dgram_dst = raddr;
 
-    /* Store additional startup parameters (extend net_socket_fd_init) */
-    stored = &s->nc.stored_config->u.socket;
-
-    stored->has_localaddr = true;
-    stored->localaddr = g_strdup(lhost);
-
-    stored->has_udp = true;
-    stored->udp = g_strdup(rhost);
-
     snprintf(s->nc.info_str, sizeof(s->nc.info_str),
              "socket: udp=%s:%d",
              inet_ntoa(raddr.sin_addr), ntohs(raddr.sin_port));
diff --git a/net/tap-win32.c b/net/tap-win32.c
index 2a2ba4f527..fb92b55768 100644
--- a/net/tap-win32.c
+++ b/net/tap-win32.c
@@ -778,7 +778,6 @@ static int tap_win32_init(NetClientState *peer, const char *model,
     NetClientState *nc;
     TAPState *s;
     tap_win32_overlapped_t *handle;
-    NetdevTapOptions *stored;
 
     if (tap_win32_open(&handle, ifname) < 0) {
         printf("tap: Could not open '%s'\n", ifname);
@@ -789,14 +788,6 @@ static int tap_win32_init(NetClientState *peer, const char *model,
 
     s = DO_UPCAST(TAPState, nc, nc);
 
-    /* Store startup parameters */
-    nc->stored_config = g_new0(NetdevInfo, 1);
-    nc->stored_config->type = NET_BACKEND_TAP;
-    stored = &nc->stored_config->u.tap;
-
-    stored->has_ifname = true;
-    stored->ifname = g_strdup(ifname);
-
     snprintf(s->nc.info_str, sizeof(s->nc.info_str),
              "tap: ifname=%s", ifname);
 
diff --git a/net/tap.c b/net/tap.c
index 35895192c5..dd42ac6134 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -600,7 +600,6 @@ int net_init_bridge(const Netdev *netdev, const char *name,
     const char *helper, *br;
     TAPState *s;
     int fd, vnet_hdr;
-    NetdevBridgeOptions *stored;
 
     assert(netdev->type == NET_CLIENT_DRIVER_BRIDGE);
     bridge = &netdev->u.bridge;
@@ -620,21 +619,6 @@ int net_init_bridge(const Netdev *netdev, const char *name,
     }
     s = net_tap_fd_init(peer, "bridge", name, fd, vnet_hdr);
 
-    /* Store startup parameters */
-    s->nc.stored_config = g_new0(NetdevInfo, 1);
-    s->nc.stored_config->type = NET_BACKEND_BRIDGE;
-    stored = &s->nc.stored_config->u.bridge;
-
-    if (br) {
-        stored->has_br = true;
-        stored->br = g_strdup(br);
-    }
-
-    if (helper) {
-        stored->has_helper = true;
-        stored->helper = g_strdup(helper);
-    }
-
     snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=%s,br=%s", helper,
              br);
 
@@ -682,13 +666,11 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
                              const char *model, const char *name,
                              const char *ifname, const char *script,
                              const char *downscript, const char *vhostfdname,
-                             int vnet_hdr, int fd, NetdevInfo **common_stored,
-                             Error **errp)
+                             int vnet_hdr, int fd, Error **errp)
 {
     Error *err = NULL;
     TAPState *s = net_tap_fd_init(peer, model, name, fd, vnet_hdr);
     int vhostfd;
-    NetdevTapOptions *stored;
 
     tap_set_sndbuf(s->fd, tap, &err);
     if (err) {
@@ -696,65 +678,12 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
         return;
     }
 
-    /* Store startup parameters */
-    if (!*common_stored) {
-        *common_stored = g_new0(NetdevInfo, 1);
-        (*common_stored)->type = NET_BACKEND_TAP;
-        s->nc.stored_config = *common_stored;
-    }
-    stored = &(*common_stored)->u.tap;
-
-    if (tap->has_sndbuf && !stored->has_sndbuf) {
-        stored->has_sndbuf = true;
-        stored->sndbuf = tap->sndbuf;
-    }
-
-    if (vnet_hdr && !stored->has_vnet_hdr) {
-        stored->has_vnet_hdr = true;
-        stored->vnet_hdr = true;
-    }
-
     if (tap->has_fd || tap->has_fds) {
-        if (!stored->has_fds) {
-            stored->has_fds = true;
-            stored->fds = g_strdup_printf("%d", fd);
-        } else {
-            char *tmp_s = stored->fds;
-            stored->fds = g_strdup_printf("%s:%d", stored->fds, fd);
-            g_free(tmp_s);
-        }
-
         snprintf(s->nc.info_str, sizeof(s->nc.info_str), "fd=%d", fd);
     } else if (tap->has_helper) {
-        if (!stored->has_helper) {
-            stored->has_helper = true;
-            stored->helper = g_strdup(tap->helper);
-        }
-
-        if (!stored->has_br) {
-            stored->has_br = true;
-            stored->br = tap->has_br ? g_strdup(tap->br) :
-                                       g_strdup(DEFAULT_BRIDGE_INTERFACE);
-        }
-
         snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=%s",
                  tap->helper);
     } else {
-        if (ifname && !stored->has_ifname) {
-            stored->has_ifname = true;
-            stored->ifname = g_strdup(ifname);
-        }
-
-        if (script && !stored->has_script) {
-            stored->has_script = true;
-            stored->script = g_strdup(script);
-        }
-
-        if (downscript && !stored->has_downscript) {
-            stored->has_downscript = true;
-            stored->downscript = g_strdup(downscript);
-        }
-
         snprintf(s->nc.info_str, sizeof(s->nc.info_str),
                  "ifname=%s,script=%s,downscript=%s", ifname, script,
                  downscript);
@@ -770,20 +699,9 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
         vhostfdname || (tap->has_vhostforce && tap->vhostforce)) {
         VhostNetOptions options;
 
-        stored->has_vhost = true;
-        stored->vhost = true;
-
-        if (tap->has_vhostforce && tap->vhostforce) {
-            stored->has_vhostforce = true;
-            stored->vhostforce = true;
-        }
-
         options.backend_type = VHOST_BACKEND_TYPE_KERNEL;
         options.net_backend = &s->nc;
         if (tap->has_poll_us) {
-            stored->has_poll_us = true;
-            stored->poll_us = tap->poll_us;
-
             options.busyloop_timeout = tap->poll_us;
         } else {
             options.busyloop_timeout = 0;
@@ -823,15 +741,6 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
         }
         options.opaque = (void *)(uintptr_t)vhostfd;
 
-        if (!stored->has_vhostfds) {
-            stored->has_vhostfds = true;
-            stored->vhostfds = g_strdup_printf("%d", vhostfd);
-        } else {
-            char *tmp_s = stored->vhostfds;
-            stored->vhostfds = g_strdup_printf("%s:%d", stored->fds, vhostfd);
-            g_free(tmp_s);
-        }
-
         s->vhost_net = vhost_net_init(&options);
         if (!s->vhost_net) {
             if (tap->has_vhostforce && tap->vhostforce) {
@@ -884,7 +793,6 @@ int net_init_tap(const Netdev *netdev, const char *name,
     const char *vhostfdname;
     char ifname[128];
     int ret = 0;
-    NetdevInfo *common_stored = NULL; /* will store configuration */
 
     assert(netdev->type == NET_CLIENT_DRIVER_TAP);
     tap = &netdev->u.tap;
@@ -931,7 +839,7 @@ int net_init_tap(const Netdev *netdev, const char *name,
 
         net_init_tap_one(tap, peer, "tap", name, NULL,
                          script, downscript,
-                         vhostfdname, vnet_hdr, fd, &common_stored, &err);
+                         vhostfdname, vnet_hdr, fd, &err);
         if (err) {
             error_propagate(errp, err);
             close(fd);
@@ -994,7 +902,7 @@ int net_init_tap(const Netdev *netdev, const char *name,
             net_init_tap_one(tap, peer, "tap", name, ifname,
                              script, downscript,
                              tap->has_vhostfds ? vhost_fds[i] : NULL,
-                             vnet_hdr, fd, &common_stored, &err);
+                             vnet_hdr, fd, &err);
             if (err) {
                 error_propagate(errp, err);
                 ret = -1;
@@ -1037,7 +945,7 @@ free_fail:
 
         net_init_tap_one(tap, peer, "bridge", name, ifname,
                          script, downscript, vhostfdname,
-                         vnet_hdr, fd, &common_stored, &err);
+                         vnet_hdr, fd, &err);
         if (err) {
             error_propagate(errp, err);
             close(fd);
@@ -1083,8 +991,7 @@ free_fail:
             net_init_tap_one(tap, peer, "tap", name, ifname,
                              i >= 1 ? "no" : script,
                              i >= 1 ? "no" : downscript,
-                             vhostfdname, vnet_hdr, fd,
-                             &common_stored, &err);
+                             vhostfdname, vnet_hdr, fd, &err);
             if (err) {
                 error_propagate(errp, err);
                 close(fd);
diff --git a/net/vde.c b/net/vde.c
index b0b8800571..99189cccb6 100644
--- a/net/vde.c
+++ b/net/vde.c
@@ -84,7 +84,6 @@ static int net_vde_init(NetClientState *peer, const char *model,
     VDECONN *vde;
     char *init_group = (char *)group;
     char *init_sock = (char *)sock;
-    NetdevVdeOptions *stored;
 
     struct vde_open_args args = {
         .port = port,
@@ -109,27 +108,6 @@ static int net_vde_init(NetClientState *peer, const char *model,
 
     qemu_set_fd_handler(vde_datafd(s->vde), vde_to_qemu, NULL, s);
 
-    /* Store startup parameters */
-    nc->stored_config = g_new0(NetdevInfo, 1);
-    nc->stored_config->type = NET_BACKEND_VDE;
-    stored = &nc->stored_config->u.vde;
-
-    if (sock) {
-        stored->has_sock = true;
-        stored->sock = g_strdup(sock);
-    }
-
-    stored->has_port = true;
-    stored->port = port;
-
-    if (group) {
-        stored->has_group = true;
-        stored->group = g_strdup(group);
-    }
-
-    stored->has_mode = true;
-    stored->mode = mode;
-
     return 0;
 }
 
diff --git a/net/vhost-user.c b/net/vhost-user.c
index 5b7056be25..ffbd94d944 100644
--- a/net/vhost-user.c
+++ b/net/vhost-user.c
@@ -311,15 +311,14 @@ static void net_vhost_user_event(void *opaque, QEMUChrEvent event)
 }
 
 static int net_vhost_user_init(NetClientState *peer, const char *device,
-                               const char *name, const char *chardev,
-                               Chardev *chr, int queues)
+                               const char *name, Chardev *chr,
+                               int queues)
 {
     Error *err = NULL;
     NetClientState *nc, *nc0 = NULL;
     NetVhostUserState *s = NULL;
     VhostUserState *user;
     int i;
-    NetdevVhostUserOptions *stored;
 
     assert(name);
     assert(queues > 0);
@@ -356,16 +355,6 @@ static int net_vhost_user_init(NetClientState *peer, const char *device,
 
     assert(s->vhost_net);
 
-    /* Store startup parameters */
-    nc0->stored_config = g_new0(NetdevInfo, 1);
-    nc0->stored_config->type = NET_BACKEND_VHOST_USER;
-    stored = &nc0->stored_config->u.vhost_user;
-
-    stored->chardev = g_strdup(chardev);
-
-    stored->has_queues = true;
-    stored->queues = queues;
-
     return 0;
 
 err:
@@ -457,6 +446,5 @@ int net_init_vhost_user(const Netdev *netdev, const char *name,
         return -1;
     }
 
-    return net_vhost_user_init(peer, "vhost_user", name,
-                               vhost_user_opts->chardev, chr, queues);
+    return net_vhost_user_init(peer, "vhost_user", name, chr, queues);
 }
diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
index 8c27ea0142..fe659ec9e2 100644
--- a/net/vhost-vdpa.c
+++ b/net/vhost-vdpa.c
@@ -184,22 +184,8 @@ static int net_vhost_vdpa_init(NetClientState *peer, const char *device,
     VhostVDPAState *s;
     int vdpa_device_fd = -1;
     int ret = 0;
-    NetdevVhostVDPAOptions *stored;
-
     assert(name);
     nc = qemu_new_net_client(&net_vhost_vdpa_info, peer, device, name);
-
-    /* Store startup parameters */
-    nc->stored_config = g_new0(NetdevInfo, 1);
-    nc->stored_config->type = NET_BACKEND_VHOST_VDPA;
-    stored = &nc->stored_config->u.vhost_vdpa;
-
-    stored->has_vhostdev = true;
-    stored->vhostdev = g_strdup(vhostdev);
-
-    stored->has_queues = true;
-    stored->queues = 1; /* TODO: change when support multiqueue */
-
     snprintf(nc->info_str, sizeof(nc->info_str), TYPE_VHOST_VDPA);
     nc->queue_index = 0;
     s = DO_UPCAST(VhostVDPAState, nc, nc);
diff --git a/qapi/net.json b/qapi/net.json
index b86d053ad6..af3f5b0fda 100644
--- a/qapi/net.json
+++ b/qapi/net.json
@@ -694,83 +694,3 @@
 ##
 { 'event': 'FAILOVER_NEGOTIATED',
   'data': {'device-id': 'str'} }
-
-##
-# @NetBackend:
-#
-# Available netdev backend drivers.
-#
-# Since: 6.0
-##
-{ 'enum': 'NetBackend',
-  'data': [ 'bridge', 'l2tpv3', 'netmap', 'socket', 'tap', 'user', 'vde',
-            'vhost-user', 'vhost-vdpa' ] }
-
-##
-# @NetdevInfo:
-#
-# Configuration of a network backend device (netdev).
-#
-# @id: Device identifier.
-#
-# @type: Specify the driver used for interpreting remaining arguments.
-#
-# @peer-id: The connected frontend network device name (absent if no frontend
-#           is connected).
-#
-# Since: 6.0
-##
-{ 'union': 'NetdevInfo',
-  'base': { 'id': 'str',
-            'type': 'NetBackend',
-            '*peer-id': 'str' },
-  'discriminator': 'type',
-  'data': {
-      'bridge':     'NetdevBridgeOptions',
-      'l2tpv3':     'NetdevL2TPv3Options',
-      'netmap':     'NetdevNetmapOptions',
-      'socket':     'NetdevSocketOptions',
-      'tap':        'NetdevTapOptions',
-      'user':       'NetdevUserOptions',
-      'vde':        'NetdevVdeOptions',
-      'vhost-user': 'NetdevVhostUserOptions',
-      'vhost-vdpa': 'NetdevVhostVDPAOptions' } }
-
-##
-# @query-netdev:
-#
-# Get a list of @NetdevInfo for all virtual network backend devices (netdevs).
-#
-# Returns: a list of @NetdevInfo describing each netdev.
-#
-# Since: 6.0
-#
-# Example:
-#
-# -> { "execute": "query-netdev" }
-# <- { "return": [
-#          {
-#              "ipv6": true,
-#              "ipv4": true,
-#              "host": "10.0.2.2",
-#              "ipv6-dns": "fec0::3",
-#              "ipv6-prefix": "fec0::",
-#              "net": "10.0.2.0/255.255.255.0",
-#              "ipv6-host": "fec0::2",
-#              "type": "user",
-#              "peer-id": "net0",
-#              "dns": "10.0.2.3",
-#              "hostfwd": [
-#                  {
-#                      "str": "tcp::20004-:22"
-#                  }
-#              ],
-#              "ipv6-prefixlen": 64,
-#              "id": "netdev0",
-#              "restrict": false
-#          }
-#      ]
-#    }
-#
-##
-{ 'command': 'query-netdev', 'returns': ['NetdevInfo'] }
-- 
2.24.3 (Apple Git-128)



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 3/5] Revert "net: Move NetClientState.info_str to dynamic allocations"
  2021-04-02  8:15 ` [PATCH 3/5] Revert "net: Move NetClientState.info_str to dynamic allocations" Jason Wang
@ 2021-04-02  9:00   ` Jason Wang
  0 siblings, 0 replies; 8+ messages in thread
From: Jason Wang @ 2021-04-02  9:00 UTC (permalink / raw)
  To: qemu-devel, lekiravi


在 2021/4/2 下午4:15, Jason Wang 写道:
> Several issues has been reported for query-netdev info
> series. Consider it's late in the rc, this reverts commitThis reverts


copy and paste error :(.

Will fix this when applying the series.

Thanks


> commit 59b5437eb732d6b103a9bc279c3482c834d1eff9.
>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> ---
>   hw/net/xen_nic.c  |  5 +++--
>   include/net/net.h |  2 +-
>   net/l2tpv3.c      |  3 ++-
>   net/net.c         | 14 ++++++--------
>   net/slirp.c       |  5 +++--
>   net/socket.c      | 43 +++++++++++++++++++------------------------
>   net/tap-win32.c   |  3 ++-
>   net/tap.c         | 13 ++++++++-----
>   net/vde.c         |  3 ++-
>   net/vhost-user.c  |  3 ++-
>   net/vhost-vdpa.c  |  2 +-
>   11 files changed, 49 insertions(+), 47 deletions(-)
>
> diff --git a/hw/net/xen_nic.c b/hw/net/xen_nic.c
> index 8431808ea0..5c815b4f0c 100644
> --- a/hw/net/xen_nic.c
> +++ b/hw/net/xen_nic.c
> @@ -296,8 +296,9 @@ static int net_init(struct XenLegacyDevice *xendev)
>       netdev->nic = qemu_new_nic(&net_xen_info, &netdev->conf,
>                                  "xen", NULL, netdev);
>   
> -    qemu_get_queue(netdev->nic)->info_str = g_strdup_printf(
> -        "nic: xenbus vif macaddr=%s", netdev->mac);
> +    snprintf(qemu_get_queue(netdev->nic)->info_str,
> +             sizeof(qemu_get_queue(netdev->nic)->info_str),
> +             "nic: xenbus vif macaddr=%s", netdev->mac);
>   
>       /* fill info */
>       xenstore_write_be_int(&netdev->xendev, "feature-rx-copy", 1);
> diff --git a/include/net/net.h b/include/net/net.h
> index 3559f3ca19..e5ba61cf8d 100644
> --- a/include/net/net.h
> +++ b/include/net/net.h
> @@ -94,7 +94,7 @@ struct NetClientState {
>       NetQueue *incoming_queue;
>       char *model;
>       char *name;
> -    char *info_str;
> +    char info_str[256];
>       NetdevInfo *stored_config;
>       unsigned receive_disabled : 1;
>       NetClientDestructor *destructor;
> diff --git a/net/l2tpv3.c b/net/l2tpv3.c
> index 96611cb4af..8aa0a3e1a0 100644
> --- a/net/l2tpv3.c
> +++ b/net/l2tpv3.c
> @@ -730,7 +730,8 @@ int net_init_l2tpv3(const Netdev *netdev,
>       QAPI_CLONE_MEMBERS(NetdevL2TPv3Options,
>                          &nc->stored_config->u.l2tpv3, l2tpv3);
>   
> -    s->nc.info_str = g_strdup_printf("l2tpv3: connected");
> +    snprintf(s->nc.info_str, sizeof(s->nc.info_str),
> +             "l2tpv3: connected");
>       return 0;
>   outerr:
>       qemu_del_net_client(nc);
> diff --git a/net/net.c b/net/net.c
> index 277da712eb..9a2a6ab155 100644
> --- a/net/net.c
> +++ b/net/net.c
> @@ -129,12 +129,11 @@ char *qemu_mac_strdup_printf(const uint8_t *macaddr)
>   
>   void qemu_format_nic_info_str(NetClientState *nc, uint8_t macaddr[6])
>   {
> -    g_free(nc->info_str);
> -    nc->info_str = g_strdup_printf(
> -        "model=%s,macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
> -        nc->model,
> -        macaddr[0], macaddr[1], macaddr[2],
> -        macaddr[3], macaddr[4], macaddr[5]);
> +    snprintf(nc->info_str, sizeof(nc->info_str),
> +             "model=%s,macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
> +             nc->model,
> +             macaddr[0], macaddr[1], macaddr[2],
> +             macaddr[3], macaddr[4], macaddr[5]);
>   }
>   
>   static int mac_table[256] = {0};
> @@ -353,7 +352,6 @@ static void qemu_free_net_client(NetClientState *nc)
>       }
>       g_free(nc->name);
>       g_free(nc->model);
> -    g_free(nc->info_str);
>       qapi_free_NetdevInfo(nc->stored_config);
>       if (nc->destructor) {
>           nc->destructor(nc);
> @@ -1228,7 +1226,7 @@ void print_net_client(Monitor *mon, NetClientState *nc)
>       monitor_printf(mon, "%s: index=%d,type=%s,%s\n", nc->name,
>                      nc->queue_index,
>                      NetClientDriver_str(nc->info->type),
> -                   nc->info_str ? nc->info_str : "");
> +                   nc->info_str);
>       if (!QTAILQ_EMPTY(&nc->filters)) {
>           monitor_printf(mon, "filters:\n");
>       }
> diff --git a/net/slirp.c b/net/slirp.c
> index 67f0f1d925..b3b979845e 100644
> --- a/net/slirp.c
> +++ b/net/slirp.c
> @@ -674,8 +674,9 @@ static int net_slirp_init(NetClientState *peer, const char *model,
>           stored->tftp_server_name = g_strdup(tftp_server_name);
>       }
>   
> -    nc->info_str = g_strdup_printf("net=%s,restrict=%s", inet_ntoa(net),
> -                                   restricted ? "on" : "off");
> +    snprintf(nc->info_str, sizeof(nc->info_str),
> +             "net=%s,restrict=%s", inet_ntoa(net),
> +             restricted ? "on" : "off");
>   
>       s = DO_UPCAST(SlirpState, nc, nc);
>   
> diff --git a/net/socket.c b/net/socket.c
> index 98172347d7..1614523b82 100644
> --- a/net/socket.c
> +++ b/net/socket.c
> @@ -180,8 +180,7 @@ static void net_socket_send(void *opaque)
>           s->fd = -1;
>           net_socket_rs_init(&s->rs, net_socket_rs_finalize, false);
>           s->nc.link_down = true;
> -        g_free(s->nc.info_str);
> -        s->nc.info_str = g_new0(char, 1);
> +        memset(s->nc.info_str, 0, sizeof(s->nc.info_str));
>   
>           return;
>       }
> @@ -401,16 +400,16 @@ static NetSocketState *net_socket_fd_init_dgram(NetClientState *peer,
>           stored->mcast = g_strdup(mcast);
>   
>           s->dgram_dst = saddr;
> -        nc->info_str = g_strdup_printf("socket: fd=%d (cloned mcast=%s:%d)",
> -                                       fd, inet_ntoa(saddr.sin_addr),
> -                                       ntohs(saddr.sin_port));
> +        snprintf(nc->info_str, sizeof(nc->info_str),
> +                 "socket: fd=%d (cloned mcast=%s:%d)",
> +                 fd, inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
>       } else {
>           if (sa_type == SOCKET_ADDRESS_TYPE_UNIX) {
>               s->dgram_dst.sin_family = AF_UNIX;
>           }
>   
> -        nc->info_str = g_strdup_printf("socket: fd=%d %s",
> -                                       fd, SocketAddressType_str(sa_type));
> +        snprintf(nc->info_str, sizeof(nc->info_str),
> +                 "socket: fd=%d %s", fd, SocketAddressType_str(sa_type));
>       }
>   
>       return s;
> @@ -445,7 +444,7 @@ static NetSocketState *net_socket_fd_init_stream(NetClientState *peer,
>   
>       nc = qemu_new_net_client(&net_socket_info, peer, model, name);
>   
> -    nc->info_str = g_strdup_printf("socket: fd=%d", fd);
> +    snprintf(nc->info_str, sizeof(nc->info_str), "socket: fd=%d", fd);
>   
>       s = DO_UPCAST(NetSocketState, nc, nc);
>   
> @@ -529,10 +528,9 @@ static void net_socket_accept(void *opaque)
>       stored->has_fd = true;
>       stored->fd = g_strdup_printf("%d", fd);
>   
> -    g_free(s->nc.info_str);
> -    s->nc.info_str = g_strdup_printf("socket: connection from %s:%d",
> -                                     inet_ntoa(saddr.sin_addr),
> -                                     ntohs(saddr.sin_port));
> +    snprintf(s->nc.info_str, sizeof(s->nc.info_str),
> +             "socket: connection from %s:%d",
> +             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
>   }
>   
>   static int net_socket_listen_init(NetClientState *peer,
> @@ -647,10 +645,9 @@ static int net_socket_connect_init(NetClientState *peer,
>       stored->has_connect = true;
>       stored->connect = g_strdup(host_str);
>   
> -    g_free(s->nc.info_str);
> -    s->nc.info_str = g_strdup_printf("socket: connect to %s:%d",
> -                                     inet_ntoa(saddr.sin_addr),
> -                                     ntohs(saddr.sin_port));
> +    snprintf(s->nc.info_str, sizeof(s->nc.info_str),
> +             "socket: connect to %s:%d",
> +             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
>       return 0;
>   }
>   
> @@ -707,10 +704,9 @@ static int net_socket_mcast_init(NetClientState *peer,
>           stored->localaddr = g_strdup(localaddr_str);
>       }
>   
> -    g_free(s->nc.info_str);
> -    s->nc.info_str = g_strdup_printf("socket: mcast=%s:%d",
> -                                     inet_ntoa(saddr.sin_addr),
> -                                     ntohs(saddr.sin_port));
> +    snprintf(s->nc.info_str, sizeof(s->nc.info_str),
> +             "socket: mcast=%s:%d",
> +             inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
>       return 0;
>   
>   }
> @@ -773,10 +769,9 @@ static int net_socket_udp_init(NetClientState *peer,
>       stored->has_udp = true;
>       stored->udp = g_strdup(rhost);
>   
> -    g_free(s->nc.info_str);
> -    s->nc.info_str = g_strdup_printf("socket: udp=%s:%d",
> -                                     inet_ntoa(raddr.sin_addr),
> -                                     ntohs(raddr.sin_port));
> +    snprintf(s->nc.info_str, sizeof(s->nc.info_str),
> +             "socket: udp=%s:%d",
> +             inet_ntoa(raddr.sin_addr), ntohs(raddr.sin_port));
>       return 0;
>   }
>   
> diff --git a/net/tap-win32.c b/net/tap-win32.c
> index 959266c658..2a2ba4f527 100644
> --- a/net/tap-win32.c
> +++ b/net/tap-win32.c
> @@ -797,7 +797,8 @@ static int tap_win32_init(NetClientState *peer, const char *model,
>       stored->has_ifname = true;
>       stored->ifname = g_strdup(ifname);
>   
> -    s->nc.info_str = g_strdup_printf("tap: ifname=%s", ifname);
> +    snprintf(s->nc.info_str, sizeof(s->nc.info_str),
> +             "tap: ifname=%s", ifname);
>   
>       s->handle = handle;
>   
> diff --git a/net/tap.c b/net/tap.c
> index 522ce7e487..35895192c5 100644
> --- a/net/tap.c
> +++ b/net/tap.c
> @@ -635,7 +635,8 @@ int net_init_bridge(const Netdev *netdev, const char *name,
>           stored->helper = g_strdup(helper);
>       }
>   
> -    s->nc.info_str = g_strdup_printf("helper=%s,br=%s", helper, br);
> +    snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=%s,br=%s", helper,
> +             br);
>   
>       return 0;
>   }
> @@ -723,7 +724,7 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
>               g_free(tmp_s);
>           }
>   
> -        s->nc.info_str = g_strdup_printf("fd=%d", fd);
> +        snprintf(s->nc.info_str, sizeof(s->nc.info_str), "fd=%d", fd);
>       } else if (tap->has_helper) {
>           if (!stored->has_helper) {
>               stored->has_helper = true;
> @@ -736,7 +737,8 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
>                                          g_strdup(DEFAULT_BRIDGE_INTERFACE);
>           }
>   
> -        s->nc.info_str = g_strdup_printf("helper=%s", tap->helper);
> +        snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=%s",
> +                 tap->helper);
>       } else {
>           if (ifname && !stored->has_ifname) {
>               stored->has_ifname = true;
> @@ -753,8 +755,9 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
>               stored->downscript = g_strdup(downscript);
>           }
>   
> -        s->nc.info_str = g_strdup_printf("ifname=%s,script=%s,downscript=%s",
> -                                         ifname, script, downscript);
> +        snprintf(s->nc.info_str, sizeof(s->nc.info_str),
> +                 "ifname=%s,script=%s,downscript=%s", ifname, script,
> +                 downscript);
>   
>           if (strcmp(downscript, "no") != 0) {
>               snprintf(s->down_script, sizeof(s->down_script), "%s", downscript);
> diff --git a/net/vde.c b/net/vde.c
> index 67de6eb0c5..b0b8800571 100644
> --- a/net/vde.c
> +++ b/net/vde.c
> @@ -100,7 +100,8 @@ static int net_vde_init(NetClientState *peer, const char *model,
>   
>       nc = qemu_new_net_client(&net_vde_info, peer, model, name);
>   
> -    nc->info_str = g_strdup_printf("sock=%s,fd=%d", sock, vde_datafd(vde));
> +    snprintf(nc->info_str, sizeof(nc->info_str), "sock=%s,fd=%d",
> +             sock, vde_datafd(vde));
>   
>       s = DO_UPCAST(VDEState, nc, nc);
>   
> diff --git a/net/vhost-user.c b/net/vhost-user.c
> index 49c9a740c2..5b7056be25 100644
> --- a/net/vhost-user.c
> +++ b/net/vhost-user.c
> @@ -327,7 +327,8 @@ static int net_vhost_user_init(NetClientState *peer, const char *device,
>       user = g_new0(struct VhostUserState, 1);
>       for (i = 0; i < queues; i++) {
>           nc = qemu_new_net_client(&net_vhost_user_info, peer, device, name);
> -        nc->info_str = g_strdup_printf("vhost-user%d to %s", i, chr->label);
> +        snprintf(nc->info_str, sizeof(nc->info_str), "vhost-user%d to %s",
> +                 i, chr->label);
>           nc->queue_index = i;
>           if (!nc0) {
>               nc0 = nc;
> diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
> index 423d71770d..8c27ea0142 100644
> --- a/net/vhost-vdpa.c
> +++ b/net/vhost-vdpa.c
> @@ -200,7 +200,7 @@ static int net_vhost_vdpa_init(NetClientState *peer, const char *device,
>       stored->has_queues = true;
>       stored->queues = 1; /* TODO: change when support multiqueue */
>   
> -    nc->info_str = g_strdup_printf(TYPE_VHOST_VDPA);
> +    snprintf(nc->info_str, sizeof(nc->info_str), TYPE_VHOST_VDPA);
>       nc->queue_index = 0;
>       s = DO_UPCAST(VhostVDPAState, nc, nc);
>       vdpa_device_fd = qemu_open_old(vhostdev, O_RDWR);



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/5] Revert query-netdev command for 6.0
  2021-04-02  8:15 [PATCH 0/5] Revert query-netdev command for 6.0 Jason Wang
                   ` (4 preceding siblings ...)
  2021-04-02  8:15 ` [PATCH 5/5] Revert "qapi: net: Add " Jason Wang
@ 2021-04-06  4:05 ` Jason Wang
  5 siblings, 0 replies; 8+ messages in thread
From: Jason Wang @ 2021-04-06  4:05 UTC (permalink / raw)
  To: qemu-devel, lekiravi


在 2021/4/2 下午4:15, Jason Wang 写道:
> Hi All:
>
> Several issues has been reported for query-netdev command:
>
> - coverity warnings of memory leak and cut-and-paste issue
> - lacking of documentation for future new netdev development
>
> Consider it's late in the rc, I would like to revert this series and
> let's retry for 6.1.


Applied.

Thanks


>
> Thanks
>
> Jason Wang (5):
>    Revert "net: Do not fill legacy info_str for backends"
>    Revert "hmp: Use QAPI NetdevInfo in hmp_info_network"
>    Revert "net: Move NetClientState.info_str to dynamic allocations"
>    Revert "tests: Add tests for query-netdev command"
>    Revert "qapi: net: Add query-netdev command"
>
>   hw/net/xen_nic.c                  |   5 +-
>   include/net/net.h                 |   5 +-
>   include/qapi/hmp-output-visitor.h |  30 -----
>   net/l2tpv3.c                      |   8 +-
>   net/net.c                         |  73 ++---------
>   net/netmap.c                      |   7 --
>   net/slirp.c                       | 124 +------------------
>   net/socket.c                      |  92 ++++----------
>   net/tap-win32.c                   |  10 +-
>   net/tap.c                         | 107 ++---------------
>   net/vde.c                         |  25 +---
>   net/vhost-user.c                  |  20 +---
>   net/vhost-vdpa.c                  |  15 +--
>   qapi/hmp-output-visitor.c         | 193 ------------------------------
>   qapi/meson.build                  |   1 -
>   qapi/net.json                     |  80 -------------
>   tests/qtest/meson.build           |   3 -
>   tests/qtest/test-query-netdev.c   | 120 -------------------
>   18 files changed, 62 insertions(+), 856 deletions(-)
>   delete mode 100644 include/qapi/hmp-output-visitor.h
>   delete mode 100644 qapi/hmp-output-visitor.c
>   delete mode 100644 tests/qtest/test-query-netdev.c
>



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-04-06  4:07 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-02  8:15 [PATCH 0/5] Revert query-netdev command for 6.0 Jason Wang
2021-04-02  8:15 ` [PATCH 1/5] Revert "net: Do not fill legacy info_str for backends" Jason Wang
2021-04-02  8:15 ` [PATCH 2/5] Revert "hmp: Use QAPI NetdevInfo in hmp_info_network" Jason Wang
2021-04-02  8:15 ` [PATCH 3/5] Revert "net: Move NetClientState.info_str to dynamic allocations" Jason Wang
2021-04-02  9:00   ` Jason Wang
2021-04-02  8:15 ` [PATCH 4/5] Revert "tests: Add tests for query-netdev command" Jason Wang
2021-04-02  8:15 ` [PATCH 5/5] Revert "qapi: net: Add " Jason Wang
2021-04-06  4:05 ` [PATCH 0/5] Revert query-netdev command for 6.0 Jason Wang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.