qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/2] net/socket: Improve -net socket error repor


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH 2/2] net/socket: Improve -net socket error reporting
Date: Tue, 18 Apr 2017 18:02:29 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

Mao Zhongyi <address@hidden> writes:

> When -net socket fails, it first reports a specific error, then
> a generic one, like this:
>
>     $ qemu-system-x86_64 -net socket,
>     qemu-system-x86_64: -net socket: exactly one of fd=, listen=, connect=, 
> mcast= or udp= is required
>     qemu-system-x86_64: -net socket: Device 'socket' could not be initialized
>
> Convert net_init_socket() to Error to get rid of the unwanted second
> error message.
>
> Signed-off-by: Mao Zhongyi <address@hidden>

Thanks for trying to tackle this.

> ---
>  net/socket.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/net/socket.c b/net/socket.c
> index 1886f98..85ad9cd 100644
> --- a/net/socket.c
> +++ b/net/socket.c
> @@ -691,7 +691,6 @@ static int net_socket_udp_init(NetClientState *peer,
>  int net_init_socket(const Netdev *netdev, const char *name,
>                      NetClientState *peer, Error **errp)
>  {
> -    /* FIXME error_setg(errp, ...) on failure */
>      Error *err = NULL;
>      const NetdevSocketOptions *sock;
>  
> @@ -700,13 +699,13 @@ int net_init_socket(const Netdev *netdev, const char 
> *name,
>  
>      if (sock->has_fd + sock->has_listen + sock->has_connect + 
> sock->has_mcast +
>          sock->has_udp != 1) {
> -        error_report("exactly one of fd=, listen=, connect=, mcast= or udp="
> +        error_setg(errp, "exactly one of fd=, listen=, connect=, mcast= or 
> udp="
>                       " is required");
>          return -1;
>      }
>  
>      if (sock->has_localaddr && !sock->has_mcast && !sock->has_udp) {
> -        error_report("localaddr= is only valid with mcast= or udp=");
> +        error_setg(errp, "localaddr= is only valid with mcast= or udp=");
>          return -1;
>      }
>  
       if (sock->has_fd) {
           int fd;

           fd = monitor_fd_param(cur_mon, sock->fd, &err);
           if (fd == -1) {
               error_report_err(err);

You missed this one.

               return -1;
           }
           qemu_set_nonblock(fd);
           if (!net_socket_fd_init(peer, "socket", name, fd, 1)) {
               return -1;
           }
           return 0;
       }

       if (sock->has_listen) {
           if (net_socket_listen_init(peer, "socket", name, sock->listen) == 
-1) {

net_socket_listen_init() calls error_report_err().  You need to convert
it to Error.

               return -1;
           }
           return 0;
       }

       if (sock->has_connect) {
           if (net_socket_connect_init(peer, "socket", name, sock->connect) ==
               -1) {

Likewise.

You also need to convert net_socket_connected().

You should review everything called by this function for use of
error_report() or similar.

               return -1;
           }
           return 0;
       }

       if (sock->has_mcast) {
           /* if sock->localaddr is missing, it has been initialized to "all 
bits
            * zero" */
           if (net_socket_mcast_init(peer, "socket", name, sock->mcast,
               sock->localaddr) == -1) {

Different kind of problem here: this function can fail without reporting
an error.  You need to fix it to set an error when it fails.

               return -1;
           }
           return 0;
       }
> @@ -752,7 +751,7 @@ int net_init_socket(const Netdev *netdev, const char 
> *name,
>  
>      assert(sock->has_udp);
>      if (!sock->has_localaddr) {
> -        error_report("localaddr= is mandatory with udp=");
> +        error_setg(errp, "localaddr= is mandatory with udp=");
>          return -1;
>      }
>      if (net_socket_udp_init(peer, "socket", name, sock->udp, 
> sock->localaddr) ==



reply via email to

[Prev in Thread] Current Thread [Next in Thread]