qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: Jason Wang <jasowang@redhat.com>
Subject: [Qemu-devel] [PATCH v2 13/35] l2tpv3: Improve -netdev/netdev_add/-net/... error reporting
Date: Mon, 15 Oct 2018 13:52:47 +0200	[thread overview]
Message-ID: <20181015115309.17089-14-armbru@redhat.com> (raw)
In-Reply-To: <20181015115309.17089-1-armbru@redhat.com>

When -netdev l2tpv3 fails, it first reports a specific error, then a
generic one, like this:

    $ qemu-system-x86_64 -netdev l2tpv3,id=foo,src=,dst=,txsession=1
    qemu-system-x86_64: -netdev l2tpv3,id=foo,src=,dst=,txsession=1: l2tpv3_open : could not resolve src, errno = Name or service not known
    qemu-system-x86_64: Device 'l2tpv3' could not be initialized

With the command line, the messages go to stderr.  In HMP, they go to
the monitor.  In QMP, the second one becomes the error reply, and the
first one goes to stderr.

Convert net_init_tap() to Error.  This suppresses the unwanted second
message, and makes the specific error the QMP error reply.

Cc: Jason Wang <jasowang@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 net/l2tpv3.c | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/net/l2tpv3.c b/net/l2tpv3.c
index 6745b78990..81db24dc8c 100644
--- a/net/l2tpv3.c
+++ b/net/l2tpv3.c
@@ -28,6 +28,7 @@
 #include <netdb.h>
 #include "net/net.h"
 #include "clients.h"
+#include "qapi/error.h"
 #include "qemu-common.h"
 #include "qemu/error-report.h"
 #include "qemu/option.h"
@@ -528,7 +529,6 @@ int net_init_l2tpv3(const Netdev *netdev,
                     const char *name,
                     NetClientState *peer, Error **errp)
 {
-    /* FIXME error_setg(errp, ...) on failure */
     const NetdevL2TPv3Options *l2tpv3;
     NetL2TPV3State *s;
     NetClientState *nc;
@@ -555,7 +555,7 @@ int net_init_l2tpv3(const Netdev *netdev,
     }
 
     if ((l2tpv3->has_offset) && (l2tpv3->offset > 256)) {
-        error_report("l2tpv3_open : offset must be less than 256 bytes");
+        error_setg(errp, "offset must be less than 256 bytes");
         goto outerr;
     }
 
@@ -563,6 +563,8 @@ int net_init_l2tpv3(const Netdev *netdev,
         if (l2tpv3->has_rxcookie && l2tpv3->has_txcookie) {
             s->cookie = true;
         } else {
+            error_setg(errp,
+                       "require both 'rxcookie' and 'txcookie' or neither");
             goto outerr;
         }
     } else {
@@ -578,7 +580,7 @@ int net_init_l2tpv3(const Netdev *netdev,
     if (l2tpv3->has_udp && l2tpv3->udp) {
         s->udp = true;
         if (!(l2tpv3->has_srcport && l2tpv3->has_dstport)) {
-            error_report("l2tpv3_open : need both src and dst port for udp");
+            error_setg(errp, "need both src and dst port for udp");
             goto outerr;
         } else {
             srcport = l2tpv3->srcport;
@@ -639,20 +641,19 @@ int net_init_l2tpv3(const Netdev *netdev,
     gairet = getaddrinfo(l2tpv3->src, srcport, &hints, &result);
 
     if ((gairet != 0) || (result == NULL)) {
-        error_report(
-            "l2tpv3_open : could not resolve src, errno = %s",
-            gai_strerror(gairet)
-        );
+        error_setg(errp, "could not resolve src, errno = %s",
+                   gai_strerror(gairet));
         goto outerr;
     }
     fd = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
     if (fd == -1) {
         fd = -errno;
-        error_report("l2tpv3_open : socket creation failed, errno = %d", -fd);
+        error_setg(errp, "socket creation failed, errno = %d",
+                   -fd);
         goto outerr;
     }
     if (bind(fd, (struct sockaddr *) result->ai_addr, result->ai_addrlen)) {
-        error_report("l2tpv3_open :  could not bind socket err=%i", errno);
+        error_setg(errp, "could not bind socket err=%i", errno);
         goto outerr;
     }
     if (result) {
@@ -677,10 +678,8 @@ int net_init_l2tpv3(const Netdev *netdev,
     result = NULL;
     gairet = getaddrinfo(l2tpv3->dst, dstport, &hints, &result);
     if ((gairet != 0) || (result == NULL)) {
-        error_report(
-            "l2tpv3_open : could not resolve dst, error = %s",
-            gai_strerror(gairet)
-        );
+        error_setg(errp, "could not resolve dst, error = %s",
+                   gai_strerror(gairet));
         goto outerr;
     }
 
-- 
2.17.1

  parent reply	other threads:[~2018-10-15 11:53 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-15 11:52 [Qemu-devel] [PATCH v2 00/35] Replace some unwise uses of error_report() & friends Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 01/35] error: Fix use of error_prepend() with &error_fatal, &error_abort Markus Armbruster
2018-10-15 18:49   ` Eric Blake
2018-10-15 22:52   ` Philippe Mathieu-Daudé
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 02/35] Use error_fatal to simplify obvious fatal errors (again) Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 03/35] block: Use warn_report() & friends to report warnings Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 04/35] cpus hw target: " Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 05/35] vfio: " Markus Armbruster
2018-10-15 18:53   ` Eric Blake
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 06/35] vfio: Clean up error reporting after previous commit Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 07/35] char: Use error_printf() to print help and such Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 08/35] 9pfs: Fix CLI parsing crash on error Markus Armbruster
2018-10-15 19:00   ` Eric Blake
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 09/35] pc: Fix machine property nvdimm-persistence error handling Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 10/35] ioapic: Fix error handling in realize() Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 11/35] smbios: Clean up error handling in smbios_add() Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 12/35] migration: Fix !replay_can_snapshot() error handling Markus Armbruster
2018-10-15 11:52 ` Markus Armbruster [this message]
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 14/35] net/socket: Fix invalid socket type " Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 15/35] numa: Fix QMP command set-numa-node " Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 16/35] xen/pt: Fix incomplete conversion to realize() Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 17/35] seccomp: Clean up error reporting in parse_sandbox() Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 18/35] vl: Clean up error reporting in parse_add_fd() Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 19/35] qom: Clean up error reporting in user_creatable_add_opts_foreach() Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 20/35] vl: Clean up error reporting in chardev_init_func() Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 21/35] vl: Clean up error reporting in machine_set_property() Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 22/35] vl: Clean up error reporting in mon_init_func() Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 23/35] vl: Clean up error reporting in parse_fw_cfg() Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 24/35] vl: Clean up error reporting in device_init_func() Markus Armbruster
2018-10-15 11:52 ` [Qemu-devel] [PATCH v2 25/35] ui/keymaps: Fix handling of erroneous include files Markus Armbruster
2018-10-15 11:53 ` [Qemu-devel] [PATCH v2 26/35] ui: Convert vnc_display_init(), init_keyboard_layout() to Error Markus Armbruster
2018-10-15 22:42   ` Philippe Mathieu-Daudé
2018-10-15 11:53 ` [Qemu-devel] [PATCH v2 27/35] vnc: Clean up error reporting in vnc_init_func() Markus Armbruster
2018-10-15 12:51   ` Fei Li
2018-10-16  4:08     ` Markus Armbruster
2018-10-16  6:52       ` Gerd Hoffmann
2018-10-16 11:21         ` Markus Armbruster
2018-10-15 22:41   ` Philippe Mathieu-Daudé
2018-10-15 11:53 ` [Qemu-devel] [PATCH v2 28/35] numa: Clean up error reporting in parse_numa() Markus Armbruster
2018-10-15 11:53 ` [Qemu-devel] [PATCH v2 29/35] tpm: Clean up error reporting in tpm_init_tpmdev() Markus Armbruster
2018-10-15 11:53 ` [Qemu-devel] [PATCH v2 30/35] spice: Clean up error reporting in add_channel() Markus Armbruster
2018-10-15 11:53 ` [Qemu-devel] [PATCH v2 31/35] fsdev: Clean up error reporting in qemu_fsdev_add() Markus Armbruster
2018-10-15 11:53 ` [Qemu-devel] [PATCH v2 32/35] vl: Assert drive_new() does not fail in default_drive() Markus Armbruster
2018-10-15 11:53 ` [Qemu-devel] [PATCH v2 33/35] blockdev: Convert drive_new() to Error Markus Armbruster
2018-10-15 14:48   ` Max Reitz
2018-10-15 18:54     ` Eric Blake
2018-10-15 22:38     ` Philippe Mathieu-Daudé
2018-10-16  4:09       ` Markus Armbruster
2018-10-15 11:53 ` [Qemu-devel] [PATCH v2 34/35] vl: Fix exit status for -drive format=help Markus Armbruster
2018-10-15 11:53 ` [Qemu-devel] [PATCH v2 35/35] vl: Simplify call of parse_name() Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181015115309.17089-14-armbru@redhat.com \
    --to=armbru@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).