All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PULLv3 00/65] slirp updates
@ 2019-01-14 22:52 Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 01/65] slirp: associate slirp_output callback with the Slirp context Samuel Thibault
                   ` (66 more replies)
  0 siblings, 67 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Samuel Thibault, stefanha, jan.kiszka

The following changes since commit 27df21ca3886fff4dd3d70e515517667963a52f1:

  Merge remote-tracking branch 'remotes/kraxel/tags/misc-20190111-pull-request' into staging (2019-01-11 16:45:59 +0000)

are available in the Git repository at:

  https://people.debian.org/~sthibault/qemu.git tags/samuel-thibault

for you to fetch changes up to a7104eda7dab99d0cdbd3595c211864cba415905:

  slirp: check data length while emulating ident function (2019-01-14 23:36:38 +0100)

----------------------------------------------------------------
slirp updates

Gerd Hoffmann (1):
  slirp: add tftp tracing

Marc-André Lureau (61):
  slirp: associate slirp_output callback with the Slirp context
  slirp: remove do_pty from fork_exec()
  slirp: replace ex_pty with ex_chardev
  slirp: use a dedicated field for chardev pointer
  slirp: remove unused EMU_RSH
  slirp: rename /extra/chardev
  slirp: move internal function declarations
  slirp: remove Monitor dependency, return a string for info
  slirp: fix slirp_add_exec() leaks
  slirp: replace the poor-man string split with g_strsplit()
  slirp: remove dead declarations
  slirp: move socket pair creation in helper function
  slirp: remove unused M_TRAILINGSPACE
  slirp: use a callback structure to interface with qemu
  slirp: remove PROBE_CONN dead-code
  slirp: remove FULL_BOLT
  slirp: remove the disabled readv()/writev() code path
  slirp: remove HAVE_SYS_SIGNAL_H
  slirp: remove unused HAVE_SYS_BITYPES_H
  slirp: remove NO_UNIX_SOCKETS
  slirp: remove unused HAVE_SYS_STROPTS_H
  slirp: remove unused HAVE_ARPA_INET_H
  slirp: remove unused HAVE_SYS_WAIT_H
  slirp: remove unused HAVE_SYS_SELECT_H
  slirp: remove HAVE_SYS_IOCTL_H
  slirp: remove HAVE_SYS_FILIO_H
  slirp: remove unused DECLARE_IOVEC
  slirp: remove unused HAVE_INET_ATON
  slirp: replace HOST_WORDS_BIGENDIAN with glib equivalent
  slirp: replace SIZEOF_CHAR_P with glib equivalent
  slirp: replace compile time DO_KEEPALIVE
  slirp: remove unused global slirp_instance
  slirp: replace error_report() with g_critical()
  slirp: improve a bit the debug macros
  slirp: add a callback to log guest errors
  slirp: remove #if notdef dead code
  slirp: remove unused sbflush()
  slirp: NULL is defined by stddef.h
  slirp: remove dead TCP_ACK_HACK code
  slirp: replace ARRAY_SIZE with G_N_ELEMENTS
  net: do not depend on slirp internals
  glib-compat: add g_spawn_async_with_fds() fallback
  slirp: simplify fork_exec()
  slirp: replace error_report() with g_critical()
  slirp: drop <Vista compatibility
  slirp: rename exec_list
  slirp: use virtual time for packet expiration
  slirp: replace a fprintf with g_critical()
  slirp: replace some fprintf() with DEBUG_MISC
  slirp: replace a DEBUG block with WITH_ICMP_ERROR_MSG
  slirp: no need to make DPRINTF conditional on DEBUG
  slirp: always build with debug statements
  slirp: introduce SLIRP_DEBUG environment variable
  slirp: use %p for pointers format
  slirp: remove remaining DEBUG blocks
  slirp: replace DEBUG_ARGS with DEBUG_ARG
  slirp: factor out guestfwd addition checks
  slirp: add clock_get_ns() callback
  build-sys: use a separate slirp-obj-y && slirp.mo
  slirp: set G_LOG_DOMAIN
  slirp: call into g_debug() for DEBUG macros

Prasad J Pandit (1):
  slirp: check data length while emulating ident function

Samuel Thibault (2):
  slirp: Enable fork_exec support on Windows
  slirp: Mark debugging calls as unlikely

 Makefile              |   5 +-
 Makefile.objs         |   4 +-
 Makefile.target       |   5 +-
 include/glib-compat.h |  56 +++++++++
 net/colo-compare.c    |  11 +-
 net/colo.c            |   1 +
 net/colo.h            |   7 +-
 net/filter-rewriter.c |   9 +-
 net/slirp.c           |  61 +++++----
 net/util.h            |  55 ++++++++
 slirp/Makefile.objs   |  37 +++++-
 slirp/arp_table.c     |  12 +-
 slirp/bootp.c         |  10 +-
 slirp/cksum.c         |   8 +-
 slirp/debug.h         |  47 ++++---
 slirp/dhcpv6.c        |  17 ++-
 slirp/if.c            |   4 +-
 slirp/ip.h            |  10 +-
 slirp/ip6.h           |   3 +-
 slirp/ip6_icmp.c      |  27 ++--
 slirp/ip6_icmp.h      |   6 +-
 slirp/ip6_input.c     |   2 +-
 slirp/ip6_output.c    |   4 +-
 slirp/ip_icmp.c       |  31 ++---
 slirp/ip_input.c      | 200 -----------------------------
 slirp/libslirp.h      |  27 ++--
 slirp/main.h          |  33 -----
 slirp/mbuf.c          |   2 +-
 slirp/mbuf.h          |   1 -
 slirp/misc.c          | 286 +++++++++++++++++-------------------------
 slirp/misc.h          |  13 +-
 slirp/ncsi.c          |   4 +-
 slirp/ndp_table.c     |  32 +++--
 slirp/sbuf.h          |   1 -
 slirp/slirp.c         | 177 +++++++++++++-------------
 slirp/slirp.h         |  45 ++-----
 slirp/slirp_config.h  |  86 -------------
 slirp/socket.c        |  53 +++-----
 slirp/socket.h        |   2 +-
 slirp/tcp.h           |   4 +-
 slirp/tcp_input.c     |  84 ++-----------
 slirp/tcp_output.c    |   2 +-
 slirp/tcp_subr.c      |  22 ++--
 slirp/tcp_timer.c     |   2 +-
 slirp/tftp.c          |   7 +-
 slirp/trace-events    |   5 +
 slirp/udp.c           |   5 +-
 slirp/udp6.c          |  11 +-
 stubs/slirp.c         |   2 +-
 49 files changed, 603 insertions(+), 935 deletions(-)
 delete mode 100644 slirp/slirp_config.h
 create mode 100644 slirp/trace-events

--
2.20.1

----------------------------------------------------------------
Gerd Hoffmann (1):
      slirp: add tftp tracing

Marc-André Lureau (61):
      slirp: associate slirp_output callback with the Slirp context
      slirp: remove do_pty from fork_exec()
      slirp: replace ex_pty with ex_chardev
      slirp: use a dedicated field for chardev pointer
      slirp: remove unused EMU_RSH
      slirp: rename /extra/chardev
      slirp: move internal function declarations
      slirp: remove Monitor dependency, return a string for info
      slirp: fix slirp_add_exec() leaks
      slirp: replace the poor-man string split with g_strsplit()
      slirp: remove dead declarations
      slirp: move socket pair creation in helper function
      slirp: remove unused M_TRAILINGSPACE
      slirp: use a callback structure to interface with qemu
      slirp: remove PROBE_CONN dead-code
      slirp: remove FULL_BOLT
      slirp: remove the disabled readv()/writev() code path
      slirp: remove HAVE_SYS_SIGNAL_H
      slirp: remove unused HAVE_SYS_BITYPES_H
      slirp: remove NO_UNIX_SOCKETS
      slirp: remove unused HAVE_SYS_STROPTS_H
      slirp: remove unused HAVE_ARPA_INET_H
      slirp: remove unused HAVE_SYS_WAIT_H
      slirp: remove unused HAVE_SYS_SELECT_H
      slirp: remove HAVE_SYS_IOCTL_H
      slirp: remove HAVE_SYS_FILIO_H
      slirp: remove unused DECLARE_IOVEC
      slirp: remove unused HAVE_INET_ATON
      slirp: replace HOST_WORDS_BIGENDIAN with glib equivalent
      slirp: replace SIZEOF_CHAR_P with glib equivalent
      slirp: replace compile time DO_KEEPALIVE
      slirp: remove unused global slirp_instance
      slirp: replace error_report() with g_critical()
      slirp: improve a bit the debug macros
      slirp: add a callback to log guest errors
      slirp: remove #if notdef dead code
      slirp: remove unused sbflush()
      slirp: NULL is defined by stddef.h
      slirp: remove dead TCP_ACK_HACK code
      slirp: replace ARRAY_SIZE with G_N_ELEMENTS
      net: do not depend on slirp internals
      glib-compat: add g_spawn_async_with_fds() fallback
      slirp: simplify fork_exec()
      slirp: replace error_report() with g_critical()
      slirp: drop <Vista compatibility
      slirp: rename exec_list
      slirp: use virtual time for packet expiration
      slirp: replace a fprintf with g_critical()
      slirp: replace some fprintf() with DEBUG_MISC
      slirp: replace a DEBUG block with WITH_ICMP_ERROR_MSG
      slirp: no need to make DPRINTF conditional on DEBUG
      slirp: always build with debug statements
      slirp: introduce SLIRP_DEBUG environment variable
      slirp: use %p for pointers format
      slirp: remove remaining DEBUG blocks
      slirp: replace DEBUG_ARGS with DEBUG_ARG
      slirp: factor out guestfwd addition checks
      slirp: add clock_get_ns() callback
      build-sys: use a separate slirp-obj-y && slirp.mo
      slirp: set G_LOG_DOMAIN
      slirp: call into g_debug() for DEBUG macros

Prasad J Pandit (1):
      slirp: check data length while emulating ident function

Samuel Thibault (2):
      slirp: Enable fork_exec support on Windows
      slirp: Mark debugging calls as unlikely

 Makefile              |   5 +-
 Makefile.objs         |   4 +-
 Makefile.target       |   5 +-
 include/glib-compat.h |  56 ++++++++++
 net/colo-compare.c    |  11 +-
 net/colo.c            |   1 +
 net/colo.h            |   7 +-
 net/filter-rewriter.c |   9 +-
 net/slirp.c           |  61 +++++------
 net/util.h            |  55 ++++++++++
 slirp/Makefile.objs   |  37 ++++++-
 slirp/arp_table.c     |  12 +--
 slirp/bootp.c         |  10 +-
 slirp/cksum.c         |   8 +-
 slirp/debug.h         |  47 +++++----
 slirp/dhcpv6.c        |  17 ++-
 slirp/if.c            |   4 +-
 slirp/ip.h            |  10 +-
 slirp/ip6.h           |   3 +-
 slirp/ip6_icmp.c      |  27 +++--
 slirp/ip6_icmp.h      |   6 +-
 slirp/ip6_input.c     |   2 +-
 slirp/ip6_output.c    |   4 +-
 slirp/ip_icmp.c       |  31 +++---
 slirp/ip_input.c      | 200 -----------------------------------
 slirp/libslirp.h      |  27 +++--
 slirp/main.h          |  33 ------
 slirp/mbuf.c          |   2 +-
 slirp/mbuf.h          |   1 -
 slirp/misc.c          | 286 ++++++++++++++++++++------------------------------
 slirp/misc.h          |  13 ++-
 slirp/ncsi.c          |   4 +-
 slirp/ndp_table.c     |  32 +++---
 slirp/sbuf.h          |   1 -
 slirp/slirp.c         | 177 +++++++++++++++----------------
 slirp/slirp.h         |  45 ++------
 slirp/slirp_config.h  |  86 ---------------
 slirp/socket.c        |  53 +++-------
 slirp/socket.h        |   2 +-
 slirp/tcp.h           |   4 +-
 slirp/tcp_input.c     |  84 ++-------------
 slirp/tcp_output.c    |   2 +-
 slirp/tcp_subr.c      |  22 ++--
 slirp/tcp_timer.c     |   2 +-
 slirp/tftp.c          |   7 +-
 slirp/trace-events    |   5 +
 slirp/udp.c           |   5 +-
 slirp/udp6.c          |  11 +-
 stubs/slirp.c         |   2 +-
 49 files changed, 603 insertions(+), 935 deletions(-)
 delete mode 100644 slirp/slirp_config.h
 create mode 100644 slirp/trace-events

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

* [Qemu-devel] [PULL 01/65] slirp: associate slirp_output callback with the Slirp context
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 02/65] slirp: remove do_pty from fork_exec() Samuel Thibault
                   ` (65 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Let's make the slirp interface a bit more library-like.
Associate the slirp_output() with a Slirp context.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 net/slirp.c      |  5 +++--
 slirp/libslirp.h |  9 +++++----
 slirp/ncsi.c     |  2 +-
 slirp/slirp.c    | 11 +++++++----
 slirp/slirp.h    |  1 +
 5 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/net/slirp.c b/net/slirp.c
index 38ae65e4a9..dd06b0189e 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -99,7 +99,7 @@ static void slirp_smb_cleanup(SlirpState *s);
 static inline void slirp_smb_cleanup(SlirpState *s) { }
 #endif
 
-void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len)
+static void net_slirp_output(void *opaque, const uint8_t *pkt, int pkt_len)
 {
     SlirpState *s = opaque;
 
@@ -378,7 +378,8 @@ static int net_slirp_init(NetClientState *peer, const char *model,
                           ipv6, ip6_prefix, vprefix6_len, ip6_host,
                           vhostname, tftp_server_name,
                           tftp_export, bootfile, dhcp,
-                          dns, ip6_dns, dnssearch, vdomainname, s);
+                          dns, ip6_dns, dnssearch, vdomainname,
+                          net_slirp_output, s);
     QTAILQ_INSERT_TAIL(&slirp_stacks, s, entry);
 
     for (config = slirp_configs; config; config = config->next) {
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index 42e42e9a2a..52dbb9feb5 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -5,6 +5,8 @@
 
 typedef struct Slirp Slirp;
 
+typedef void (*slirp_output)(void *opaque, const uint8_t *pkt, int pkt_len);
+
 int get_dns_addr(struct in_addr *pdns_addr);
 int get_dns6_addr(struct in6_addr *pdns6_addr, uint32_t *scope_id);
 
@@ -17,7 +19,9 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork,
                   const char *tftp_path, const char *bootfile,
                   struct in_addr vdhcp_start, struct in_addr vnameserver,
                   struct in6_addr vnameserver6, const char **vdnssearch,
-                  const char *vdomainname, void *opaque);
+                  const char *vdomainname,
+                  slirp_output output,
+                  void *opaque);
 void slirp_cleanup(Slirp *slirp);
 
 void slirp_pollfds_fill(GArray *pollfds, uint32_t *timeout);
@@ -26,9 +30,6 @@ void slirp_pollfds_poll(GArray *pollfds, int select_error);
 
 void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len);
 
-/* you must provide the following functions: */
-void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len);
-
 int slirp_add_hostfwd(Slirp *slirp, int is_udp,
                       struct in_addr host_addr, int host_port,
                       struct in_addr guest_addr, int guest_port);
diff --git a/slirp/ncsi.c b/slirp/ncsi.c
index 7116034afc..d7701f7785 100644
--- a/slirp/ncsi.c
+++ b/slirp/ncsi.c
@@ -163,5 +163,5 @@ void ncsi_input(Slirp *slirp, const uint8_t *pkt, int pkt_len)
     *pchecksum = htonl(checksum);
     ncsi_rsp_len += 4;
 
-    slirp_output(slirp->opaque, ncsi_reply, ETH_HLEN + ncsi_rsp_len);
+    slirp->output(slirp->opaque, ncsi_reply, ETH_HLEN + ncsi_rsp_len);
 }
diff --git a/slirp/slirp.c b/slirp/slirp.c
index ab2fc4eb8b..4d4c2c13b5 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -287,12 +287,15 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork,
                   const char *tftp_path, const char *bootfile,
                   struct in_addr vdhcp_start, struct in_addr vnameserver,
                   struct in6_addr vnameserver6, const char **vdnssearch,
-                  const char *vdomainname, void *opaque)
+                  const char *vdomainname,
+                  slirp_output output,
+                  void *opaque)
 {
     Slirp *slirp = g_malloc0(sizeof(Slirp));
 
     slirp_init_once();
 
+    slirp->output = output;
     slirp->grand = g_rand_new();
     slirp->restricted = restricted;
 
@@ -832,7 +835,7 @@ static void arp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len)
             rah->ar_sip = ah->ar_tip;
             memcpy(rah->ar_tha, ah->ar_sha, ETH_ALEN);
             rah->ar_tip = ah->ar_sip;
-            slirp_output(slirp->opaque, arp_reply, sizeof(arp_reply));
+            slirp->output(slirp->opaque, arp_reply, sizeof(arp_reply));
         }
         break;
     case ARPOP_REPLY:
@@ -932,7 +935,7 @@ static int if_encap4(Slirp *slirp, struct mbuf *ifm, struct ethhdr *eh,
             /* target IP */
             rah->ar_tip = iph->ip_dst.s_addr;
             slirp->client_ipaddr = iph->ip_dst;
-            slirp_output(slirp->opaque, arp_req, sizeof(arp_req));
+            slirp->output(slirp->opaque, arp_req, sizeof(arp_req));
             ifm->resolution_requested = true;
 
             /* Expire request and drop outgoing packet after 1 second */
@@ -1018,7 +1021,7 @@ int if_encap(Slirp *slirp, struct mbuf *ifm)
                 eh->h_dest[0], eh->h_dest[1], eh->h_dest[2],
                 eh->h_dest[3], eh->h_dest[4], eh->h_dest[5]));
     memcpy(buf + sizeof(struct ethhdr), ifm->m_data, ifm->m_len);
-    slirp_output(slirp->opaque, buf, ifm->m_len + ETH_HLEN);
+    slirp->output(slirp->opaque, buf, ifm->m_len + ETH_HLEN);
     return 1;
 }
 
diff --git a/slirp/slirp.h b/slirp/slirp.h
index b80725a0d6..e3d65d68ec 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -220,6 +220,7 @@ struct Slirp {
     GRand *grand;
     QEMUTimer *ra_timer;
 
+    slirp_output output;
     void *opaque;
 };
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 02/65] slirp: remove do_pty from fork_exec()
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 01/65] slirp: associate slirp_output callback with the Slirp context Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 03/65] slirp: replace ex_pty with ex_chardev Samuel Thibault
                   ` (64 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

QEMU uses fork_exec() with do_pty values 0 or 3.
Let's clean up some unused code.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/misc.c     | 55 ++++++++++++++----------------------------------
 slirp/misc.h     |  2 +-
 slirp/tcp_subr.c |  4 +---
 3 files changed, 18 insertions(+), 43 deletions(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index 57bdd808e2..e69d5f42c3 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -63,7 +63,7 @@ int add_exec(struct ex_list **ex_ptr, int do_pty, char *exec,
 #ifdef _WIN32
 
 int
-fork_exec(struct socket *so, const char *ex, int do_pty)
+fork_exec(struct socket *so, const char *ex)
 {
     /* not implemented */
     return 0;
@@ -77,13 +77,9 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
  * process, which connects to this socket, after which we
  * exec the wanted program.  If something (strange) happens,
  * the accept() call could block us forever.
- *
- * do_pty = 0   Fork/exec inetd style
- * do_pty = 1   Fork/exec using slirp.telnetd
- * do_ptr = 2   Fork/exec using pty
  */
 int
-fork_exec(struct socket *so, const char *ex, int do_pty)
+fork_exec(struct socket *so, const char *ex)
 {
         int s, cs;
         struct sockaddr_in addr, csaddr;
@@ -100,26 +96,20 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
 	DEBUG_CALL("fork_exec");
 	DEBUG_ARG("so = %p", so);
 	DEBUG_ARG("ex = %p", ex);
-	DEBUG_ARG("do_pty = %x", do_pty);
-
-	if (do_pty == 2) {
-                return 0;
-	} else {
-		addr.sin_family = AF_INET;
-		addr.sin_port = 0;
-		addr.sin_addr.s_addr = INADDR_ANY;
 
-		if ((s = qemu_socket(AF_INET, SOCK_STREAM, 0)) < 0 ||
-		    bind(s, (struct sockaddr *)&addr, addrlen) < 0 ||
-		    listen(s, 1) < 0) {
-			error_report("Error: inet socket: %s", strerror(errno));
-			if (s >= 0) {
-			    closesocket(s);
-			}
+    addr.sin_family = AF_INET;
+    addr.sin_port = 0;
+    addr.sin_addr.s_addr = INADDR_ANY;
 
-			return 0;
-		}
-	}
+    s = qemu_socket(AF_INET, SOCK_STREAM, 0);
+    if (s < 0 || bind(s, (struct sockaddr *)&addr, addrlen) < 0 ||
+        listen(s, 1) < 0) {
+        error_report("Error: inet socket: %s", strerror(errno));
+        if (s >= 0) {
+            closesocket(s);
+        }
+        return 0;
+    }
 
         if (getsockname(s, (struct sockaddr *)&csaddr, &csaddrlen) < 0) {
             closesocket(s);
@@ -166,13 +156,7 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
 
 		i = 0;
 		bptr = g_strdup(ex); /* No need to free() this */
-		if (do_pty == 1) {
-			/* Setup "slirp.telnetd -x" */
-			argv[i++] = "slirp.telnetd";
-			argv[i++] = "-x";
-			argv[i++] = bptr;
-		} else
-		   do {
+        do {
 			/* Change the string into argv[] */
 			curarg = bptr;
 			while (*bptr != ' ' && *bptr != (char)0)
@@ -180,7 +164,7 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
 			c = *bptr;
 			*bptr++ = (char)0;
 			argv[i++] = g_strdup(curarg);
-		   } while (c);
+        } while (c);
 
                 argv[i] = NULL;
 		execvp(argv[0], (char **)argv);
@@ -206,13 +190,6 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
                 opt = 1;
                 qemu_setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));
 		qemu_set_nonblock(so->s);
-
-		/* Append the telnet options now */
-                if (so->so_m != NULL && do_pty == 1)  {
-			sbappend(so, so->so_m);
-                        so->so_m = NULL;
-		}
-
 		return 1;
 	}
 }
diff --git a/slirp/misc.h b/slirp/misc.h
index 5211bbd30a..897650aea1 100644
--- a/slirp/misc.h
+++ b/slirp/misc.h
@@ -53,6 +53,6 @@ struct slirp_quehead {
 void slirp_insque(void *, void *);
 void slirp_remque(void *);
 int add_exec(struct ex_list **, int, char *, struct in_addr, int);
-int fork_exec(struct socket *so, const char *ex, int do_pty);
+int fork_exec(struct socket *so, const char *ex);
 
 #endif
diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index fa61349cbb..0ccd8e1a96 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -951,7 +951,6 @@ int tcp_ctl(struct socket *so)
     Slirp *slirp = so->slirp;
     struct sbuf *sb = &so->so_snd;
     struct ex_list *ex_ptr;
-    int do_pty;
 
     DEBUG_CALL("tcp_ctl");
     DEBUG_ARG("so = %p", so);
@@ -966,9 +965,8 @@ int tcp_ctl(struct socket *so)
                     so->extra = (void *)ex_ptr->ex_exec;
                     return 1;
                 }
-                do_pty = ex_ptr->ex_pty;
                 DEBUG_MISC((dfd, " executing %s\n", ex_ptr->ex_exec));
-                return fork_exec(so, ex_ptr->ex_exec, do_pty);
+                return fork_exec(so, ex_ptr->ex_exec);
             }
         }
     }
-- 
2.20.1

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

* [Qemu-devel] [PULL 03/65] slirp: replace ex_pty with ex_chardev
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 01/65] slirp: associate slirp_output callback with the Slirp context Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 02/65] slirp: remove do_pty from fork_exec() Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 04/65] slirp: use a dedicated field for chardev pointer Samuel Thibault
                   ` (63 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

do_pty == 3 means to talk to a chardev.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/misc.c     | 2 +-
 slirp/misc.h     | 2 +-
 slirp/slirp.c    | 4 ++--
 slirp/tcp_subr.c | 2 +-
 4 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index e69d5f42c3..8f0b6004bd 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -53,7 +53,7 @@ int add_exec(struct ex_list **ex_ptr, int do_pty, char *exec,
 	*ex_ptr = g_new(struct ex_list, 1);
 	(*ex_ptr)->ex_fport = port;
 	(*ex_ptr)->ex_addr = addr;
-	(*ex_ptr)->ex_pty = do_pty;
+	(*ex_ptr)->ex_chardev = do_pty == 3;
 	(*ex_ptr)->ex_exec = (do_pty == 3) ? exec : g_strdup(exec);
 	(*ex_ptr)->ex_next = tmp_ptr;
 	return 0;
diff --git a/slirp/misc.h b/slirp/misc.h
index 897650aea1..1f8d11def6 100644
--- a/slirp/misc.h
+++ b/slirp/misc.h
@@ -9,7 +9,7 @@
 #define MISC_H
 
 struct ex_list {
-	int ex_pty;			/* Do we want a pty? */
+	int ex_chardev;
 	struct in_addr ex_addr;		/* Server address */
 	int ex_fport;                   /* Port to telnet to */
 	const char *ex_exec;            /* Command line of what to exec */
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 4d4c2c13b5..0498a092b9 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -1455,7 +1455,7 @@ static void slirp_state_save(QEMUFile *f, void *opaque)
     struct ex_list *ex_ptr;
 
     for (ex_ptr = slirp->exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next)
-        if (ex_ptr->ex_pty == 3) {
+        if (ex_ptr->ex_chardev) {
             struct socket *so;
             so = slirp_find_ctl_socket(slirp, ex_ptr->ex_addr,
                                        ntohs(ex_ptr->ex_fport));
@@ -1490,7 +1490,7 @@ static int slirp_state_load(QEMUFile *f, void *opaque, int version_id)
             return -EINVAL;
         }
         for (ex_ptr = slirp->exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
-            if (ex_ptr->ex_pty == 3 &&
+            if (ex_ptr->ex_chardev &&
                 so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr &&
                 so->so_fport == ex_ptr->ex_fport) {
                 break;
diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index 0ccd8e1a96..dc19eea55a 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -960,7 +960,7 @@ int tcp_ctl(struct socket *so)
         for (ex_ptr = slirp->exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
             if (ex_ptr->ex_fport == so->so_fport &&
                 so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr) {
-                if (ex_ptr->ex_pty == 3) {
+                if (ex_ptr->ex_chardev) {
                     so->s = -1;
                     so->extra = (void *)ex_ptr->ex_exec;
                     return 1;
-- 
2.20.1

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

* [Qemu-devel] [PULL 04/65] slirp: use a dedicated field for chardev pointer
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (2 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 03/65] slirp: replace ex_pty with ex_chardev Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 05/65] slirp: remove unused EMU_RSH Samuel Thibault
                   ` (62 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Let's not mix command line and chardev pointers.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 net/slirp.c      |  8 ++++----
 slirp/libslirp.h |  2 +-
 slirp/misc.c     | 11 +++++++----
 slirp/misc.h     |  4 ++--
 slirp/slirp.c    |  5 +++--
 slirp/tcp_subr.c |  2 +-
 6 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/net/slirp.c b/net/slirp.c
index dd06b0189e..58d880de8d 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -709,8 +709,8 @@ static int slirp_smb(SlirpState* s, const char *exported_dir,
              CONFIG_SMBD_COMMAND, s->smb_dir, smb_conf);
     g_free(smb_conf);
 
-    if (slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 139) < 0 ||
-        slirp_add_exec(s->slirp, 0, smb_cmdline, &vserver_addr, 445) < 0) {
+    if (slirp_add_exec(s->slirp, NULL, smb_cmdline, &vserver_addr, 139) < 0 ||
+        slirp_add_exec(s->slirp, NULL, smb_cmdline, &vserver_addr, 445) < 0) {
         slirp_smb_cleanup(s);
         g_free(smb_cmdline);
         error_setg(errp, "Conflicting/invalid smbserver address");
@@ -774,7 +774,7 @@ static int slirp_guestfwd(SlirpState *s, const char *config_str, Error **errp)
     snprintf(buf, sizeof(buf), "guestfwd.tcp.%d", port);
 
     if ((strlen(p) > 4) && !strncmp(p, "cmd:", 4)) {
-        if (slirp_add_exec(s->slirp, 0, &p[4], &server, port) < 0) {
+        if (slirp_add_exec(s->slirp, NULL, &p[4], &server, port) < 0) {
             error_setg(errp, "Conflicting/invalid host:port in guest "
                        "forwarding rule '%s'", config_str);
             return -1;
@@ -801,7 +801,7 @@ static int slirp_guestfwd(SlirpState *s, const char *config_str, Error **errp)
             return -1;
         }
 
-        if (slirp_add_exec(s->slirp, 3, &fwd->hd, &server, port) < 0) {
+        if (slirp_add_exec(s->slirp, &fwd->hd, NULL, &server, port) < 0) {
             error_setg(errp, "Conflicting/invalid host:port in guest "
                        "forwarding rule '%s'", config_str);
             g_free(fwd);
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index 52dbb9feb5..3e88dbaa01 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -35,7 +35,7 @@ int slirp_add_hostfwd(Slirp *slirp, int is_udp,
                       struct in_addr guest_addr, int guest_port);
 int slirp_remove_hostfwd(Slirp *slirp, int is_udp,
                          struct in_addr host_addr, int host_port);
-int slirp_add_exec(Slirp *slirp, int do_pty, const void *args,
+int slirp_add_exec(Slirp *slirp, void *chardev, const char *cmdline,
                    struct in_addr *guest_addr, int guest_port);
 
 void slirp_connection_info(Slirp *slirp, Monitor *mon);
diff --git a/slirp/misc.c b/slirp/misc.c
index 8f0b6004bd..2784fc420f 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -37,7 +37,7 @@ remque(void *a)
   element->qh_rlink = NULL;
 }
 
-int add_exec(struct ex_list **ex_ptr, int do_pty, char *exec,
+int add_exec(struct ex_list **ex_ptr, void *chardev, const char *cmdline,
              struct in_addr addr, int port)
 {
 	struct ex_list *tmp_ptr;
@@ -50,11 +50,14 @@ int add_exec(struct ex_list **ex_ptr, int do_pty, char *exec,
 	}
 
 	tmp_ptr = *ex_ptr;
-	*ex_ptr = g_new(struct ex_list, 1);
+	*ex_ptr = g_new0(struct ex_list, 1);
 	(*ex_ptr)->ex_fport = port;
 	(*ex_ptr)->ex_addr = addr;
-	(*ex_ptr)->ex_chardev = do_pty == 3;
-	(*ex_ptr)->ex_exec = (do_pty == 3) ? exec : g_strdup(exec);
+	if (chardev) {
+		(*ex_ptr)->ex_chardev = chardev;
+	} else {
+		(*ex_ptr)->ex_exec = g_strdup(cmdline);
+	}
 	(*ex_ptr)->ex_next = tmp_ptr;
 	return 0;
 }
diff --git a/slirp/misc.h b/slirp/misc.h
index 1f8d11def6..64ca88c3b7 100644
--- a/slirp/misc.h
+++ b/slirp/misc.h
@@ -9,7 +9,7 @@
 #define MISC_H
 
 struct ex_list {
-	int ex_chardev;
+	void *ex_chardev;
 	struct in_addr ex_addr;		/* Server address */
 	int ex_fport;                   /* Port to telnet to */
 	const char *ex_exec;            /* Command line of what to exec */
@@ -52,7 +52,7 @@ struct slirp_quehead {
 
 void slirp_insque(void *, void *);
 void slirp_remque(void *);
-int add_exec(struct ex_list **, int, char *, struct in_addr, int);
+int add_exec(struct ex_list **, void *, const char *, struct in_addr, int);
 int fork_exec(struct socket *so, const char *ex);
 
 #endif
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 0498a092b9..0de46084c0 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -1068,7 +1068,7 @@ int slirp_add_hostfwd(Slirp *slirp, int is_udp, struct in_addr host_addr,
     return 0;
 }
 
-int slirp_add_exec(Slirp *slirp, int do_pty, const void *args,
+int slirp_add_exec(Slirp *slirp, void *chardev, const char *cmdline,
                    struct in_addr *guest_addr, int guest_port)
 {
     if (!guest_addr->s_addr) {
@@ -1081,7 +1081,8 @@ int slirp_add_exec(Slirp *slirp, int do_pty, const void *args,
         guest_addr->s_addr == slirp->vnameserver_addr.s_addr) {
         return -1;
     }
-    return add_exec(&slirp->exec_list, do_pty, (char *)args, *guest_addr,
+
+    return add_exec(&slirp->exec_list, chardev, cmdline, *guest_addr,
                     htons(guest_port));
 }
 
diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index dc19eea55a..e7b2baa087 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -962,7 +962,7 @@ int tcp_ctl(struct socket *so)
                 so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr) {
                 if (ex_ptr->ex_chardev) {
                     so->s = -1;
-                    so->extra = (void *)ex_ptr->ex_exec;
+                    so->extra = ex_ptr->ex_chardev;
                     return 1;
                 }
                 DEBUG_MISC((dfd, " executing %s\n", ex_ptr->ex_exec));
-- 
2.20.1

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

* [Qemu-devel] [PULL 05/65] slirp: remove unused EMU_RSH
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (3 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 04/65] slirp: use a dedicated field for chardev pointer Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 06/65] slirp: rename /extra/chardev Samuel Thibault
                   ` (61 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

EMU_RSH handling was dropped in commit
0d62c4cfe21752df4c1d6e2c2398f15d5eaa794a.

The assignment, and subsequent free() of ex_ptr->ex_exec to so->extra
looks unsafe (double free is likely to occur).

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/misc.h     | 1 -
 slirp/slirp.c    | 2 --
 slirp/socket.c   | 4 ----
 slirp/tcp_subr.c | 1 -
 4 files changed, 8 deletions(-)

diff --git a/slirp/misc.h b/slirp/misc.h
index 64ca88c3b7..94829722cd 100644
--- a/slirp/misc.h
+++ b/slirp/misc.h
@@ -26,7 +26,6 @@ struct ex_list {
 #define EMU_REALAUDIO 0x5
 #define EMU_RLOGIN 0x6
 #define EMU_IDENT 0x7
-#define EMU_RSH 0x8
 
 #define EMU_NOCONNECT 0x10	/* Don't connect */
 
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 0de46084c0..fac7849195 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -1499,8 +1499,6 @@ static int slirp_state_load(QEMUFile *f, void *opaque, int version_id)
         }
         if (!ex_ptr)
             return -EINVAL;
-
-        so->extra = (void *)ex_ptr->ex_exec;
     }
 
     return vmstate_load_state(f, &vmstate_slirp, slirp, version_id);
diff --git a/slirp/socket.c b/slirp/socket.c
index c01d8696af..041ec5061a 100644
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -89,10 +89,6 @@ sofree(struct socket *so)
   soqfree(so, &slirp->if_fastq);
   soqfree(so, &slirp->if_batchq);
 
-  if (so->so_emu==EMU_RSH && so->extra) {
-	sofree(so->extra);
-	so->extra=NULL;
-  }
   if (so == slirp->tcp_last_so) {
       slirp->tcp_last_so = &slirp->tcb;
   } else if (so == slirp->udp_last_so) {
diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index e7b2baa087..fd7521854e 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -541,7 +541,6 @@ static const struct tos_t tcptos[] = {
 	  {0, 23, IPTOS_LOWDELAY, 0},	/* telnet */
 	  {0, 80, IPTOS_THROUGHPUT, 0},	/* WWW */
 	  {0, 513, IPTOS_LOWDELAY, EMU_RLOGIN|EMU_NOCONNECT},	/* rlogin */
-	  {0, 514, IPTOS_LOWDELAY, EMU_RSH|EMU_NOCONNECT},	/* shell */
 	  {0, 544, IPTOS_LOWDELAY, EMU_KSH},		/* kshell */
 	  {0, 543, IPTOS_LOWDELAY, 0},	/* klogin */
 	  {0, 6667, IPTOS_THROUGHPUT, EMU_IRC},	/* IRC */
-- 
2.20.1

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

* [Qemu-devel] [PULL 06/65] slirp: rename /extra/chardev
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (4 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 05/65] slirp: remove unused EMU_RSH Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 07/65] slirp: move internal function declarations Samuel Thibault
                   ` (60 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Now it's only used for the chardev pointer.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.c    | 4 ++--
 slirp/socket.h   | 2 +-
 slirp/tcp_subr.c | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/slirp/slirp.c b/slirp/slirp.c
index fac7849195..ab08694e37 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -1088,10 +1088,10 @@ int slirp_add_exec(Slirp *slirp, void *chardev, const char *cmdline,
 
 ssize_t slirp_send(struct socket *so, const void *buf, size_t len, int flags)
 {
-    if (so->s == -1 && so->extra) {
+    if (so->s == -1 && so->chardev) {
         /* XXX this blocks entire thread. Rewrite to use
          * qemu_chr_fe_write and background I/O callbacks */
-        qemu_chr_fe_write_all(so->extra, buf, len);
+        qemu_chr_fe_write_all(so->chardev, buf, len);
         return len;
     }
 
diff --git a/slirp/socket.h b/slirp/socket.h
index 2f224bc34f..930ed95972 100644
--- a/slirp/socket.h
+++ b/slirp/socket.h
@@ -67,7 +67,7 @@ struct socket {
 
   struct sbuf so_rcv;		/* Receive buffer */
   struct sbuf so_snd;		/* Send buffer */
-  void * extra;			/* Extra pointer */
+  void * chardev;
 };
 
 
diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index fd7521854e..4b40850c7a 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -961,7 +961,7 @@ int tcp_ctl(struct socket *so)
                 so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr) {
                 if (ex_ptr->ex_chardev) {
                     so->s = -1;
-                    so->extra = ex_ptr->ex_chardev;
+                    so->chardev = ex_ptr->ex_chardev;
                     return 1;
                 }
                 DEBUG_MISC((dfd, " executing %s\n", ex_ptr->ex_exec));
-- 
2.20.1

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

* [Qemu-devel] [PULL 07/65] slirp: move internal function declarations
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (5 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 06/65] slirp: rename /extra/chardev Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 08/65] slirp: remove Monitor dependency, return a string for info Samuel Thibault
                   ` (59 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Clarify that those functions are internal to slirp.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/libslirp.h | 3 ---
 slirp/slirp.h    | 3 +++
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index 3e88dbaa01..a4f390ee89 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -7,9 +7,6 @@ typedef struct Slirp Slirp;
 
 typedef void (*slirp_output)(void *opaque, const uint8_t *pkt, int pkt_len);
 
-int get_dns_addr(struct in_addr *pdns_addr);
-int get_dns6_addr(struct in6_addr *pdns6_addr, uint32_t *scope_id);
-
 Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork,
                   struct in_addr vnetmask, struct in_addr vhost,
                   bool in6_enabled,
diff --git a/slirp/slirp.h b/slirp/slirp.h
index e3d65d68ec..de299aa36c 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -232,6 +232,9 @@ extern Slirp *slirp_instance;
 
 void if_start(Slirp *);
 
+int get_dns_addr(struct in_addr *pdns_addr);
+int get_dns6_addr(struct in6_addr *pdns6_addr, uint32_t *scope_id);
+
 /* ncsi.c */
 void ncsi_input(Slirp *slirp, const uint8_t *pkt, int pkt_len);
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 08/65] slirp: remove Monitor dependency, return a string for info
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (6 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 07/65] slirp: move internal function declarations Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 09/65] slirp: fix slirp_add_exec() leaks Samuel Thibault
                   ` (58 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

There is nothing performance-sensitive in returning an allocated
string for info, and handling the monitor_printf() on the caller side.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 net/slirp.c      |  7 ++++---
 slirp/libslirp.h |  2 +-
 slirp/misc.c     | 23 +++++++++++++----------
 3 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/net/slirp.c b/net/slirp.c
index 58d880de8d..b7319ca6b2 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -828,10 +828,11 @@ void hmp_info_usernet(Monitor *mon, const QDict *qdict)
     QTAILQ_FOREACH(s, &slirp_stacks, entry) {
         int id;
         bool got_hub_id = net_hub_id_for_client(&s->nc, &id) == 0;
-        monitor_printf(mon, "Hub %d (%s):\n",
+        char *info = slirp_connection_info(s->slirp);
+        monitor_printf(mon, "Hub %d (%s):\n%s",
                        got_hub_id ? id : -1,
-                       s->nc.name);
-        slirp_connection_info(s->slirp, mon);
+                       s->nc.name, info);
+        g_free(info);
     }
 }
 
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index a4f390ee89..04b6db9f49 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -35,7 +35,7 @@ int slirp_remove_hostfwd(Slirp *slirp, int is_udp,
 int slirp_add_exec(Slirp *slirp, void *chardev, const char *cmdline,
                    struct in_addr *guest_addr, int guest_port);
 
-void slirp_connection_info(Slirp *slirp, Monitor *mon);
+char *slirp_connection_info(Slirp *slirp);
 
 void slirp_socket_recv(Slirp *slirp, struct in_addr guest_addr,
                        int guest_port, const uint8_t *buf, int size);
diff --git a/slirp/misc.c b/slirp/misc.c
index 2784fc420f..ce323ef92e 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -8,7 +8,6 @@
 #include "qemu/osdep.h"
 #include "slirp.h"
 #include "libslirp.h"
-#include "monitor/monitor.h"
 #include "qemu/error-report.h"
 #include "qemu/main-loop.h"
 
@@ -198,8 +197,9 @@ fork_exec(struct socket *so, const char *ex)
 }
 #endif
 
-void slirp_connection_info(Slirp *slirp, Monitor *mon)
+char *slirp_connection_info(Slirp *slirp)
 {
+    GString *str = g_string_new(NULL);
     const char * const tcpstates[] = {
         [TCPS_CLOSED]       = "CLOSED",
         [TCPS_LISTEN]       = "LISTEN",
@@ -221,8 +221,9 @@ void slirp_connection_info(Slirp *slirp, Monitor *mon)
     const char *state;
     char buf[20];
 
-    monitor_printf(mon, "  Protocol[State]    FD  Source Address  Port   "
-                        "Dest. Address  Port RecvQ SendQ\n");
+    g_string_append_printf(str,
+        "  Protocol[State]    FD  Source Address  Port   "
+        "Dest. Address  Port RecvQ SendQ\n");
 
     for (so = slirp->tcb.so_next; so != &slirp->tcb; so = so->so_next) {
         if (so->so_state & SS_HOSTFWD) {
@@ -244,10 +245,10 @@ void slirp_connection_info(Slirp *slirp, Monitor *mon)
             dst_port = so->so_fport;
         }
         snprintf(buf, sizeof(buf), "  TCP[%s]", state);
-        monitor_printf(mon, "%-19s %3d %15s %5d ", buf, so->s,
+        g_string_append_printf(str, "%-19s %3d %15s %5d ", buf, so->s,
                        src.sin_addr.s_addr ? inet_ntoa(src.sin_addr) : "*",
                        ntohs(src.sin_port));
-        monitor_printf(mon, "%15s %5d %5d %5d\n",
+        g_string_append_printf(str, "%15s %5d %5d %5d\n",
                        inet_ntoa(dst_addr), ntohs(dst_port),
                        so->so_rcv.sb_cc, so->so_snd.sb_cc);
     }
@@ -267,10 +268,10 @@ void slirp_connection_info(Slirp *slirp, Monitor *mon)
             dst_addr = so->so_faddr;
             dst_port = so->so_fport;
         }
-        monitor_printf(mon, "%-19s %3d %15s %5d ", buf, so->s,
+        g_string_append_printf(str, "%-19s %3d %15s %5d ", buf, so->s,
                        src.sin_addr.s_addr ? inet_ntoa(src.sin_addr) : "*",
                        ntohs(src.sin_port));
-        monitor_printf(mon, "%15s %5d %5d %5d\n",
+        g_string_append_printf(str, "%15s %5d %5d %5d\n",
                        inet_ntoa(dst_addr), ntohs(dst_port),
                        so->so_rcv.sb_cc, so->so_snd.sb_cc);
     }
@@ -280,9 +281,11 @@ void slirp_connection_info(Slirp *slirp, Monitor *mon)
                      (so->so_expire - curtime) / 1000);
         src.sin_addr = so->so_laddr;
         dst_addr = so->so_faddr;
-        monitor_printf(mon, "%-19s %3d %15s  -    ", buf, so->s,
+        g_string_append_printf(str, "%-19s %3d %15s  -    ", buf, so->s,
                        src.sin_addr.s_addr ? inet_ntoa(src.sin_addr) : "*");
-        monitor_printf(mon, "%15s  -    %5d %5d\n", inet_ntoa(dst_addr),
+        g_string_append_printf(str, "%15s  -    %5d %5d\n", inet_ntoa(dst_addr),
                        so->so_rcv.sb_cc, so->so_snd.sb_cc);
     }
+
+    return g_string_free(str, FALSE);
 }
-- 
2.20.1

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

* [Qemu-devel] [PULL 09/65] slirp: fix slirp_add_exec() leaks
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (7 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 08/65] slirp: remove Monitor dependency, return a string for info Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 10/65] slirp: replace the poor-man string split with g_strsplit() Samuel Thibault
                   ` (57 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Free the list elements allocated in add_exec().

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/misc.h  | 2 +-
 slirp/slirp.c | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/slirp/misc.h b/slirp/misc.h
index 94829722cd..0bc5e74bc5 100644
--- a/slirp/misc.h
+++ b/slirp/misc.h
@@ -12,7 +12,7 @@ struct ex_list {
 	void *ex_chardev;
 	struct in_addr ex_addr;		/* Server address */
 	int ex_fport;                   /* Port to telnet to */
-	const char *ex_exec;            /* Command line of what to exec */
+	char *ex_exec;                  /* Command line of what to exec */
 	struct ex_list *ex_next;
 };
 
diff --git a/slirp/slirp.c b/slirp/slirp.c
index ab08694e37..1627436e7d 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -342,6 +342,14 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork,
 
 void slirp_cleanup(Slirp *slirp)
 {
+    struct ex_list *e, *next;
+
+    for (e = slirp->exec_list; e; e = next) {
+        next = e->ex_next;
+        g_free(e->ex_exec);
+        g_free(e);
+    }
+
     QTAILQ_REMOVE(&slirp_instances, slirp, entry);
 
     unregister_savevm(NULL, "slirp", slirp);
-- 
2.20.1

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

* [Qemu-devel] [PULL 10/65] slirp: replace the poor-man string split with g_strsplit()
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (8 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 09/65] slirp: fix slirp_add_exec() leaks Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 11/65] slirp: remove dead declarations Samuel Thibault
                   ` (56 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Use the glib function for the work, fix a potential crash on >256 words.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/misc.c | 21 +++------------------
 1 file changed, 3 insertions(+), 18 deletions(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index ce323ef92e..4840187750 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -88,11 +88,8 @@ fork_exec(struct socket *so, const char *ex)
 	socklen_t addrlen = sizeof(addr);
         socklen_t csaddrlen = sizeof(csaddr);
 	int opt;
-	const char *argv[256];
-	/* don't want to clobber the original */
-	char *bptr;
-	const char *curarg;
-	int c, i, ret;
+	char **argv;
+	int ret;
 	pid_t pid;
 
 	DEBUG_CALL("fork_exec");
@@ -156,19 +153,7 @@ fork_exec(struct socket *so, const char *ex)
 		for (s = getdtablesize() - 1; s >= 3; s--)
 		   close(s);
 
-		i = 0;
-		bptr = g_strdup(ex); /* No need to free() this */
-        do {
-			/* Change the string into argv[] */
-			curarg = bptr;
-			while (*bptr != ' ' && *bptr != (char)0)
-			   bptr++;
-			c = *bptr;
-			*bptr++ = (char)0;
-			argv[i++] = g_strdup(curarg);
-        } while (c);
-
-                argv[i] = NULL;
+                argv = g_strsplit(ex, " ", -1);
 		execvp(argv[0], (char **)argv);
 
 		/* Ooops, failed, let's tell the user why */
-- 
2.20.1

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

* [Qemu-devel] [PULL 11/65] slirp: remove dead declarations
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (9 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 10/65] slirp: replace the poor-man string split with g_strsplit() Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 12/65] slirp: add tftp tracing Samuel Thibault
                   ` (55 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

An overdue cleanup. Remaining declarations could probably be moved in
other headers, such as slirp.h.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/main.h | 29 -----------------------------
 1 file changed, 29 deletions(-)

diff --git a/slirp/main.h b/slirp/main.h
index 90053ce5ec..e04677944f 100644
--- a/slirp/main.h
+++ b/slirp/main.h
@@ -12,38 +12,9 @@
 #include <sys/select.h>
 #endif
 
-#define TOWRITEMAX 512
-
-extern int slirp_socket;
-extern int slirp_socket_unit;
-extern int slirp_socket_port;
-extern uint32_t slirp_socket_addr;
-extern char *slirp_socket_passwd;
-extern int ctty_closed;
-
-/*
- * Get the difference in 2 times from updtim()
- * Allow for wraparound times, "just in case"
- * x is the greater of the 2 (current time) and y is
- * what it's being compared against.
- */
-#define TIME_DIFF(x,y) (x)-(y) < 0 ? ~0-(y)+(x) : (x)-(y)
-
-extern char *slirp_tty;
-extern char *exec_shell;
 extern u_int curtime;
 extern struct in_addr loopback_addr;
 extern unsigned long loopback_mask;
-extern char *username;
-extern char *socket_path;
-extern int towrite_max;
-extern int ppp_exit;
-extern int tcp_keepintvl;
-
-#define PROTO_SLIP 0x1
-#ifdef USE_PPP
-#define PROTO_PPP 0x2
-#endif
 
 int if_encap(Slirp *slirp, struct mbuf *ifm);
 ssize_t slirp_send(struct socket *so, const void *buf, size_t len, int flags);
-- 
2.20.1

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

* [Qemu-devel] [PULL 12/65] slirp: add tftp tracing
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (10 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 11/65] slirp: remove dead declarations Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 13/65] slirp: move socket pair creation in helper function Samuel Thibault
                   ` (54 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Gerd Hoffmann, stefanha, jan.kiszka, Liam Merwick,
	Philippe Mathieu-Daudé,
	Samuel Thibault

From: Gerd Hoffmann <kraxel@redhat.com>

Useful when debugging pxeboot, to see what the guest tries to do.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Liam Merwick <liam.merwick@oracle.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 Makefile.objs      | 1 +
 slirp/tftp.c       | 3 +++
 slirp/trace-events | 5 +++++
 3 files changed, 9 insertions(+)
 create mode 100644 slirp/trace-events

diff --git a/Makefile.objs b/Makefile.objs
index 456115992a..2121120492 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -193,6 +193,7 @@ trace-events-subdirs += net
 trace-events-subdirs += qapi
 trace-events-subdirs += qom
 trace-events-subdirs += scsi
+trace-events-subdirs += slirp
 trace-events-subdirs += target/arm
 trace-events-subdirs += target/i386
 trace-events-subdirs += target/mips
diff --git a/slirp/tftp.c b/slirp/tftp.c
index a9bc4bb1b6..735b57aa55 100644
--- a/slirp/tftp.c
+++ b/slirp/tftp.c
@@ -26,6 +26,7 @@
 #include "slirp.h"
 #include "qemu-common.h"
 #include "qemu/cutils.h"
+#include "trace.h"
 
 static inline int tftp_session_in_use(struct tftp_session *spt)
 {
@@ -204,6 +205,7 @@ static void tftp_send_error(struct tftp_session *spt,
   struct mbuf *m;
   struct tftp_t *tp;
 
+  trace_slirp_tftp_error(msg);
   m = m_get(spt->slirp);
 
   if (!m) {
@@ -323,6 +325,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct sockaddr_storage *srcsas,
       break;
     }
   }
+  trace_slirp_tftp_rrq(req_fname);
 
   /* check mode */
   if ((pktlen - k) < 6) {
diff --git a/slirp/trace-events b/slirp/trace-events
new file mode 100644
index 0000000000..ff8f656e8c
--- /dev/null
+++ b/slirp/trace-events
@@ -0,0 +1,5 @@
+# See docs/devel/tracing.txt for syntax documentation.
+
+# slirp/tftp.c
+slirp_tftp_rrq(const char *file) "file: %s"
+slirp_tftp_error(const char *file) "msg: %s"
-- 
2.20.1

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

* [Qemu-devel] [PULL 13/65] slirp: move socket pair creation in helper function
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (11 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 12/65] slirp: add tftp tracing Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 14/65] slirp: remove unused M_TRAILINGSPACE Samuel Thibault
                   ` (53 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Originally, the patch was fixing a bunch of issues, but Peter beat me
to it with earlier commit "slirp: fork_exec(): create and connect
child socket before fork()".

Factor out socket pair creation, to simplify the fork_exec() code.
Use the name socketpair_with_oob() since the code is actually similar
to what socketpair() would do, except that it uses TCP sockets, for
SLIRP to be able to call send with MSG_OOB (since SO_OOBINLINE is set,
this could probably be faked instead on regular unix sockets though).

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/misc.c | 142 +++++++++++++++++++++++++--------------------------
 1 file changed, 71 insertions(+), 71 deletions(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index 4840187750..7362e14339 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -73,85 +73,92 @@ fork_exec(struct socket *so, const char *ex)
 
 #else
 
-/*
- * XXX This is ugly
- * We create and bind a socket, then fork off to another
- * process, which connects to this socket, after which we
- * exec the wanted program.  If something (strange) happens,
- * the accept() call could block us forever.
- */
+static int
+slirp_socketpair_with_oob(int sv[2])
+{
+    struct sockaddr_in addr = {
+        .sin_family = AF_INET,
+        .sin_port = 0,
+        .sin_addr.s_addr = INADDR_ANY,
+    };
+    socklen_t addrlen = sizeof(addr);
+    int ret, s;
+
+    sv[1] = -1;
+    s = qemu_socket(AF_INET, SOCK_STREAM, 0);
+    if (s < 0 || bind(s, (struct sockaddr *)&addr, addrlen) < 0 ||
+        listen(s, 1) < 0 ||
+        getsockname(s, (struct sockaddr *)&addr, &addrlen) < 0) {
+        goto err;
+    }
+
+    sv[1] = qemu_socket(AF_INET, SOCK_STREAM, 0);
+    if (sv[1] < 0) {
+        goto err;
+    }
+    /*
+     * This connect won't block because we've already listen()ed on
+     * the server end (even though we won't accept() the connection
+     * until later on).
+     */
+    do {
+        ret = connect(sv[1], (struct sockaddr *)&addr, addrlen);
+    } while (ret < 0 && errno == EINTR);
+    if (ret < 0) {
+        goto err;
+    }
+
+    do {
+        sv[0] = accept(s, (struct sockaddr *)&addr, &addrlen);
+    } while (sv[0] < 0 && errno == EINTR);
+    if (sv[0] < 0) {
+        goto err;
+    }
+
+    closesocket(s);
+    return 0;
+
+err:
+    error_report("Error: slirp_socketpair(): %s", strerror(errno));
+    if (s >= 0) {
+        closesocket(s);
+    }
+    if (sv[1] >= 0) {
+        closesocket(sv[1]);
+    }
+    return -1;
+}
+
 int
 fork_exec(struct socket *so, const char *ex)
 {
-        int s, cs;
-        struct sockaddr_in addr, csaddr;
-	socklen_t addrlen = sizeof(addr);
-        socklen_t csaddrlen = sizeof(csaddr);
-	int opt;
 	char **argv;
-	int ret;
+	int opt, c, sp[2];
 	pid_t pid;
 
 	DEBUG_CALL("fork_exec");
 	DEBUG_ARG("so = %p", so);
 	DEBUG_ARG("ex = %p", ex);
 
-    addr.sin_family = AF_INET;
-    addr.sin_port = 0;
-    addr.sin_addr.s_addr = INADDR_ANY;
-
-    s = qemu_socket(AF_INET, SOCK_STREAM, 0);
-    if (s < 0 || bind(s, (struct sockaddr *)&addr, addrlen) < 0 ||
-        listen(s, 1) < 0) {
-        error_report("Error: inet socket: %s", strerror(errno));
-        if (s >= 0) {
-            closesocket(s);
-        }
+    if (slirp_socketpair_with_oob(sp) < 0) {
         return 0;
     }
 
-        if (getsockname(s, (struct sockaddr *)&csaddr, &csaddrlen) < 0) {
-            closesocket(s);
-            return 0;
-        }
-        cs = qemu_socket(AF_INET, SOCK_STREAM, 0);
-        if (cs < 0) {
-            closesocket(s);
-            return 0;
-        }
-        csaddr.sin_addr = loopback_addr;
-        /*
-         * This connect won't block because we've already listen()ed on
-         * the server end (even though we won't accept() the connection
-         * until later on).
-         */
-        do {
-            ret = connect(cs, (struct sockaddr *)&csaddr, csaddrlen);
-        } while (ret < 0 && errno == EINTR);
-        if (ret < 0) {
-            closesocket(s);
-            closesocket(cs);
-            return 0;
-        }
-
 	pid = fork();
 	switch(pid) {
 	 case -1:
 		error_report("Error: fork failed: %s", strerror(errno));
-                closesocket(cs);
-		close(s);
+		closesocket(sp[0]);
+		closesocket(sp[1]);
 		return 0;
 
 	 case 0:
-                setsid();
-
-		/* Set the DISPLAY */
-                close(s);
-                dup2(cs, 0);
-                dup2(cs, 1);
-                dup2(cs, 2);
-		for (s = getdtablesize() - 1; s >= 3; s--)
-		   close(s);
+		setsid();
+		dup2(sp[1], 0);
+		dup2(sp[1], 1);
+		dup2(sp[1], 2);
+		for (c = getdtablesize() - 1; c >= 3; c--)
+		   close(c);
 
                 argv = g_strsplit(ex, " ", -1);
 		execvp(argv[0], (char **)argv);
@@ -163,19 +170,12 @@ fork_exec(struct socket *so, const char *ex)
 		exit(1);
 
 	 default:
+		so->s = sp[0];
+		closesocket(sp[1]);
 		qemu_add_child_watch(pid);
-                closesocket(cs);
-                /*
-                 * This should never block, because we already connect()ed
-                 * on the child end before we forked.
-                 */
-                do {
-                    so->s = accept(s, (struct sockaddr *)&addr, &addrlen);
-                } while (so->s < 0 && errno == EINTR);
-                closesocket(s);
-                socket_set_fast_reuse(so->s);
-                opt = 1;
-                qemu_setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));
+		socket_set_fast_reuse(so->s);
+		opt = 1;
+		qemu_setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));
 		qemu_set_nonblock(so->s);
 		return 1;
 	}
-- 
2.20.1

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

* [Qemu-devel] [PULL 14/65] slirp: remove unused M_TRAILINGSPACE
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (12 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 13/65] slirp: move socket pair creation in helper function Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 15/65] slirp: use a callback structure to interface with qemu Samuel Thibault
                   ` (52 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/mbuf.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/slirp/mbuf.h b/slirp/mbuf.h
index bfdf8c4577..cbf17e136b 100644
--- a/slirp/mbuf.h
+++ b/slirp/mbuf.h
@@ -72,7 +72,6 @@
  * How much free room there is
  */
 #define M_FREEROOM(m) (M_ROOM(m) - (m)->m_len)
-#define M_TRAILINGSPACE M_FREEROOM
 
 struct mbuf {
 	/* XXX should union some of these! */
-- 
2.20.1

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

* [Qemu-devel] [PULL 15/65] slirp: use a callback structure to interface with qemu
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (13 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 14/65] slirp: remove unused M_TRAILINGSPACE Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 16/65] slirp: remove PROBE_CONN dead-code Samuel Thibault
                   ` (51 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Philippe Mathieu-Daudé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

This will bring slirp a bit forward to the state of an independent
project.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 net/slirp.c      |  6 +++++-
 slirp/libslirp.h | 13 +++++++++++--
 slirp/ncsi.c     |  2 +-
 slirp/slirp.c    | 10 +++++-----
 slirp/slirp.h    |  2 +-
 5 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/net/slirp.c b/net/slirp.c
index b7319ca6b2..031c324f02 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -140,6 +140,10 @@ static NetClientInfo net_slirp_info = {
     .cleanup = net_slirp_cleanup,
 };
 
+static const SlirpCb slirp_cb = {
+    .output = net_slirp_output,
+};
+
 static int net_slirp_init(NetClientState *peer, const char *model,
                           const char *name, int restricted,
                           bool ipv4, const char *vnetwork, const char *vhost,
@@ -379,7 +383,7 @@ static int net_slirp_init(NetClientState *peer, const char *model,
                           vhostname, tftp_server_name,
                           tftp_export, bootfile, dhcp,
                           dns, ip6_dns, dnssearch, vdomainname,
-                          net_slirp_output, s);
+                          &slirp_cb, s);
     QTAILQ_INSERT_TAIL(&slirp_stacks, s, entry);
 
     for (config = slirp_configs; config; config = config->next) {
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index 04b6db9f49..a5d1b27b5e 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -5,7 +5,16 @@
 
 typedef struct Slirp Slirp;
 
-typedef void (*slirp_output)(void *opaque, const uint8_t *pkt, int pkt_len);
+/*
+ * Callbacks from slirp
+ *
+ * The opaque parameter comes from the opaque parameter given to slirp_init().
+ */
+typedef struct SlirpCb {
+    /* Send an ethernet frame to the guest network.  */
+    void (*output)(void *opaque, const uint8_t *pkt, int pkt_len);
+} SlirpCb;
+
 
 Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork,
                   struct in_addr vnetmask, struct in_addr vhost,
@@ -17,7 +26,7 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork,
                   struct in_addr vdhcp_start, struct in_addr vnameserver,
                   struct in6_addr vnameserver6, const char **vdnssearch,
                   const char *vdomainname,
-                  slirp_output output,
+                  const SlirpCb *callbacks,
                   void *opaque);
 void slirp_cleanup(Slirp *slirp);
 
diff --git a/slirp/ncsi.c b/slirp/ncsi.c
index d7701f7785..10decfb5ef 100644
--- a/slirp/ncsi.c
+++ b/slirp/ncsi.c
@@ -163,5 +163,5 @@ void ncsi_input(Slirp *slirp, const uint8_t *pkt, int pkt_len)
     *pchecksum = htonl(checksum);
     ncsi_rsp_len += 4;
 
-    slirp->output(slirp->opaque, ncsi_reply, ETH_HLEN + ncsi_rsp_len);
+    slirp->cb->output(slirp->opaque, ncsi_reply, ETH_HLEN + ncsi_rsp_len);
 }
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 1627436e7d..bab49e83e3 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -288,14 +288,14 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork,
                   struct in_addr vdhcp_start, struct in_addr vnameserver,
                   struct in6_addr vnameserver6, const char **vdnssearch,
                   const char *vdomainname,
-                  slirp_output output,
+                  const SlirpCb *callbacks,
                   void *opaque)
 {
     Slirp *slirp = g_malloc0(sizeof(Slirp));
 
     slirp_init_once();
 
-    slirp->output = output;
+    slirp->cb = callbacks;
     slirp->grand = g_rand_new();
     slirp->restricted = restricted;
 
@@ -843,7 +843,7 @@ static void arp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len)
             rah->ar_sip = ah->ar_tip;
             memcpy(rah->ar_tha, ah->ar_sha, ETH_ALEN);
             rah->ar_tip = ah->ar_sip;
-            slirp->output(slirp->opaque, arp_reply, sizeof(arp_reply));
+            slirp->cb->output(slirp->opaque, arp_reply, sizeof(arp_reply));
         }
         break;
     case ARPOP_REPLY:
@@ -943,7 +943,7 @@ static int if_encap4(Slirp *slirp, struct mbuf *ifm, struct ethhdr *eh,
             /* target IP */
             rah->ar_tip = iph->ip_dst.s_addr;
             slirp->client_ipaddr = iph->ip_dst;
-            slirp->output(slirp->opaque, arp_req, sizeof(arp_req));
+            slirp->cb->output(slirp->opaque, arp_req, sizeof(arp_req));
             ifm->resolution_requested = true;
 
             /* Expire request and drop outgoing packet after 1 second */
@@ -1029,7 +1029,7 @@ int if_encap(Slirp *slirp, struct mbuf *ifm)
                 eh->h_dest[0], eh->h_dest[1], eh->h_dest[2],
                 eh->h_dest[3], eh->h_dest[4], eh->h_dest[5]));
     memcpy(buf + sizeof(struct ethhdr), ifm->m_data, ifm->m_len);
-    slirp->output(slirp->opaque, buf, ifm->m_len + ETH_HLEN);
+    slirp->cb->output(slirp->opaque, buf, ifm->m_len + ETH_HLEN);
     return 1;
 }
 
diff --git a/slirp/slirp.h b/slirp/slirp.h
index de299aa36c..f7c087456a 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -220,7 +220,7 @@ struct Slirp {
     GRand *grand;
     QEMUTimer *ra_timer;
 
-    slirp_output output;
+    const SlirpCb *cb;
     void *opaque;
 };
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 16/65] slirp: remove PROBE_CONN dead-code
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (14 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 15/65] slirp: use a callback structure to interface with qemu Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 17/65] slirp: remove FULL_BOLT Samuel Thibault
                   ` (50 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Philippe Mathieu-Daudé, Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Nobody cares for over 14y. Somebody can revert or rewrite if
interested by that.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.c        | 41 -----------------------------------------
 slirp/slirp_config.h |  4 ----
 2 files changed, 45 deletions(-)

diff --git a/slirp/slirp.c b/slirp/slirp.c
index bab49e83e3..76e94eb1cd 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -699,47 +699,6 @@ void slirp_pollfds_poll(GArray *pollfds, int select_error)
                         }
                     }
                 }
-
-                /*
-                 * Probe a still-connecting, non-blocking socket
-                 * to check if it's still alive
-                 */
-#ifdef PROBE_CONN
-                if (so->so_state & SS_ISFCONNECTING) {
-                    ret = qemu_recv(so->s, &ret, 0, 0);
-
-                    if (ret < 0) {
-                        /* XXX */
-                        if (errno == EAGAIN || errno == EWOULDBLOCK ||
-                            errno == EINPROGRESS || errno == ENOTCONN) {
-                            continue; /* Still connecting, continue */
-                        }
-
-                        /* else failed */
-                        so->so_state &= SS_PERSISTENT_MASK;
-                        so->so_state |= SS_NOFDREF;
-
-                        /* tcp_input will take care of it */
-                    } else {
-                        ret = send(so->s, &ret, 0, 0);
-                        if (ret < 0) {
-                            /* XXX */
-                            if (errno == EAGAIN || errno == EWOULDBLOCK ||
-                                errno == EINPROGRESS || errno == ENOTCONN) {
-                                continue;
-                            }
-                            /* else failed */
-                            so->so_state &= SS_PERSISTENT_MASK;
-                            so->so_state |= SS_NOFDREF;
-                        } else {
-                            so->so_state &= ~SS_ISFCONNECTING;
-                        }
-
-                    }
-                    tcp_input((struct mbuf *)NULL, sizeof(struct ip), so,
-                              so->so_ffamily);
-                } /* SS_ISFCONNECTING */
-#endif
             }
 
             /*
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index c59f655207..721667e3ef 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -2,10 +2,6 @@
  * User definable configuration options
  */
 
-/* Define if you want the connection to be probed */
-/* XXX Not working yet, so ignore this for now */
-#undef PROBE_CONN
-
 /* Define to 1 if you want KEEPALIVE timers */
 #define DO_KEEPALIVE 0
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 17/65] slirp: remove FULL_BOLT
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (15 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 16/65] slirp: remove PROBE_CONN dead-code Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 18/65] slirp: remove the disabled readv()/writev() code path Samuel Thibault
                   ` (49 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Looking at git history, this looks like something from the past, when
there was a tty layer. Let's remove it.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/if.c           | 2 --
 slirp/slirp_config.h | 7 -------
 2 files changed, 9 deletions(-)

diff --git a/slirp/if.c b/slirp/if.c
index 590753c658..aa88cc4e76 100644
--- a/slirp/if.c
+++ b/slirp/if.c
@@ -131,12 +131,10 @@ diddit:
 		}
 	}
 
-#ifndef FULL_BOLT
 	/*
 	 * This prevents us from malloc()ing too many mbufs
 	 */
 	if_start(ifm->slirp);
-#endif
 }
 
 /*
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index 721667e3ef..f0cc1c781b 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -5,13 +5,6 @@
 /* Define to 1 if you want KEEPALIVE timers */
 #define DO_KEEPALIVE 0
 
-/* Define this if you want slirp to write to the tty as fast as it can */
-/* This should only be set if you are using load-balancing, slirp does a */
-/* pretty good job on single modems already, and seting this will make */
-/* interactive sessions less responsive */
-/* XXXXX Talk about having fast modem as unit 0 */
-#undef FULL_BOLT
-
 /*********************************************************/
 /*
  * Autoconf defined configuration options
-- 
2.20.1

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

* [Qemu-devel] [PULL 18/65] slirp: remove the disabled readv()/writev() code path
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (16 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 17/65] slirp: remove FULL_BOLT Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 19/65] slirp: remove HAVE_SYS_SIGNAL_H Samuel Thibault
                   ` (48 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

The soread() function may be used on datagram sockets, and would
provide different behaviour if HAVE_READV was set, on empty datagrams.
This looks like a minor optimization, that never has been a strong
goal for slirp.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp_config.h |  3 ---
 slirp/socket.c       | 15 ---------------
 2 files changed, 18 deletions(-)

diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index f0cc1c781b..3ce64e088e 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -29,9 +29,6 @@
 /* Define if the machine is big endian */
 //#undef HOST_WORDS_BIGENDIAN
 
-/* Define if you have readv */
-#undef HAVE_READV
-
 /* Define if iovec needs to be declared */
 #undef DECLARE_IOVEC
 #ifdef _WIN32
diff --git a/slirp/socket.c b/slirp/socket.c
index 041ec5061a..7012c7c07d 100644
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -187,12 +187,7 @@ soread(struct socket *so)
 	 */
 	sopreprbuf(so, iov, &n);
 
-#ifdef HAVE_READV
-	nn = readv(so->s, (struct iovec *)iov, n);
-	DEBUG_MISC((dfd, " ... read nn = %d bytes\n", nn));
-#else
 	nn = qemu_recv(so->s, iov[0].iov_base, iov[0].iov_len,0);
-#endif
 	if (nn <= 0) {
 		if (nn < 0 && (errno == EINTR || errno == EAGAIN))
 			return 0;
@@ -226,7 +221,6 @@ soread(struct socket *so)
 		}
 	}
 
-#ifndef HAVE_READV
 	/*
 	 * If there was no error, try and read the second time round
 	 * We read again if n = 2 (ie, there's another part of the buffer)
@@ -244,7 +238,6 @@ soread(struct socket *so)
         }
 
 	DEBUG_MISC((dfd, " ... read nn = %d bytes\n", nn));
-#endif
 
 	/* Update fields */
 	sb->sb_cc += nn;
@@ -452,13 +445,7 @@ sowrite(struct socket *so)
 	}
 	/* Check if there's urgent data to send, and if so, send it */
 
-#ifdef HAVE_READV
-	nn = writev(so->s, (const struct iovec *)iov, n);
-
-	DEBUG_MISC((dfd, "  ... wrote nn = %d bytes\n", nn));
-#else
 	nn = slirp_send(so, iov[0].iov_base, iov[0].iov_len,0);
-#endif
 	/* This should never happen, but people tell me it does *shrug* */
 	if (nn < 0 && (errno == EAGAIN || errno == EINTR))
 		return 0;
@@ -467,7 +454,6 @@ sowrite(struct socket *so)
 		goto err_disconnected;
 	}
 
-#ifndef HAVE_READV
 	if (n == 2 && nn == iov[0].iov_len) {
             int ret;
             ret = slirp_send(so, iov[1].iov_base, iov[1].iov_len,0);
@@ -475,7 +461,6 @@ sowrite(struct socket *so)
                 nn += ret;
         }
         DEBUG_MISC((dfd, "  ... wrote nn = %d bytes\n", nn));
-#endif
 
 	/* Update sbuf */
 	sb->sb_cc -= nn;
-- 
2.20.1

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

* [Qemu-devel] [PULL 19/65] slirp: remove HAVE_SYS_SIGNAL_H
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (17 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 18/65] slirp: remove the disabled readv()/writev() code path Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 20/65] slirp: remove unused HAVE_SYS_BITYPES_H Samuel Thibault
                   ` (47 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.h        | 3 ---
 slirp/slirp_config.h | 3 ---
 2 files changed, 6 deletions(-)

diff --git a/slirp/slirp.h b/slirp/slirp.h
index f7c087456a..4c3c672ee6 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -35,9 +35,6 @@ typedef char *caddr_t;
 #ifndef NO_UNIX_SOCKETS
 #include <sys/un.h>
 #endif
-#ifdef HAVE_SYS_SIGNAL_H
-# include <sys/signal.h>
-#endif
 #ifndef _WIN32
 #include <sys/socket.h>
 #endif
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index 3ce64e088e..2605c4222b 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -50,9 +50,6 @@
 #define HAVE_ARPA_INET_H
 #endif
 
-/* Define if you have sys/signal.h */
-#undef HAVE_SYS_SIGNAL_H
-
 /* Define if you have sys/stropts.h */
 #undef HAVE_SYS_STROPTS_H
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 20/65] slirp: remove unused HAVE_SYS_BITYPES_H
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (18 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 19/65] slirp: remove HAVE_SYS_SIGNAL_H Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 21/65] slirp: remove NO_UNIX_SOCKETS Samuel Thibault
                   ` (46 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.h        | 4 ----
 slirp/slirp_config.h | 3 ---
 2 files changed, 7 deletions(-)

diff --git a/slirp/slirp.h b/slirp/slirp.h
index 4c3c672ee6..57955a8965 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -19,10 +19,6 @@ typedef char *caddr_t;
 # endif
 #endif
 
-#ifdef HAVE_SYS_BITYPES_H
-# include <sys/bitypes.h>
-#endif
-
 #ifndef _WIN32
 #include <sys/uio.h>
 #endif
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index 2605c4222b..a205dc8c28 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -23,9 +23,6 @@
 #define HAVE_SYS_FILIO_H
 #endif
 
-/* Define if you have sys/bitypes.h */
-#undef HAVE_SYS_BITYPES_H
-
 /* Define if the machine is big endian */
 //#undef HOST_WORDS_BIGENDIAN
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 21/65] slirp: remove NO_UNIX_SOCKETS
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (19 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 20/65] slirp: remove unused HAVE_SYS_BITYPES_H Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 22/65] slirp: remove unused HAVE_SYS_STROPTS_H Samuel Thibault
                   ` (45 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.h        | 3 ---
 slirp/slirp_config.h | 6 ------
 2 files changed, 9 deletions(-)

diff --git a/slirp/slirp.h b/slirp/slirp.h
index 57955a8965..fba77d0c3d 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -28,9 +28,6 @@ typedef char *caddr_t;
 #include <arpa/inet.h>
 #endif
 
-#ifndef NO_UNIX_SOCKETS
-#include <sys/un.h>
-#endif
 #ifndef _WIN32
 #include <sys/socket.h>
 #endif
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index a205dc8c28..4417b05d1c 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -58,9 +58,3 @@
 #ifndef _WIN32
 #define HAVE_INET_ATON
 #endif
-
-/* Define if you DON'T have unix-domain sockets */
-#undef NO_UNIX_SOCKETS
-#ifdef _WIN32
-#define NO_UNIX_SOCKETS
-#endif
-- 
2.20.1

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

* [Qemu-devel] [PULL 22/65] slirp: remove unused HAVE_SYS_STROPTS_H
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (20 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 21/65] slirp: remove NO_UNIX_SOCKETS Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 23/65] slirp: remove unused HAVE_ARPA_INET_H Samuel Thibault
                   ` (44 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.h        | 5 -----
 slirp/slirp_config.h | 3 ---
 2 files changed, 8 deletions(-)

diff --git a/slirp/slirp.h b/slirp/slirp.h
index fba77d0c3d..400f585cec 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -54,11 +54,6 @@ typedef char *caddr_t;
 #define remque slirp_remque
 #define quehead slirp_quehead
 
-#ifdef HAVE_SYS_STROPTS_H
-#include <sys/stropts.h>
-#endif
-
-
 #include "debug.h"
 
 #include "qemu/queue.h"
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index 4417b05d1c..47811e36dc 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -47,9 +47,6 @@
 #define HAVE_ARPA_INET_H
 #endif
 
-/* Define if you have sys/stropts.h */
-#undef HAVE_SYS_STROPTS_H
-
 /* Define to sizeof(char *) */
 #define SIZEOF_CHAR_P (HOST_LONG_BITS / 8)
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 23/65] slirp: remove unused HAVE_ARPA_INET_H
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (21 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 22/65] slirp: remove unused HAVE_SYS_STROPTS_H Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 24/65] slirp: remove unused HAVE_SYS_WAIT_H Samuel Thibault
                   ` (43 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp_config.h | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index 47811e36dc..e95284071a 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -41,12 +41,6 @@
 #define HAVE_SYS_SELECT_H
 #endif
 
-/* Define if you have arpa/inet.h */
-#undef HAVE_ARPA_INET_H
-#ifndef _WIN32
-#define HAVE_ARPA_INET_H
-#endif
-
 /* Define to sizeof(char *) */
 #define SIZEOF_CHAR_P (HOST_LONG_BITS / 8)
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 24/65] slirp: remove unused HAVE_SYS_WAIT_H
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (22 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 23/65] slirp: remove unused HAVE_ARPA_INET_H Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 25/65] slirp: remove unused HAVE_SYS_SELECT_H Samuel Thibault
                   ` (42 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.h        | 4 ----
 slirp/slirp_config.h | 3 ---
 2 files changed, 7 deletions(-)

diff --git a/slirp/slirp.h b/slirp/slirp.h
index 400f585cec..1f47848271 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -40,10 +40,6 @@ typedef char *caddr_t;
 # include <sys/select.h>
 #endif
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 #ifdef HAVE_SYS_FILIO_H
 # include <sys/filio.h>
 #endif
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index e95284071a..9becb98e11 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -32,9 +32,6 @@
 #define DECLARE_IOVEC
 #endif
 
-/* Define if you have a POSIX.1 sys/wait.h */
-#undef HAVE_SYS_WAIT_H
-
 /* Define if you have sys/select.h */
 #undef HAVE_SYS_SELECT_H
 #ifndef _WIN32
-- 
2.20.1

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

* [Qemu-devel] [PULL 25/65] slirp: remove unused HAVE_SYS_SELECT_H
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (23 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 24/65] slirp: remove unused HAVE_SYS_WAIT_H Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 26/65] slirp: remove HAVE_SYS_IOCTL_H Samuel Thibault
                   ` (41 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/main.h         | 4 ----
 slirp/slirp.h        | 4 ----
 slirp/slirp_config.h | 6 ------
 3 files changed, 14 deletions(-)

diff --git a/slirp/main.h b/slirp/main.h
index e04677944f..4bc05fb904 100644
--- a/slirp/main.h
+++ b/slirp/main.h
@@ -8,10 +8,6 @@
 #ifndef SLIRP_MAIN_H
 #define SLIRP_MAIN_H
 
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
 extern u_int curtime;
 extern struct in_addr loopback_addr;
 extern unsigned long loopback_mask;
diff --git a/slirp/slirp.h b/slirp/slirp.h
index 1f47848271..7606de962f 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -36,10 +36,6 @@ typedef char *caddr_t;
 # include <sys/ioctl.h>
 #endif
 
-#ifdef HAVE_SYS_SELECT_H
-# include <sys/select.h>
-#endif
-
 #ifdef HAVE_SYS_FILIO_H
 # include <sys/filio.h>
 #endif
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index 9becb98e11..68e75f3873 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -32,12 +32,6 @@
 #define DECLARE_IOVEC
 #endif
 
-/* Define if you have sys/select.h */
-#undef HAVE_SYS_SELECT_H
-#ifndef _WIN32
-#define HAVE_SYS_SELECT_H
-#endif
-
 /* Define to sizeof(char *) */
 #define SIZEOF_CHAR_P (HOST_LONG_BITS / 8)
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 26/65] slirp: remove HAVE_SYS_IOCTL_H
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (24 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 25/65] slirp: remove unused HAVE_SYS_SELECT_H Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 27/65] slirp: remove HAVE_SYS_FILIO_H Samuel Thibault
                   ` (40 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.h        | 2 +-
 slirp/slirp_config.h | 6 ------
 2 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/slirp/slirp.h b/slirp/slirp.h
index 7606de962f..226bced429 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -32,7 +32,7 @@ typedef char *caddr_t;
 #include <sys/socket.h>
 #endif
 
-#if defined(HAVE_SYS_IOCTL_H)
+#ifndef _WIN32
 # include <sys/ioctl.h>
 #endif
 
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index 68e75f3873..0e78e92d94 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -11,12 +11,6 @@
  * You shouldn't need to touch any of these
  */
 
-/* Define if you have sys/ioctl.h */
-#undef HAVE_SYS_IOCTL_H
-#ifndef _WIN32
-#define HAVE_SYS_IOCTL_H
-#endif
-
 /* Define if you have sys/filio.h */
 #undef HAVE_SYS_FILIO_H
 #ifdef __APPLE__
-- 
2.20.1

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

* [Qemu-devel] [PULL 27/65] slirp: remove HAVE_SYS_FILIO_H
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (25 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 26/65] slirp: remove HAVE_SYS_IOCTL_H Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 28/65] slirp: remove unused DECLARE_IOVEC Samuel Thibault
                   ` (39 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.h        | 2 +-
 slirp/slirp_config.h | 6 ------
 2 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/slirp/slirp.h b/slirp/slirp.h
index 226bced429..4bbbba046e 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -36,7 +36,7 @@ typedef char *caddr_t;
 # include <sys/ioctl.h>
 #endif
 
-#ifdef HAVE_SYS_FILIO_H
+#ifdef __APPLE__
 # include <sys/filio.h>
 #endif
 
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index 0e78e92d94..f1ee927c15 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -11,12 +11,6 @@
  * You shouldn't need to touch any of these
  */
 
-/* Define if you have sys/filio.h */
-#undef HAVE_SYS_FILIO_H
-#ifdef __APPLE__
-#define HAVE_SYS_FILIO_H
-#endif
-
 /* Define if the machine is big endian */
 //#undef HOST_WORDS_BIGENDIAN
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 28/65] slirp: remove unused DECLARE_IOVEC
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (26 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 27/65] slirp: remove HAVE_SYS_FILIO_H Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 29/65] slirp: remove unused HAVE_INET_ATON Samuel Thibault
                   ` (38 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

It's actually qemu configure CONFIG_IOVEC that is being used.

slirp/ does not use it anyway

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp_config.h | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index f1ee927c15..833f25a965 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -14,12 +14,6 @@
 /* Define if the machine is big endian */
 //#undef HOST_WORDS_BIGENDIAN
 
-/* Define if iovec needs to be declared */
-#undef DECLARE_IOVEC
-#ifdef _WIN32
-#define DECLARE_IOVEC
-#endif
-
 /* Define to sizeof(char *) */
 #define SIZEOF_CHAR_P (HOST_LONG_BITS / 8)
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 29/65] slirp: remove unused HAVE_INET_ATON
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (27 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 28/65] slirp: remove unused DECLARE_IOVEC Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 30/65] slirp: replace HOST_WORDS_BIGENDIAN with glib equivalent Samuel Thibault
                   ` (37 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp_config.h | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index 833f25a965..5126711849 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -16,9 +16,3 @@
 
 /* Define to sizeof(char *) */
 #define SIZEOF_CHAR_P (HOST_LONG_BITS / 8)
-
-/* Define if you have inet_aton */
-#undef HAVE_INET_ATON
-#ifndef _WIN32
-#define HAVE_INET_ATON
-#endif
-- 
2.20.1

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

* [Qemu-devel] [PULL 30/65] slirp: replace HOST_WORDS_BIGENDIAN with glib equivalent
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (28 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 29/65] slirp: remove unused HAVE_INET_ATON Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 31/65] slirp: replace SIZEOF_CHAR_P " Samuel Thibault
                   ` (36 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Philippe Mathieu-Daudé, Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

One more step towards making the project independent from QEMU.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/ip.h           | 8 +++++---
 slirp/ip6.h          | 3 ++-
 slirp/ip6_icmp.h     | 6 +++---
 slirp/slirp_config.h | 3 ---
 slirp/tcp.h          | 4 +++-
 5 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/slirp/ip.h b/slirp/ip.h
index 59cf4aa918..83fc9cdfbf 100644
--- a/slirp/ip.h
+++ b/slirp/ip.h
@@ -33,7 +33,9 @@
 #ifndef IP_H
 #define IP_H
 
-#ifdef HOST_WORDS_BIGENDIAN
+#include <glib.h>
+
+#if G_BYTE_ORDER == G_BIG_ENDIAN
 # undef NTOHL
 # undef NTOHS
 # undef HTONL
@@ -69,7 +71,7 @@ typedef uint32_t n_long;                 /* long as received from the net */
  * Structure of an internet header, naked of options.
  */
 struct ip {
-#ifdef HOST_WORDS_BIGENDIAN
+#if G_BYTE_ORDER == G_BIG_ENDIAN
 	uint8_t ip_v:4,			/* version */
 		ip_hl:4;		/* header length */
 #else
@@ -135,7 +137,7 @@ struct	ip_timestamp {
 	uint8_t	ipt_code;		/* IPOPT_TS */
 	uint8_t	ipt_len;		/* size of structure (variable) */
 	uint8_t	ipt_ptr;		/* index of current entry */
-#ifdef HOST_WORDS_BIGENDIAN
+#if G_BYTE_ORDER == G_BIG_ENDIAN
 	uint8_t	ipt_oflw:4,		/* overflow counter */
 		ipt_flg:4;		/* flags, see below */
 #else
diff --git a/slirp/ip6.h b/slirp/ip6.h
index b1bea43b3c..14e9c78735 100644
--- a/slirp/ip6.h
+++ b/slirp/ip6.h
@@ -6,6 +6,7 @@
 #ifndef SLIRP_IP6_H
 #define SLIRP_IP6_H
 
+#include <glib.h>
 #include "net/eth.h"
 
 #define ALLNODES_MULTICAST  { .s6_addr = \
@@ -113,7 +114,7 @@ static inline void in6_compute_ethaddr(struct in6_addr ip,
  * Structure of an internet header, naked of options.
  */
 struct ip6 {
-#ifdef HOST_WORDS_BIGENDIAN
+#if G_BYTE_ORDER == G_BIG_ENDIAN
     uint32_t
         ip_v:4,         /* version */
         ip_tc_hi:4,     /* traffic class */
diff --git a/slirp/ip6_icmp.h b/slirp/ip6_icmp.h
index b3378b17b5..32b0914055 100644
--- a/slirp/ip6_icmp.h
+++ b/slirp/ip6_icmp.h
@@ -34,7 +34,7 @@ struct ndp_rs {     /* Router Solicitation Message */
 
 struct ndp_ra {     /* Router Advertisement Message */
     uint8_t chl;    /* Cur Hop Limit */
-#ifdef HOST_WORDS_BIGENDIAN
+#if G_BYTE_ORDER == G_BIG_ENDIAN
     uint8_t
         M:1,
         O:1,
@@ -56,7 +56,7 @@ struct ndp_ns {     /* Neighbor Solicitation Message */
 } QEMU_PACKED;
 
 struct ndp_na {     /* Neighbor Advertisement Message */
-#ifdef HOST_WORDS_BIGENDIAN
+#if G_BYTE_ORDER == G_BIG_ENDIAN
     uint32_t
         R:1,                /* Router Flag */
         S:1,                /* Solicited Flag */
@@ -125,7 +125,7 @@ struct ndpopt {
 #define ndpopt_linklayer ndpopt_body.linklayer_addr
         struct prefixinfo {                     /* Prefix Information */
             uint8_t     prefix_length;
-#ifdef HOST_WORDS_BIGENDIAN
+#if G_BYTE_ORDER == G_BIG_ENDIAN
             uint8_t     L:1, A:1, reserved1:6;
 #else
             uint8_t     reserved1:6, A:1, L:1;
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index 5126711849..b2def6d20c 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -11,8 +11,5 @@
  * You shouldn't need to touch any of these
  */
 
-/* Define if the machine is big endian */
-//#undef HOST_WORDS_BIGENDIAN
-
 /* Define to sizeof(char *) */
 #define SIZEOF_CHAR_P (HOST_LONG_BITS / 8)
diff --git a/slirp/tcp.h b/slirp/tcp.h
index 174d3d960c..47aaea6c5b 100644
--- a/slirp/tcp.h
+++ b/slirp/tcp.h
@@ -33,6 +33,8 @@
 #ifndef TCP_H
 #define TCP_H
 
+#include <glib.h>
+
 typedef	uint32_t tcp_seq;
 
 #define      PR_SLOWHZ       2               /* 2 slow timeouts per second (approx) */
@@ -51,7 +53,7 @@ struct tcphdr {
 	uint16_t th_dport;              /* destination port */
 	tcp_seq	th_seq;			/* sequence number */
 	tcp_seq	th_ack;			/* acknowledgement number */
-#ifdef HOST_WORDS_BIGENDIAN
+#if G_BYTE_ORDER == G_BIG_ENDIAN
 	uint8_t	th_off:4,		/* data offset */
 		th_x2:4;		/* (unused) */
 #else
-- 
2.20.1

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

* [Qemu-devel] [PULL 31/65] slirp: replace SIZEOF_CHAR_P with glib equivalent
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (29 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 30/65] slirp: replace HOST_WORDS_BIGENDIAN with glib equivalent Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 32/65] slirp: replace compile time DO_KEEPALIVE Samuel Thibault
                   ` (35 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Philippe Mathieu-Daudé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/ip.h           | 2 +-
 slirp/slirp_config.h | 3 ---
 2 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/slirp/ip.h b/slirp/ip.h
index 83fc9cdfbf..243b6c8b24 100644
--- a/slirp/ip.h
+++ b/slirp/ip.h
@@ -177,7 +177,7 @@ struct	ip_timestamp {
 
 #define	IP_MSS		576		/* default maximum segment size */
 
-#if SIZEOF_CHAR_P == 4
+#if GLIB_SIZEOF_VOID_P == 4
 struct mbuf_ptr {
 	struct mbuf *mptr;
 	uint32_t dummy;
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
index b2def6d20c..7147e0de04 100644
--- a/slirp/slirp_config.h
+++ b/slirp/slirp_config.h
@@ -10,6 +10,3 @@
  * Autoconf defined configuration options
  * You shouldn't need to touch any of these
  */
-
-/* Define to sizeof(char *) */
-#define SIZEOF_CHAR_P (HOST_LONG_BITS / 8)
-- 
2.20.1

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

* [Qemu-devel] [PULL 32/65] slirp: replace compile time DO_KEEPALIVE
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (30 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 31/65] slirp: replace SIZEOF_CHAR_P " Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 33/65] slirp: remove unused global slirp_instance Samuel Thibault
                   ` (34 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Use a global variable instead (similar to slirp_debug)

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.c        |  3 +++
 slirp/slirp.h        |  6 +++---
 slirp/slirp_config.h | 12 ------------
 slirp/tcp_input.c    |  2 +-
 slirp/tcp_timer.c    |  2 +-
 5 files changed, 8 insertions(+), 17 deletions(-)
 delete mode 100644 slirp/slirp_config.h

diff --git a/slirp/slirp.c b/slirp/slirp.c
index 76e94eb1cd..f11f9e9e51 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -35,6 +35,9 @@
 #include <net/if.h>
 #endif
 
+/* Define to 1 if you want KEEPALIVE timers */
+bool slirp_do_keepalive;
+
 /* host loopback address */
 struct in_addr loopback_addr;
 /* host loopback network mask */
diff --git a/slirp/slirp.h b/slirp/slirp.h
index 4bbbba046e..05c203c8c7 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -1,8 +1,6 @@
 #ifndef SLIRP_H
 #define SLIRP_H
 
-#include "slirp_config.h"
-
 #ifdef _WIN32
 
 typedef char *caddr_t;
@@ -219,7 +217,9 @@ void ncsi_input(Slirp *slirp, const uint8_t *pkt, int pkt_len);
 #include <netdb.h>
 #endif
 
-#define SO_OPTIONS DO_KEEPALIVE
+
+extern bool slirp_do_keepalive;
+
 #define TCP_MAXIDLE (TCPTV_KEEPCNT * TCPTV_KEEPINTVL)
 
 /* dnssearch.c */
diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h
deleted file mode 100644
index 7147e0de04..0000000000
--- a/slirp/slirp_config.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * User definable configuration options
- */
-
-/* Define to 1 if you want KEEPALIVE timers */
-#define DO_KEEPALIVE 0
-
-/*********************************************************/
-/*
- * Autoconf defined configuration options
- * You shouldn't need to touch any of these
- */
diff --git a/slirp/tcp_input.c b/slirp/tcp_input.c
index 09bdf9b482..6af63469da 100644
--- a/slirp/tcp_input.c
+++ b/slirp/tcp_input.c
@@ -481,7 +481,7 @@ findso:
 	 * Reset idle time and keep-alive timer.
 	 */
 	tp->t_idle = 0;
-	if (SO_OPTIONS)
+	if (slirp_do_keepalive)
 	   tp->t_timer[TCPT_KEEP] = TCPTV_KEEPINTVL;
 	else
 	   tp->t_timer[TCPT_KEEP] = TCPTV_KEEP_IDLE;
diff --git a/slirp/tcp_timer.c b/slirp/tcp_timer.c
index dc8288b511..a843e57a2b 100644
--- a/slirp/tcp_timer.c
+++ b/slirp/tcp_timer.c
@@ -262,7 +262,7 @@ tcp_timers(register struct tcpcb *tp, int timer)
 		if (tp->t_state < TCPS_ESTABLISHED)
 			goto dropit;
 
-		if ((SO_OPTIONS) && tp->t_state <= TCPS_CLOSE_WAIT) {
+		if (slirp_do_keepalive && tp->t_state <= TCPS_CLOSE_WAIT) {
 			if (tp->t_idle >= TCPTV_KEEP_IDLE + TCP_MAXIDLE)
 				goto dropit;
 			/*
-- 
2.20.1

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

* [Qemu-devel] [PULL 33/65] slirp: remove unused global slirp_instance
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (31 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 32/65] slirp: replace compile time DO_KEEPALIVE Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 34/65] slirp: replace error_report() with g_critical() Samuel Thibault
                   ` (33 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.h | 2 --
 1 file changed, 2 deletions(-)

diff --git a/slirp/slirp.h b/slirp/slirp.h
index 05c203c8c7..d1b6bcefbb 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -199,8 +199,6 @@ struct Slirp {
     void *opaque;
 };
 
-extern Slirp *slirp_instance;
-
 #ifndef NULL
 #define NULL (void *)0
 #endif
-- 
2.20.1

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

* [Qemu-devel] [PULL 34/65] slirp: replace error_report() with g_critical()
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (32 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 33/65] slirp: remove unused global slirp_instance Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 35/65] slirp: improve a bit the debug macros Samuel Thibault
                   ` (32 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Reduce dependency on QEMU. QEMU could use a custom log handler if it
wants to redirect/filter it.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/ip6_icmp.c | 2 +-
 slirp/misc.c     | 2 +-
 slirp/slirp.c    | 6 +++---
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/slirp/ip6_icmp.c b/slirp/ip6_icmp.c
index cd1e0b9fe1..3c424df591 100644
--- a/slirp/ip6_icmp.c
+++ b/slirp/ip6_icmp.c
@@ -417,7 +417,7 @@ void icmp6_input(struct mbuf *m)
             icmp6_send_echoreply(m, slirp, ip, icmp);
         } else {
             /* TODO */
-            error_report("external icmpv6 not supported yet");
+            g_critical("external icmpv6 not supported yet");
         }
         break;
 
diff --git a/slirp/misc.c b/slirp/misc.c
index 7362e14339..ee3492a2ae 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -119,7 +119,7 @@ slirp_socketpair_with_oob(int sv[2])
     return 0;
 
 err:
-    error_report("Error: slirp_socketpair(): %s", strerror(errno));
+    g_critical("slirp_socketpair(): %s", strerror(errno));
     if (s >= 0) {
         closesocket(s);
     }
diff --git a/slirp/slirp.c b/slirp/slirp.c
index f11f9e9e51..8391d18faf 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -1214,8 +1214,8 @@ static int sbuf_tmp_post_load(void *opaque, int version)
     }
     if (tmp->woff >= requested_len ||
         tmp->roff >= requested_len) {
-        error_report("invalid sbuf offsets r/w=%u/%u len=%u",
-                     tmp->roff, tmp->woff, requested_len);
+        g_critical("invalid sbuf offsets r/w=%u/%u len=%u",
+                   tmp->roff, tmp->woff, requested_len);
         return -EINVAL;
     }
 
@@ -1323,7 +1323,7 @@ static int ss_family_post_load(void *opaque, int version_id)
         tss->parent->ss.ss_family = AF_INET6;
         break;
     default:
-        error_report("invalid ss_family type %x", tss->portable_family);
+        g_critical("invalid ss_family type %x", tss->portable_family);
         return -EINVAL;
     }
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 35/65] slirp: improve a bit the debug macros
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (33 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 34/65] slirp: replace error_report() with g_critical() Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 36/65] slirp: add a callback to log guest errors Samuel Thibault
                   ` (31 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Let them accept multiple arguments. Simplify the inner argument
handling of DEBUG_ARGS/DEBUG_MISC_DEBUG_ERROR.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/arp_table.c  | 12 ++++++------
 slirp/bootp.c      |  3 +--
 slirp/cksum.c      |  4 ++--
 slirp/debug.h      | 47 ++++++++++++++++++++++++++++++++++++----------
 slirp/dhcpv6.c     | 11 +++++------
 slirp/ip6_icmp.c   |  2 +-
 slirp/ip_icmp.c    | 18 +++++++++---------
 slirp/mbuf.c       |  2 +-
 slirp/ndp_table.c  | 18 +++++++++---------
 slirp/slirp.c      | 12 ++++++------
 slirp/socket.c     | 32 +++++++++++++++----------------
 slirp/tcp_input.c  | 15 +++++++--------
 slirp/tcp_output.c |  2 +-
 slirp/tcp_subr.c   |  4 ++--
 slirp/udp.c        |  6 +++---
 slirp/udp6.c       |  6 +++---
 16 files changed, 109 insertions(+), 85 deletions(-)

diff --git a/slirp/arp_table.c b/slirp/arp_table.c
index f81963bb88..ce19e6e7c0 100644
--- a/slirp/arp_table.c
+++ b/slirp/arp_table.c
@@ -34,9 +34,9 @@ void arp_table_add(Slirp *slirp, uint32_t ip_addr, uint8_t ethaddr[ETH_ALEN])
 
     DEBUG_CALL("arp_table_add");
     DEBUG_ARG("ip = %s", inet_ntoa((struct in_addr){.s_addr = ip_addr}));
-    DEBUG_ARGS((dfd, " hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
-                ethaddr[0], ethaddr[1], ethaddr[2],
-                ethaddr[3], ethaddr[4], ethaddr[5]));
+    DEBUG_ARGS(" hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
+               ethaddr[0], ethaddr[1], ethaddr[2],
+               ethaddr[3], ethaddr[4], ethaddr[5]);
 
     if (ip_addr == 0 || ip_addr == 0xffffffff || ip_addr == broadcast_addr) {
         /* Do not register broadcast addresses */
@@ -79,9 +79,9 @@ bool arp_table_search(Slirp *slirp, uint32_t ip_addr,
     for (i = 0; i < ARP_TABLE_SIZE; i++) {
         if (arptbl->table[i].ar_sip == ip_addr) {
             memcpy(out_ethaddr, arptbl->table[i].ar_sha,  ETH_ALEN);
-            DEBUG_ARGS((dfd, " found hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
-                        out_ethaddr[0], out_ethaddr[1], out_ethaddr[2],
-                        out_ethaddr[3], out_ethaddr[4], out_ethaddr[5]));
+            DEBUG_ARGS(" found hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
+                       out_ethaddr[0], out_ethaddr[1], out_ethaddr[2],
+                       out_ethaddr[3], out_ethaddr[4], out_ethaddr[5]);
             return 1;
         }
     }
diff --git a/slirp/bootp.c b/slirp/bootp.c
index 7b1af73c95..5ab6692038 100644
--- a/slirp/bootp.c
+++ b/slirp/bootp.c
@@ -37,8 +37,7 @@
 static const uint8_t rfc1533_cookie[] = { RFC1533_COOKIE };
 
 #ifdef DEBUG
-#define DPRINTF(fmt, ...) \
-do if (slirp_debug & DBG_CALL) { fprintf(dfd, fmt, ##  __VA_ARGS__); fflush(dfd); } while (0)
+#define DPRINTF(fmt, ...) DEBUG_CALL(fmt, ##__VA_ARGS__)
 #else
 #define DPRINTF(fmt, ...) do{}while(0)
 #endif
diff --git a/slirp/cksum.c b/slirp/cksum.c
index 6d73abf4a0..b9466485b5 100644
--- a/slirp/cksum.c
+++ b/slirp/cksum.c
@@ -124,8 +124,8 @@ int cksum(struct mbuf *m, int len)
 cont:
 #ifdef DEBUG
 	if (len) {
-		DEBUG_ERROR((dfd, "cksum: out of data\n"));
-		DEBUG_ERROR((dfd, " len = %d\n", len));
+		DEBUG_ERROR("cksum: out of data\n");
+		DEBUG_ERROR(" len = %d\n", len);
 	}
 #endif
 	if (mlen == -1) {
diff --git a/slirp/debug.h b/slirp/debug.h
index 6cfa61edb3..ca3a4b04da 100644
--- a/slirp/debug.h
+++ b/slirp/debug.h
@@ -17,18 +17,45 @@
 
 extern int slirp_debug;
 
-#define DEBUG_CALL(x) if (slirp_debug & DBG_CALL) { fprintf(dfd, "%s...\n", x); fflush(dfd); }
-#define DEBUG_ARG(x, y) if (slirp_debug & DBG_CALL) { fputc(' ', dfd); fprintf(dfd, x, y); fputc('\n', dfd); fflush(dfd); }
-#define DEBUG_ARGS(x) if (slirp_debug & DBG_CALL) { fprintf x ; fflush(dfd); }
-#define DEBUG_MISC(x) if (slirp_debug & DBG_MISC) { fprintf x ; fflush(dfd); }
-#define DEBUG_ERROR(x) if (slirp_debug & DBG_ERROR) {fprintf x ; fflush(dfd); }
+#define DEBUG_CALL(fmt, ...) do {               \
+    if (slirp_debug & DBG_CALL) {               \
+        fprintf(dfd, fmt, ##__VA_ARGS__);       \
+        fprintf(dfd, "...\n");                  \
+        fflush(dfd);                            \
+    }                                           \
+} while (0)
+
+#define DEBUG_ARG(fmt, ...) do {                \
+    if (slirp_debug & DBG_CALL) {               \
+        fputc(' ', dfd);                        \
+        fprintf(dfd, fmt, ##__VA_ARGS__);       \
+        fputc('\n', dfd);                       \
+        fflush(dfd);                            \
+    }                                           \
+} while (0)
+
+#define DEBUG_ARGS(fmt, ...) DEBUG_ARG(fmt, ##__VA_ARGS__)
+
+#define DEBUG_MISC(fmt, ...) do {               \
+    if (slirp_debug & DBG_MISC) {               \
+        fprintf(dfd, fmt, ##__VA_ARGS__);       \
+        fflush(dfd);                            \
+    }                                           \
+} while (0)
+
+#define DEBUG_ERROR(fmt, ...) do {              \
+    if (slirp_debug & DBG_ERROR) {              \
+        fprintf(dfd, fmt, ##__VA_ARGS__);       \
+        fflush(dfd);                            \
+    }                                           \
+} while (0)
 
 #else
 
-#define DEBUG_CALL(x)
-#define DEBUG_ARG(x, y)
-#define DEBUG_ARGS(x)
-#define DEBUG_MISC(x)
-#define DEBUG_ERROR(x)
+#define DEBUG_CALL(fmt, ...)
+#define DEBUG_ARG(fmt, ...)
+#define DEBUG_ARGS(fmt, ...)
+#define DEBUG_MISC(fmt, ...)
+#define DEBUG_ERROR(fmt, ...)
 
 #endif
diff --git a/slirp/dhcpv6.c b/slirp/dhcpv6.c
index d266611e85..943a13bca8 100644
--- a/slirp/dhcpv6.c
+++ b/slirp/dhcpv6.c
@@ -92,14 +92,14 @@ static int dhcpv6_parse_info_request(uint8_t *odata, int olen,
                     ri->want_boot_url = true;
                     break;
                 default:
-                    DEBUG_MISC((dfd, "dhcpv6: Unsupported option request %d\n",
-                                req_opt));
+                    DEBUG_MISC("dhcpv6: Unsupported option request %d\n",
+                               req_opt);
                 }
             }
             break;
         default:
-            DEBUG_MISC((dfd, "dhcpv6 info req: Unsupported option %d, len=%d\n",
-                        option, len));
+            DEBUG_MISC("dhcpv6 info req: Unsupported option %d, len=%d\n",
+                       option, len);
         }
 
         odata += len + 4;
@@ -203,7 +203,6 @@ void dhcpv6_input(struct sockaddr_in6 *srcsas, struct mbuf *m)
         dhcpv6_info_request(m->slirp, srcsas, xid, &data[4], data_len - 4);
         break;
     default:
-        DEBUG_MISC((dfd, "dhcpv6_input: Unsupported message type 0x%x\n",
-                    data[0]));
+        DEBUG_MISC("dhcpv6_input: Unsupported message type 0x%x\n", data[0]);
     }
 }
diff --git a/slirp/ip6_icmp.c b/slirp/ip6_icmp.c
index 3c424df591..595647b1b1 100644
--- a/slirp/ip6_icmp.c
+++ b/slirp/ip6_icmp.c
@@ -76,7 +76,7 @@ void icmp6_send_error(struct mbuf *m, uint8_t type, uint8_t code)
     struct ip6 *ip = mtod(m, struct ip6 *);
 
     DEBUG_CALL("icmp6_send_error");
-    DEBUG_ARGS((dfd, " type = %d, code = %d\n", type, code));
+    DEBUG_ARGS(" type = %d, code = %d\n", type, code);
 
     if (IN6_IS_ADDR_MULTICAST(&ip->ip_src) ||
             in6_zero(&ip->ip_src)) {
diff --git a/slirp/ip_icmp.c b/slirp/ip_icmp.c
index 9210eef3f3..af11cfcefe 100644
--- a/slirp/ip_icmp.c
+++ b/slirp/ip_icmp.c
@@ -99,8 +99,8 @@ static int icmp_send(struct socket *so, struct mbuf *m, int hlen)
 
     if (sendto(so->s, m->m_data + hlen, m->m_len - hlen, 0,
                (struct sockaddr *)&addr, sizeof(addr)) == -1) {
-        DEBUG_MISC((dfd, "icmp_input icmp sendto tx errno = %d-%s\n",
-                    errno, strerror(errno)));
+        DEBUG_MISC("icmp_input icmp sendto tx errno = %d-%s\n",
+                   errno, strerror(errno));
         icmp_send_error(m, ICMP_UNREACH, ICMP_UNREACH_NET, 0, strerror(errno));
         icmp_detach(so);
     }
@@ -165,8 +165,8 @@ icmp_input(struct mbuf *m, int hlen)
         return;
       }
       if (udp_attach(so, AF_INET) == -1) {
-	DEBUG_MISC((dfd,"icmp_input udp_attach errno = %d-%s\n",
-		    errno,strerror(errno)));
+	DEBUG_MISC("icmp_input udp_attach errno = %d-%s\n",
+               errno,strerror(errno));
 	sofree(so);
 	m_free(m);
 	goto end_error;
@@ -188,8 +188,8 @@ icmp_input(struct mbuf *m, int hlen)
 
       if(sendto(so->s, icmp_ping_msg, strlen(icmp_ping_msg), 0,
 		(struct sockaddr *)&addr, sockaddr_size(&addr)) == -1) {
-	DEBUG_MISC((dfd,"icmp_input udp sendto tx errno = %d-%s\n",
-		    errno,strerror(errno)));
+	DEBUG_MISC("icmp_input udp sendto tx errno = %d-%s\n",
+               errno,strerror(errno));
 	icmp_send_error(m, ICMP_UNREACH, ICMP_UNREACH_NET, 0, strerror(errno));
 	udp_detach(so);
       }
@@ -257,7 +257,7 @@ icmp_send_error(struct mbuf *msrc, u_char type, u_char code, int minsize,
   { char bufa[20], bufb[20];
     strcpy(bufa, inet_ntoa(ip->ip_src));
     strcpy(bufb, inet_ntoa(ip->ip_dst));
-    DEBUG_MISC((dfd, " %.16s to %.16s\n", bufa, bufb));
+    DEBUG_MISC(" %.16s to %.16s\n", bufa, bufb);
   }
 #endif
   if(ip->ip_off & IP_OFFMASK) goto end_error;    /* Only reply to fragment 0 */
@@ -457,8 +457,8 @@ void icmp_receive(struct socket *so)
         } else {
             error_code = ICMP_UNREACH_HOST;
         }
-        DEBUG_MISC((dfd, " udp icmp rx errno = %d-%s\n", errno,
-                    strerror(errno)));
+        DEBUG_MISC(" udp icmp rx errno = %d-%s\n", errno,
+                   strerror(errno));
         icmp_send_error(so->so_m, ICMP_UNREACH, error_code, 0, strerror(errno));
     } else {
         icmp_reflect(so->so_m);
diff --git a/slirp/mbuf.c b/slirp/mbuf.c
index aa1f28afb1..d8d275e0e7 100644
--- a/slirp/mbuf.c
+++ b/slirp/mbuf.c
@@ -232,7 +232,7 @@ dtom(Slirp *slirp, void *dat)
 	  }
 	}
 
-	DEBUG_ERROR((dfd, "dtom failed"));
+	DEBUG_ERROR("dtom failed");
 
 	return (struct mbuf *)0;
 }
diff --git a/slirp/ndp_table.c b/slirp/ndp_table.c
index e1676a0a7b..a4e6421fd3 100644
--- a/slirp/ndp_table.c
+++ b/slirp/ndp_table.c
@@ -19,9 +19,9 @@ void ndp_table_add(Slirp *slirp, struct in6_addr ip_addr,
     inet_ntop(AF_INET6, &(ip_addr), addrstr, INET6_ADDRSTRLEN);
     DEBUG_ARG("ip = %s", addrstr);
 #endif
-    DEBUG_ARGS((dfd, " hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
-                ethaddr[0], ethaddr[1], ethaddr[2],
-                ethaddr[3], ethaddr[4], ethaddr[5]));
+    DEBUG_ARGS(" hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
+               ethaddr[0], ethaddr[1], ethaddr[2],
+               ethaddr[3], ethaddr[4], ethaddr[5]);
 
     if (IN6_IS_ADDR_MULTICAST(&ip_addr) || in6_zero(&ip_addr)) {
         /* Do not register multicast or unspecified addresses */
@@ -69,18 +69,18 @@ bool ndp_table_search(Slirp *slirp, struct in6_addr ip_addr,
         out_ethaddr[3] = ip_addr.s6_addr[13];
         out_ethaddr[4] = ip_addr.s6_addr[14];
         out_ethaddr[5] = ip_addr.s6_addr[15];
-        DEBUG_ARGS((dfd, " multicast addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
-                    out_ethaddr[0], out_ethaddr[1], out_ethaddr[2],
-                    out_ethaddr[3], out_ethaddr[4], out_ethaddr[5]));
+        DEBUG_ARGS(" multicast addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
+                   out_ethaddr[0], out_ethaddr[1], out_ethaddr[2],
+                   out_ethaddr[3], out_ethaddr[4], out_ethaddr[5]);
         return 1;
     }
 
     for (i = 0; i < NDP_TABLE_SIZE; i++) {
         if (in6_equal(&ndp_table->table[i].ip_addr, &ip_addr)) {
             memcpy(out_ethaddr, ndp_table->table[i].eth_addr,  ETH_ALEN);
-            DEBUG_ARGS((dfd, " found hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
-                        out_ethaddr[0], out_ethaddr[1], out_ethaddr[2],
-                        out_ethaddr[3], out_ethaddr[4], out_ethaddr[5]));
+            DEBUG_ARGS(" found hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
+                       out_ethaddr[0], out_ethaddr[1], out_ethaddr[2],
+                       out_ethaddr[3], out_ethaddr[4], out_ethaddr[5]);
             return 1;
         }
     }
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 8391d18faf..591dd1fcb4 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -984,12 +984,12 @@ int if_encap(Slirp *slirp, struct mbuf *ifm)
     }
 
     memcpy(eh->h_dest, ethaddr, ETH_ALEN);
-    DEBUG_ARGS((dfd, " src = %02x:%02x:%02x:%02x:%02x:%02x\n",
-                eh->h_source[0], eh->h_source[1], eh->h_source[2],
-                eh->h_source[3], eh->h_source[4], eh->h_source[5]));
-    DEBUG_ARGS((dfd, " dst = %02x:%02x:%02x:%02x:%02x:%02x\n",
-                eh->h_dest[0], eh->h_dest[1], eh->h_dest[2],
-                eh->h_dest[3], eh->h_dest[4], eh->h_dest[5]));
+    DEBUG_ARGS(" src = %02x:%02x:%02x:%02x:%02x:%02x\n",
+               eh->h_source[0], eh->h_source[1], eh->h_source[2],
+               eh->h_source[3], eh->h_source[4], eh->h_source[5]);
+    DEBUG_ARGS(" dst = %02x:%02x:%02x:%02x:%02x:%02x\n",
+               eh->h_dest[0], eh->h_dest[1], eh->h_dest[2],
+               eh->h_dest[3], eh->h_dest[4], eh->h_dest[5]);
     memcpy(buf + sizeof(struct ethhdr), ifm->m_data, ifm->m_len);
     slirp->cb->output(slirp->opaque, buf, ifm->m_len + ETH_HLEN);
     return 1;
diff --git a/slirp/socket.c b/slirp/socket.c
index 7012c7c07d..677fd20c9d 100644
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -208,7 +208,7 @@ soread(struct socket *so)
 				}
 			}
 
-			DEBUG_MISC((dfd, " --- soread() disconnected, nn = %d, errno = %d-%s\n", nn, errno,strerror(errno)));
+			DEBUG_MISC(" --- soread() disconnected, nn = %d, errno = %d-%s\n", nn, errno,strerror(errno));
 			sofcantrcvmore(so);
 
 			if (err == ECONNRESET || err == ECONNREFUSED
@@ -237,7 +237,7 @@ soread(struct socket *so)
                 nn += ret;
         }
 
-	DEBUG_MISC((dfd, " ... read nn = %d bytes\n", nn));
+	DEBUG_MISC(" ... read nn = %d bytes\n", nn);
 
 	/* Update fields */
 	sb->sb_cc += nn;
@@ -370,7 +370,7 @@ sosendoob(struct socket *so)
 		n = slirp_send(so, buff, len, (MSG_OOB)); /* |MSG_DONTWAIT)); */
 #ifdef DEBUG
 		if (n != len) {
-			DEBUG_ERROR((dfd, "Didn't send all data urgently XXXXX\n"));
+			DEBUG_ERROR("Didn't send all data urgently XXXXX\n");
 		}
 #endif
 	}
@@ -379,7 +379,7 @@ sosendoob(struct socket *so)
 		return n;
 	}
 	so->so_urgc -= n;
-	DEBUG_MISC((dfd, " ---2 sent %d bytes urgent data, %d urgent bytes left\n", n, so->so_urgc));
+	DEBUG_MISC(" ---2 sent %d bytes urgent data, %d urgent bytes left\n", n, so->so_urgc);
 
 	sb->sb_cc -= n;
 	sb->sb_rptr += n;
@@ -460,7 +460,7 @@ sowrite(struct socket *so)
             if (ret > 0)
                 nn += ret;
         }
-        DEBUG_MISC((dfd, "  ... wrote nn = %d bytes\n", nn));
+        DEBUG_MISC("  ... wrote nn = %d bytes\n", nn);
 
 	/* Update sbuf */
 	sb->sb_cc -= nn;
@@ -478,8 +478,8 @@ sowrite(struct socket *so)
 	return nn;
 
 err_disconnected:
-	DEBUG_MISC((dfd, " --- sowrite disconnected, so->so_state = %x, errno = %d\n",
-		    so->so_state, errno));
+	DEBUG_MISC(" --- sowrite disconnected, so->so_state = %x, errno = %d\n",
+               so->so_state, errno);
 	sofcantsendmore(so);
 	tcp_sockclosed(sototcpcb(so));
 	return -1;
@@ -512,8 +512,8 @@ sorecvfrom(struct socket *so)
 	    if(errno == EHOSTUNREACH) code=ICMP_UNREACH_HOST;
 	    else if(errno == ENETUNREACH) code=ICMP_UNREACH_NET;
 
-	    DEBUG_MISC((dfd," udp icmp rx errno = %d-%s\n",
-			errno,strerror(errno)));
+	    DEBUG_MISC(" udp icmp rx errno = %d-%s\n",
+                   errno,strerror(errno));
 	    icmp_send_error(so->so_m, ICMP_UNREACH, code, 0, strerror(errno));
 	  } else {
 	    icmp_reflect(so->so_m);
@@ -564,8 +564,8 @@ sorecvfrom(struct socket *so)
 
 	  m->m_len = recvfrom(so->s, m->m_data, len, 0,
 			      (struct sockaddr *)&addr, &addrlen);
-	  DEBUG_MISC((dfd, " did recvfrom %d, errno = %d-%s\n",
-		      m->m_len, errno,strerror(errno)));
+	  DEBUG_MISC(" did recvfrom %d, errno = %d-%s\n",
+                 m->m_len, errno,strerror(errno));
 	  if(m->m_len<0) {
 	    /* Report error as ICMP */
 	    switch (so->so_lfamily) {
@@ -579,7 +579,7 @@ sorecvfrom(struct socket *so)
 		code = ICMP_UNREACH_NET;
 	      }
 
-	      DEBUG_MISC((dfd, " rx error, tx icmp ICMP_UNREACH:%i\n", code));
+	      DEBUG_MISC(" rx error, tx icmp ICMP_UNREACH:%i\n", code);
 	      icmp_send_error(so->so_m, ICMP_UNREACH, code, 0, strerror(errno));
 	      break;
 	    case AF_INET6:
@@ -591,7 +591,7 @@ sorecvfrom(struct socket *so)
 		code = ICMP6_UNREACH_NO_ROUTE;
 	      }
 
-	      DEBUG_MISC((dfd, " rx error, tx icmp6 ICMP_UNREACH:%i\n", code));
+	      DEBUG_MISC(" rx error, tx icmp6 ICMP_UNREACH:%i\n", code);
 	      icmp6_send_error(so->so_m, ICMP6_UNREACH, code);
 	      break;
 	    default:
@@ -839,9 +839,9 @@ void sotranslate_out(struct socket *so, struct sockaddr_storage *addr)
             }
         }
 
-        DEBUG_MISC((dfd, " addr.sin_port=%d, "
-            "addr.sin_addr.s_addr=%.16s\n",
-            ntohs(sin->sin_port), inet_ntoa(sin->sin_addr)));
+        DEBUG_MISC(" addr.sin_port=%d, "
+                   "addr.sin_addr.s_addr=%.16s\n",
+                   ntohs(sin->sin_port), inet_ntoa(sin->sin_addr));
         break;
 
     case AF_INET6:
diff --git a/slirp/tcp_input.c b/slirp/tcp_input.c
index 6af63469da..39821e5a34 100644
--- a/slirp/tcp_input.c
+++ b/slirp/tcp_input.c
@@ -236,8 +236,8 @@ tcp_input(struct mbuf *m, int iphlen, struct socket *inso, unsigned short af)
     Slirp *slirp;
 
 	DEBUG_CALL("tcp_input");
-	DEBUG_ARGS((dfd, " m = %p  iphlen = %2d  inso = %p\n",
-		    m, iphlen, inso));
+	DEBUG_ARGS(" m = %p  iphlen = %2d  inso = %p\n",
+               m, iphlen, inso);
 
 	/*
 	 * If called with m == 0, then we're continuing the connect
@@ -662,8 +662,8 @@ findso:
               (errno != EINPROGRESS) && (errno != EWOULDBLOCK)
           ) {
 	    uint8_t code;
-	    DEBUG_MISC((dfd, " tcp fconnect errno = %d-%s\n",
-			errno,strerror(errno)));
+	    DEBUG_MISC(" tcp fconnect errno = %d-%s\n",
+                   errno,strerror(errno));
 	    if(errno == ECONNREFUSED) {
 	      /* ACK the SYN, send RST to refuse the connection */
 	      tcp_respond(tp, ti, m, ti->ti_seq + 1, (tcp_seq) 0,
@@ -1032,8 +1032,7 @@ trimthenstep6:
 
 		if (SEQ_LEQ(ti->ti_ack, tp->snd_una)) {
 			if (ti->ti_len == 0 && tiwin == tp->snd_wnd) {
-			  DEBUG_MISC((dfd, " dup ack  m = %p  so = %p\n",
-				      m, so));
+			  DEBUG_MISC(" dup ack  m = %p  so = %p\n", m, so);
 				/*
 				 * If we have outstanding data (other than
 				 * a window probe), this is a completely
@@ -1411,7 +1410,7 @@ tcp_dooptions(struct tcpcb *tp, u_char *cp, int cnt, struct tcpiphdr *ti)
 	int opt, optlen;
 
 	DEBUG_CALL("tcp_dooptions");
-	DEBUG_ARGS((dfd, " tp = %p  cnt=%i\n", tp, cnt));
+	DEBUG_ARGS(" tp = %p  cnt=%i\n", tp, cnt);
 
 	for (; cnt > 0; cnt -= optlen, cp += optlen) {
 		opt = cp[0];
@@ -1611,7 +1610,7 @@ tcp_mss(struct tcpcb *tp, u_int offer)
                                                (mss - (TCP_RCVSPACE % mss)) :
                                                0));
 
-	DEBUG_MISC((dfd, " returning mss = %d\n", mss));
+	DEBUG_MISC(" returning mss = %d\n", mss);
 
 	return mss;
 }
diff --git a/slirp/tcp_output.c b/slirp/tcp_output.c
index c835432812..ecc2d506b6 100644
--- a/slirp/tcp_output.c
+++ b/slirp/tcp_output.c
@@ -92,7 +92,7 @@ again:
 
 	flags = tcp_outflags[tp->t_state];
 
-	DEBUG_MISC((dfd, " --- tcp_output flags = 0x%x\n",flags));
+	DEBUG_MISC(" --- tcp_output flags = 0x%x\n", flags);
 
 	/*
 	 * If in persist timeout with window of 0, send 1 byte.
diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index 4b40850c7a..00cee73163 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -420,7 +420,7 @@ int tcp_fconnect(struct socket *so, unsigned short af)
     qemu_setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &opt, sizeof(opt));
 
     addr = so->fhost.ss;
-    DEBUG_CALL(" connect()ing")
+    DEBUG_CALL(" connect()ing");
     sotranslate_out(so, &addr);
 
     /* We don't care what port we get */
@@ -964,7 +964,7 @@ int tcp_ctl(struct socket *so)
                     so->chardev = ex_ptr->ex_chardev;
                     return 1;
                 }
-                DEBUG_MISC((dfd, " executing %s\n", ex_ptr->ex_exec));
+                DEBUG_MISC(" executing %s\n", ex_ptr->ex_exec);
                 return fork_exec(so, ex_ptr->ex_exec);
             }
         }
diff --git a/slirp/udp.c b/slirp/udp.c
index 5bb196c907..4853243d87 100644
--- a/slirp/udp.c
+++ b/slirp/udp.c
@@ -172,8 +172,8 @@ udp_input(register struct mbuf *m, int iphlen)
 	   */
 	  so = socreate(slirp);
 	  if (udp_attach(so, AF_INET) == -1) {
-	    DEBUG_MISC((dfd," udp_attach errno = %d-%s\n",
-			errno,strerror(errno)));
+	    DEBUG_MISC(" udp_attach errno = %d-%s\n",
+                   errno, strerror(errno));
 	    sofree(so);
 	    goto bad;
 	  }
@@ -209,7 +209,7 @@ udp_input(register struct mbuf *m, int iphlen)
 	  m->m_len += iphlen;
 	  m->m_data -= iphlen;
 	  *ip=save_ip;
-	  DEBUG_MISC((dfd,"udp tx errno = %d-%s\n",errno,strerror(errno)));
+	  DEBUG_MISC("udp tx errno = %d-%s\n", errno, strerror(errno));
 	  icmp_send_error(m, ICMP_UNREACH, ICMP_UNREACH_NET, 0,
 	                  strerror(errno));
 	  goto bad;
diff --git a/slirp/udp6.c b/slirp/udp6.c
index 986010f0d3..473ba1586e 100644
--- a/slirp/udp6.c
+++ b/slirp/udp6.c
@@ -92,8 +92,8 @@ void udp6_input(struct mbuf *m)
         /* If there's no socket for this packet, create one. */
         so = socreate(slirp);
         if (udp_attach(so, AF_INET6) == -1) {
-            DEBUG_MISC((dfd, " udp6_attach errno = %d-%s\n",
-                        errno, strerror(errno)));
+            DEBUG_MISC(" udp6_attach errno = %d-%s\n",
+                       errno, strerror(errno));
             sofree(so);
             goto bad;
         }
@@ -119,7 +119,7 @@ void udp6_input(struct mbuf *m)
         m->m_len += iphlen;
         m->m_data -= iphlen;
         *ip = save_ip;
-        DEBUG_MISC((dfd, "udp tx errno = %d-%s\n", errno, strerror(errno)));
+        DEBUG_MISC("udp tx errno = %d-%s\n", errno, strerror(errno));
         icmp6_send_error(m, ICMP6_UNREACH, ICMP6_UNREACH_NO_ROUTE);
         goto bad;
     }
-- 
2.20.1

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

* [Qemu-devel] [PULL 36/65] slirp: add a callback to log guest errors
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (34 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 35/65] slirp: improve a bit the debug macros Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 37/65] slirp: remove #if notdef dead code Samuel Thibault
                   ` (30 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 net/slirp.c      | 7 +++++++
 slirp/dhcpv6.c   | 6 +++---
 slirp/ip6_icmp.c | 7 +++----
 slirp/libslirp.h | 2 ++
 4 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/net/slirp.c b/net/slirp.c
index 031c324f02..ea8b04e007 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -23,6 +23,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "qemu/log.h"
 #include "net/slirp.h"
 
 
@@ -140,8 +141,14 @@ static NetClientInfo net_slirp_info = {
     .cleanup = net_slirp_cleanup,
 };
 
+static void net_slirp_guest_error(const char *msg)
+{
+    qemu_log_mask(LOG_GUEST_ERROR, "%s", msg);
+}
+
 static const SlirpCb slirp_cb = {
     .output = net_slirp_output,
+    .guest_error = net_slirp_guest_error,
 };
 
 static int net_slirp_init(NetClientState *peer, const char *model,
diff --git a/slirp/dhcpv6.c b/slirp/dhcpv6.c
index 943a13bca8..5d703e8ae6 100644
--- a/slirp/dhcpv6.c
+++ b/slirp/dhcpv6.c
@@ -50,7 +50,7 @@ struct requested_infos {
  * the odata region, thus the caller must keep odata valid as long as it
  * needs to access the requested_infos struct.
  */
-static int dhcpv6_parse_info_request(uint8_t *odata, int olen,
+static int dhcpv6_parse_info_request(Slirp *slirp, uint8_t *odata, int olen,
                                      struct requested_infos *ri)
 {
     int i, req_opt;
@@ -61,7 +61,7 @@ static int dhcpv6_parse_info_request(uint8_t *odata, int olen,
         int len = odata[2] << 8 | odata[3];
 
         if (len + 4 > olen) {
-            qemu_log_mask(LOG_GUEST_ERROR, "Guest sent bad DHCPv6 packet!\n");
+            slirp->cb->guest_error("Guest sent bad DHCPv6 packet!");
             return -E2BIG;
         }
 
@@ -121,7 +121,7 @@ static void dhcpv6_info_request(Slirp *slirp, struct sockaddr_in6 *srcsas,
     struct mbuf *m;
     uint8_t *resp;
 
-    if (dhcpv6_parse_info_request(odata, olen, &ri) < 0) {
+    if (dhcpv6_parse_info_request(slirp, odata, olen, &ri) < 0) {
         return;
     }
 
diff --git a/slirp/ip6_icmp.c b/slirp/ip6_icmp.c
index 595647b1b1..3f74d172f4 100644
--- a/slirp/ip6_icmp.c
+++ b/slirp/ip6_icmp.c
@@ -342,8 +342,7 @@ static void ndp_input(struct mbuf *m, Slirp *slirp, struct ip6 *ip,
 
     case ICMP6_NDP_RA:
         DEBUG_CALL(" type = Router Advertisement");
-        qemu_log_mask(LOG_GUEST_ERROR,
-                "Warning: guest sent NDP RA, but shouldn't");
+        slirp->cb->guest_error("Warning: guest sent NDP RA, but shouldn't");
         break;
 
     case ICMP6_NDP_NS:
@@ -376,8 +375,8 @@ static void ndp_input(struct mbuf *m, Slirp *slirp, struct ip6 *ip,
 
     case ICMP6_NDP_REDIRECT:
         DEBUG_CALL(" type = Redirect");
-        qemu_log_mask(LOG_GUEST_ERROR,
-                "Warning: guest sent NDP REDIRECT, but shouldn't");
+        slirp->cb->guest_error(
+            "Warning: guest sent NDP REDIRECT, but shouldn't");
         break;
     }
 }
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index a5d1b27b5e..3e0aa19f4b 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -13,6 +13,8 @@ typedef struct Slirp Slirp;
 typedef struct SlirpCb {
     /* Send an ethernet frame to the guest network.  */
     void (*output)(void *opaque, const uint8_t *pkt, int pkt_len);
+    /* Print a message for an error due to guest misbehavior.  */
+    void (*guest_error)(const char *msg);
 } SlirpCb;
 
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 37/65] slirp: remove #if notdef dead code
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (35 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 36/65] slirp: add a callback to log guest errors Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 38/65] slirp: remove unused sbflush() Samuel Thibault
                   ` (29 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/ip_input.c  | 200 ----------------------------------------------
 slirp/tcp_input.c |  39 ---------
 2 files changed, 239 deletions(-)

diff --git a/slirp/ip_input.c b/slirp/ip_input.c
index 094a807d41..d360620838 100644
--- a/slirp/ip_input.c
+++ b/slirp/ip_input.c
@@ -447,206 +447,6 @@ ip_slowtimo(Slirp *slirp)
     }
 }
 
-/*
- * Do option processing on a datagram,
- * possibly discarding it if bad options are encountered,
- * or forwarding it if source-routed.
- * Returns 1 if packet has been forwarded/freed,
- * 0 if the packet should be processed further.
- */
-
-#ifdef notdef
-
-int
-ip_dooptions(m)
-	struct mbuf *m;
-{
-	register struct ip *ip = mtod(m, struct ip *);
-	register u_char *cp;
-	register struct ip_timestamp *ipt;
-	register struct in_ifaddr *ia;
-	int opt, optlen, cnt, off, code, type, forward = 0;
-	struct in_addr *sin, dst;
-typedef uint32_t n_time;
-	n_time ntime;
-
-	dst = ip->ip_dst;
-	cp = (u_char *)(ip + 1);
-	cnt = (ip->ip_hl << 2) - sizeof (struct ip);
-	for (; cnt > 0; cnt -= optlen, cp += optlen) {
-		opt = cp[IPOPT_OPTVAL];
-		if (opt == IPOPT_EOL)
-			break;
-		if (opt == IPOPT_NOP)
-			optlen = 1;
-		else {
-			optlen = cp[IPOPT_OLEN];
-			if (optlen <= 0 || optlen > cnt) {
-				code = &cp[IPOPT_OLEN] - (u_char *)ip;
-				goto bad;
-			}
-		}
-		switch (opt) {
-
-		default:
-			break;
-
-		/*
-		 * Source routing with record.
-		 * Find interface with current destination address.
-		 * If none on this machine then drop if strictly routed,
-		 * or do nothing if loosely routed.
-		 * Record interface address and bring up next address
-		 * component.  If strictly routed make sure next
-		 * address is on directly accessible net.
-		 */
-		case IPOPT_LSRR:
-		case IPOPT_SSRR:
-			if ((off = cp[IPOPT_OFFSET]) < IPOPT_MINOFF) {
-				code = &cp[IPOPT_OFFSET] - (u_char *)ip;
-				goto bad;
-			}
-			ipaddr.sin_addr = ip->ip_dst;
-			ia = (struct in_ifaddr *)
-				ifa_ifwithaddr((struct sockaddr *)&ipaddr);
-			if (ia == 0) {
-				if (opt == IPOPT_SSRR) {
-					type = ICMP_UNREACH;
-					code = ICMP_UNREACH_SRCFAIL;
-					goto bad;
-				}
-				/*
-				 * Loose routing, and not at next destination
-				 * yet; nothing to do except forward.
-				 */
-				break;
-			}
-                        off--; /* 0 origin */
-			if (off > optlen - sizeof(struct in_addr)) {
-				/*
-				 * End of source route.  Should be for us.
-				 */
-				save_rte(cp, ip->ip_src);
-				break;
-			}
-			/*
-			 * locate outgoing interface
-			 */
-			bcopy((caddr_t)(cp + off), (caddr_t)&ipaddr.sin_addr,
-			    sizeof(ipaddr.sin_addr));
-			if (opt == IPOPT_SSRR) {
-#define	INA	struct in_ifaddr *
-#define	SA	struct sockaddr *
-			    if ((ia = (INA)ifa_ifwithdstaddr((SA)&ipaddr)) == 0)
-				ia = (INA)ifa_ifwithnet((SA)&ipaddr);
-			} else
-				ia = ip_rtaddr(ipaddr.sin_addr);
-			if (ia == 0) {
-				type = ICMP_UNREACH;
-				code = ICMP_UNREACH_SRCFAIL;
-				goto bad;
-			}
-			ip->ip_dst = ipaddr.sin_addr;
-			bcopy((caddr_t)&(IA_SIN(ia)->sin_addr),
-			    (caddr_t)(cp + off), sizeof(struct in_addr));
-			cp[IPOPT_OFFSET] += sizeof(struct in_addr);
-			/*
-			 * Let ip_intr's mcast routing check handle mcast pkts
-			 */
-			forward = !IN_MULTICAST(ntohl(ip->ip_dst.s_addr));
-			break;
-
-		case IPOPT_RR:
-			if ((off = cp[IPOPT_OFFSET]) < IPOPT_MINOFF) {
-				code = &cp[IPOPT_OFFSET] - (u_char *)ip;
-				goto bad;
-			}
-			/*
-			 * If no space remains, ignore.
-			 */
-                        off--; /* 0 origin */
-			if (off > optlen - sizeof(struct in_addr))
-				break;
-			bcopy((caddr_t)(&ip->ip_dst), (caddr_t)&ipaddr.sin_addr,
-			    sizeof(ipaddr.sin_addr));
-			/*
-			 * locate outgoing interface; if we're the destination,
-			 * use the incoming interface (should be same).
-			 */
-			if ((ia = (INA)ifa_ifwithaddr((SA)&ipaddr)) == 0 &&
-			    (ia = ip_rtaddr(ipaddr.sin_addr)) == 0) {
-				type = ICMP_UNREACH;
-				code = ICMP_UNREACH_HOST;
-				goto bad;
-			}
-			bcopy((caddr_t)&(IA_SIN(ia)->sin_addr),
-			    (caddr_t)(cp + off), sizeof(struct in_addr));
-			cp[IPOPT_OFFSET] += sizeof(struct in_addr);
-			break;
-
-		case IPOPT_TS:
-			code = cp - (u_char *)ip;
-			ipt = (struct ip_timestamp *)cp;
-			if (ipt->ipt_len < 5)
-				goto bad;
-			if (ipt->ipt_ptr > ipt->ipt_len - sizeof (int32_t)) {
-				if (++ipt->ipt_oflw == 0)
-					goto bad;
-				break;
-			}
-			sin = (struct in_addr *)(cp + ipt->ipt_ptr - 1);
-			switch (ipt->ipt_flg) {
-
-			case IPOPT_TS_TSONLY:
-				break;
-
-			case IPOPT_TS_TSANDADDR:
-				if (ipt->ipt_ptr + sizeof(n_time) +
-				    sizeof(struct in_addr) > ipt->ipt_len)
-					goto bad;
-				ipaddr.sin_addr = dst;
-				ia = (INA)ifaof_ i f p foraddr((SA)&ipaddr,
-							    m->m_pkthdr.rcvif);
-				if (ia == 0)
-					continue;
-				bcopy((caddr_t)&IA_SIN(ia)->sin_addr,
-				    (caddr_t)sin, sizeof(struct in_addr));
-				ipt->ipt_ptr += sizeof(struct in_addr);
-				break;
-
-			case IPOPT_TS_PRESPEC:
-				if (ipt->ipt_ptr + sizeof(n_time) +
-				    sizeof(struct in_addr) > ipt->ipt_len)
-					goto bad;
-				bcopy((caddr_t)sin, (caddr_t)&ipaddr.sin_addr,
-				    sizeof(struct in_addr));
-				if (ifa_ifwithaddr((SA)&ipaddr) == 0)
-					continue;
-				ipt->ipt_ptr += sizeof(struct in_addr);
-				break;
-
-			default:
-				goto bad;
-			}
-			ntime = iptime();
-			bcopy((caddr_t)&ntime, (caddr_t)cp + ipt->ipt_ptr - 1,
-			    sizeof(n_time));
-			ipt->ipt_ptr += sizeof(n_time);
-		}
-	}
-	if (forward) {
-		ip_forward(m, 1);
-		return (1);
-	}
-	return (0);
-bad:
-	icmp_send_error(m, type, code, 0, 0);
-
-	return (1);
-}
-
-#endif /* notdef */
-
 /*
  * Strip out IP options, at higher
  * level protocol in the kernel.
diff --git a/slirp/tcp_input.c b/slirp/tcp_input.c
index 39821e5a34..0f073d4b38 100644
--- a/slirp/tcp_input.c
+++ b/slirp/tcp_input.c
@@ -1441,45 +1441,6 @@ tcp_dooptions(struct tcpcb *tp, u_char *cp, int cnt, struct tcpiphdr *ti)
 	}
 }
 
-
-/*
- * Pull out of band byte out of a segment so
- * it doesn't appear in the user's data queue.
- * It is still reflected in the segment length for
- * sequencing purposes.
- */
-
-#ifdef notdef
-
-void
-tcp_pulloutofband(so, ti, m)
-	struct socket *so;
-	struct tcpiphdr *ti;
-	register struct mbuf *m;
-{
-	int cnt = ti->ti_urp - 1;
-
-	while (cnt >= 0) {
-		if (m->m_len > cnt) {
-			char *cp = mtod(m, caddr_t) + cnt;
-			struct tcpcb *tp = sototcpcb(so);
-
-			tp->t_iobc = *cp;
-			tp->t_oobflags |= TCPOOB_HAVEDATA;
-			memcpy(sp, cp+1, (unsigned)(m->m_len - cnt - 1));
-			m->m_len--;
-			return;
-		}
-		cnt -= m->m_len;
-		m = m->m_next; /* XXX WRONG! Fix it! */
-		if (m == 0)
-			break;
-	}
-	panic("tcp_pulloutofband");
-}
-
-#endif /* notdef */
-
 /*
  * Collect new round-trip time estimate
  * and update averages and current timeout.
-- 
2.20.1

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

* [Qemu-devel] [PULL 38/65] slirp: remove unused sbflush()
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (36 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 37/65] slirp: remove #if notdef dead code Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 39/65] slirp: NULL is defined by stddef.h Samuel Thibault
                   ` (28 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/sbuf.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/slirp/sbuf.h b/slirp/sbuf.h
index a722ecb629..644c201341 100644
--- a/slirp/sbuf.h
+++ b/slirp/sbuf.h
@@ -8,7 +8,6 @@
 #ifndef SBUF_H
 #define SBUF_H
 
-#define sbflush(sb) sbdrop((sb),(sb)->sb_cc)
 #define sbspace(sb) ((sb)->sb_datalen - (sb)->sb_cc)
 
 struct sbuf {
-- 
2.20.1

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

* [Qemu-devel] [PULL 39/65] slirp: NULL is defined by stddef.h
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (37 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 38/65] slirp: remove unused sbflush() Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 40/65] slirp: remove dead TCP_ACK_HACK code Samuel Thibault
                   ` (27 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.h | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/slirp/slirp.h b/slirp/slirp.h
index d1b6bcefbb..fdf397256b 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -199,10 +199,6 @@ struct Slirp {
     void *opaque;
 };
 
-#ifndef NULL
-#define NULL (void *)0
-#endif
-
 void if_start(Slirp *);
 
 int get_dns_addr(struct in_addr *pdns_addr);
-- 
2.20.1

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

* [Qemu-devel] [PULL 40/65] slirp: remove dead TCP_ACK_HACK code
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (38 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 39/65] slirp: NULL is defined by stddef.h Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 41/65] slirp: replace ARRAY_SIZE with G_N_ELEMENTS Samuel Thibault
                   ` (26 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Untouched since original introduction in 2004.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/tcp_input.c | 23 +----------------------
 1 file changed, 1 insertion(+), 22 deletions(-)

diff --git a/slirp/tcp_input.c b/slirp/tcp_input.c
index 0f073d4b38..c4d7abf1fa 100644
--- a/slirp/tcp_input.c
+++ b/slirp/tcp_input.c
@@ -60,27 +60,6 @@
  * Set DELACK for segments received in order, but ack immediately
  * when segments are out of order (so fast retransmit can work).
  */
-#ifdef TCP_ACK_HACK
-#define TCP_REASS(tp, ti, m, so, flags) {\
-       if ((ti)->ti_seq == (tp)->rcv_nxt && \
-           tcpfrag_list_empty(tp) && \
-           (tp)->t_state == TCPS_ESTABLISHED) {\
-               if (ti->ti_flags & TH_PUSH) \
-                       tp->t_flags |= TF_ACKNOW; \
-               else \
-                       tp->t_flags |= TF_DELACK; \
-               (tp)->rcv_nxt += (ti)->ti_len; \
-               flags = (ti)->ti_flags & TH_FIN; \
-               if (so->so_emu) { \
-		       if (tcp_emu((so),(m))) sbappend((so), (m)); \
-	       } else \
-		       sbappend((so), (m)); \
-	} else {\
-               (flags) = tcp_reass((tp), (ti), (m)); \
-               tp->t_flags |= TF_ACKNOW; \
-       } \
-}
-#else
 #define	TCP_REASS(tp, ti, m, so, flags) { \
 	if ((ti)->ti_seq == (tp)->rcv_nxt && \
         tcpfrag_list_empty(tp) && \
@@ -97,7 +76,7 @@
 		tp->t_flags |= TF_ACKNOW; \
 	} \
 }
-#endif
+
 static void tcp_dooptions(struct tcpcb *tp, u_char *cp, int cnt,
                           struct tcpiphdr *ti);
 static void tcp_xmit_timer(register struct tcpcb *tp, int rtt);
-- 
2.20.1

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

* [Qemu-devel] [PULL 41/65] slirp: replace ARRAY_SIZE with G_N_ELEMENTS
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (39 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 40/65] slirp: remove dead TCP_ACK_HACK code Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 42/65] net: do not depend on slirp internals Samuel Thibault
                   ` (25 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Philippe Mathieu-Daudé, Daniel P . Berrangé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Do not require QEMU macro.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/ncsi.c | 2 +-
 slirp/tftp.c | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/slirp/ncsi.c b/slirp/ncsi.c
index 10decfb5ef..8594382270 100644
--- a/slirp/ncsi.c
+++ b/slirp/ncsi.c
@@ -128,7 +128,7 @@ void ncsi_input(Slirp *slirp, const uint8_t *pkt, int pkt_len)
     memset(reh->h_source, 0xff, ETH_ALEN);
     reh->h_proto = htons(ETH_P_NCSI);
 
-    for (i = 0; i < ARRAY_SIZE(ncsi_rsp_handlers); i++) {
+    for (i = 0; i < G_N_ELEMENTS(ncsi_rsp_handlers); i++) {
         if (ncsi_rsp_handlers[i].type == nh->type + 0x80) {
             handler = &ncsi_rsp_handlers[i];
             break;
diff --git a/slirp/tftp.c b/slirp/tftp.c
index 735b57aa55..a9ba1480db 100644
--- a/slirp/tftp.c
+++ b/slirp/tftp.c
@@ -359,7 +359,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct sockaddr_storage *srcsas,
       return;
   }
 
-  while (k < pktlen && nb_options < ARRAY_SIZE(option_name)) {
+  while (k < pktlen && nb_options < G_N_ELEMENTS(option_name)) {
       const char *key, *value;
 
       key = &tp->x.tp_buf[k];
@@ -403,7 +403,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct sockaddr_storage *srcsas,
   }
 
   if (nb_options > 0) {
-      assert(nb_options <= ARRAY_SIZE(option_name));
+      assert(nb_options <= G_N_ELEMENTS(option_name));
       tftp_send_oack(spt, option_name, option_value, nb_options, tp);
       return;
   }
-- 
2.20.1

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

* [Qemu-devel] [PULL 42/65] net: do not depend on slirp internals
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (40 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 41/65] slirp: replace ARRAY_SIZE with G_N_ELEMENTS Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 43/65] glib-compat: add g_spawn_async_with_fds() fallback Samuel Thibault
                   ` (24 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka,
	Philippe Mathieu-Daudé,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Only slirp/libslirp.h should be included.

Instead of using some slirp declarations and utility functions directly,
let's copy them in net/util.h.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 net/colo-compare.c    | 11 +++++----
 net/colo.c            |  1 +
 net/colo.h            |  7 +++---
 net/filter-rewriter.c |  9 +++----
 net/slirp.c           |  2 +-
 net/util.h            | 55 +++++++++++++++++++++++++++++++++++++++++++
 stubs/slirp.c         |  2 +-
 7 files changed, 72 insertions(+), 15 deletions(-)

diff --git a/net/colo-compare.c b/net/colo-compare.c
index 9156ab3349..3e515f3023 100644
--- a/net/colo-compare.c
+++ b/net/colo-compare.c
@@ -30,6 +30,7 @@
 #include "net/colo-compare.h"
 #include "migration/colo.h"
 #include "migration/migration.h"
+#include "util.h"
 
 #define TYPE_COLO_COMPARE "colo-compare"
 #define COLO_COMPARE(obj) \
@@ -129,19 +130,19 @@ static int compare_chr_send(CompareState *s,
 
 static gint seq_sorter(Packet *a, Packet *b, gpointer data)
 {
-    struct tcphdr *atcp, *btcp;
+    struct tcp_hdr *atcp, *btcp;
 
-    atcp = (struct tcphdr *)(a->transport_header);
-    btcp = (struct tcphdr *)(b->transport_header);
+    atcp = (struct tcp_hdr *)(a->transport_header);
+    btcp = (struct tcp_hdr *)(b->transport_header);
     return ntohl(atcp->th_seq) - ntohl(btcp->th_seq);
 }
 
 static void fill_pkt_tcp_info(void *data, uint32_t *max_ack)
 {
     Packet *pkt = data;
-    struct tcphdr *tcphd;
+    struct tcp_hdr *tcphd;
 
-    tcphd = (struct tcphdr *)pkt->transport_header;
+    tcphd = (struct tcp_hdr *)pkt->transport_header;
 
     pkt->tcp_seq = ntohl(tcphd->th_seq);
     pkt->tcp_ack = ntohl(tcphd->th_ack);
diff --git a/net/colo.c b/net/colo.c
index 49176bf07b..8196b35837 100644
--- a/net/colo.c
+++ b/net/colo.c
@@ -15,6 +15,7 @@
 #include "qemu/osdep.h"
 #include "trace.h"
 #include "colo.h"
+#include "util.h"
 
 uint32_t connection_key_hash(const void *opaque)
 {
diff --git a/net/colo.h b/net/colo.h
index 11c5226488..b21c6830b5 100644
--- a/net/colo.h
+++ b/net/colo.h
@@ -15,10 +15,9 @@
 #ifndef QEMU_COLO_PROXY_H
 #define QEMU_COLO_PROXY_H
 
-#include "slirp/slirp.h"
 #include "qemu/jhash.h"
 #include "qemu/timer.h"
-#include "slirp/tcp.h"
+#include "net/eth.h"
 
 #define HASHTABLE_MAX_SIZE 16384
 
@@ -81,10 +80,10 @@ typedef struct Connection {
     /* the maximum of acknowledgement number in secondary_list queue */
     uint32_t sack;
     /* offset = secondary_seq - primary_seq */
-    tcp_seq  offset;
+    uint32_t  offset;
 
     int tcp_state; /* TCP FSM state */
-    tcp_seq fin_ack_seq; /* the seq of 'fin=1,ack=1' */
+    uint32_t fin_ack_seq; /* the seq of 'fin=1,ack=1' */
 } Connection;
 
 uint32_t connection_key_hash(const void *opaque);
diff --git a/net/filter-rewriter.c b/net/filter-rewriter.c
index 2e26839bc2..b464abe5e8 100644
--- a/net/filter-rewriter.c
+++ b/net/filter-rewriter.c
@@ -22,6 +22,7 @@
 #include "net/checksum.h"
 #include "net/colo.h"
 #include "migration/colo.h"
+#include "util.h"
 
 #define FILTER_COLO_REWRITER(obj) \
     OBJECT_CHECK(RewriterState, (obj), TYPE_FILTER_REWRITER)
@@ -73,9 +74,9 @@ static int handle_primary_tcp_pkt(RewriterState *rf,
                                   Connection *conn,
                                   Packet *pkt, ConnectionKey *key)
 {
-    struct tcphdr *tcp_pkt;
+    struct tcp_hdr *tcp_pkt;
 
-    tcp_pkt = (struct tcphdr *)pkt->transport_header;
+    tcp_pkt = (struct tcp_hdr *)pkt->transport_header;
     if (trace_event_get_state_backends(TRACE_COLO_FILTER_REWRITER_DEBUG)) {
         trace_colo_filter_rewriter_pkt_info(__func__,
                     inet_ntoa(pkt->ip->ip_src), inet_ntoa(pkt->ip->ip_dst),
@@ -176,9 +177,9 @@ static int handle_secondary_tcp_pkt(RewriterState *rf,
                                     Connection *conn,
                                     Packet *pkt, ConnectionKey *key)
 {
-    struct tcphdr *tcp_pkt;
+    struct tcp_hdr *tcp_pkt;
 
-    tcp_pkt = (struct tcphdr *)pkt->transport_header;
+    tcp_pkt = (struct tcp_hdr *)pkt->transport_header;
 
     if (trace_event_get_state_backends(TRACE_COLO_FILTER_REWRITER_DEBUG)) {
         trace_colo_filter_rewriter_pkt_info(__func__,
diff --git a/net/slirp.c b/net/slirp.c
index ea8b04e007..b1c98b9470 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -38,12 +38,12 @@
 #include "qemu/error-report.h"
 #include "qemu/sockets.h"
 #include "slirp/libslirp.h"
-#include "slirp/ip6.h"
 #include "chardev/char-fe.h"
 #include "sysemu/sysemu.h"
 #include "qemu/cutils.h"
 #include "qapi/error.h"
 #include "qapi/qmp/qdict.h"
+#include "util.h"
 
 static int get_str_sep(char *buf, int buf_size, const char **pp, int sep)
 {
diff --git a/net/util.h b/net/util.h
index 60b73d372d..358185fd50 100644
--- a/net/util.h
+++ b/net/util.h
@@ -26,6 +26,61 @@
 #define QEMU_NET_UTIL_H
 
 
+/*
+ * Structure of an internet header, naked of options.
+ */
+struct ip {
+#ifdef HOST_WORDS_BIGENDIAN
+    uint8_t ip_v:4,         /* version */
+            ip_hl:4;        /* header length */
+#else
+    uint8_t ip_hl:4,        /* header length */
+            ip_v:4;         /* version */
+#endif
+    uint8_t ip_tos;         /* type of service */
+    uint16_t ip_len;        /* total length */
+    uint16_t ip_id;         /* identification */
+    uint16_t ip_off;        /* fragment offset field */
+#define IP_DF 0x4000        /* don't fragment flag */
+#define IP_MF 0x2000        /* more fragments flag */
+#define IP_OFFMASK 0x1fff   /* mask for fragmenting bits */
+    uint8_t ip_ttl;         /* time to live */
+    uint8_t ip_p;           /* protocol */
+    uint16_t ip_sum;        /* checksum */
+    struct in_addr ip_src, ip_dst;  /* source and dest address */
+} QEMU_PACKED;
+
+static inline bool in6_equal_net(const struct in6_addr *a,
+                                 const struct in6_addr *b,
+                                 int prefix_len)
+{
+    if (memcmp(a, b, prefix_len / 8) != 0) {
+        return 0;
+    }
+
+    if (prefix_len % 8 == 0) {
+        return 1;
+    }
+
+    return a->s6_addr[prefix_len / 8] >> (8 - (prefix_len % 8))
+        == b->s6_addr[prefix_len / 8] >> (8 - (prefix_len % 8));
+}
+
+#define TCPS_CLOSED             0       /* closed */
+#define TCPS_LISTEN             1       /* listening for connection */
+#define TCPS_SYN_SENT           2       /* active, have sent syn */
+#define TCPS_SYN_RECEIVED       3       /* have send and received syn */
+/* states < TCPS_ESTABLISHED are those where connections not established */
+#define TCPS_ESTABLISHED        4       /* established */
+#define TCPS_CLOSE_WAIT         5       /* rcvd fin, waiting for close */
+/* states > TCPS_CLOSE_WAIT are those where user has closed */
+#define TCPS_FIN_WAIT_1         6       /* have closed, sent fin */
+#define TCPS_CLOSING            7       /* closed xchd FIN; await FIN ACK */
+#define TCPS_LAST_ACK           8       /* had fin and close; await FIN ACK */
+/* states > TCPS_CLOSE_WAIT && < TCPS_FIN_WAIT_2 await ACK of FIN */
+#define TCPS_FIN_WAIT_2         9       /* have closed, fin is acked */
+#define TCPS_TIME_WAIT          10      /* in 2*msl quiet wait after close */
+
 int net_parse_macaddr(uint8_t *macaddr, const char *p);
 
 #endif /* QEMU_NET_UTIL_H */
diff --git a/stubs/slirp.c b/stubs/slirp.c
index 42f7e1afd0..70704346fd 100644
--- a/stubs/slirp.c
+++ b/stubs/slirp.c
@@ -1,7 +1,7 @@
 #include "qemu/osdep.h"
 #include "qemu-common.h"
 #include "qemu/host-utils.h"
-#include "slirp/slirp.h"
+#include "slirp/libslirp.h"
 
 void slirp_pollfds_fill(GArray *pollfds, uint32_t *timeout)
 {
-- 
2.20.1

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

* [Qemu-devel] [PULL 43/65] glib-compat: add g_spawn_async_with_fds() fallback
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (41 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 42/65] net: do not depend on slirp internals Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 44/65] slirp: simplify fork_exec() Samuel Thibault
                   ` (23 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 include/glib-compat.h | 56 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/include/glib-compat.h b/include/glib-compat.h
index fdf95a255d..8a078c5288 100644
--- a/include/glib-compat.h
+++ b/include/glib-compat.h
@@ -83,6 +83,62 @@ static inline gboolean g_strv_contains_qemu(const gchar *const *strv,
 }
 #define g_strv_contains(a, b) g_strv_contains_qemu(a, b)
 
+#if !GLIB_CHECK_VERSION(2, 58, 0)
+typedef struct QemuGSpawnFds {
+    GSpawnChildSetupFunc child_setup;
+    gpointer user_data;
+    gint stdin_fd;
+    gint stdout_fd;
+    gint stderr_fd;
+} QemuGSpawnFds;
+
+static inline void
+qemu_gspawn_fds_setup(gpointer user_data)
+{
+    QemuGSpawnFds *q = (QemuGSpawnFds *)user_data;
+
+    dup2(q->stdin_fd, 0);
+    dup2(q->stdout_fd, 1);
+    dup2(q->stderr_fd, 2);
+    q->child_setup(q->user_data);
+}
+#endif
+
+static inline gboolean
+g_spawn_async_with_fds_qemu(const gchar *working_directory,
+                            gchar **argv,
+                            gchar **envp,
+                            GSpawnFlags flags,
+                            GSpawnChildSetupFunc child_setup,
+                            gpointer user_data,
+                            GPid *child_pid,
+                            gint stdin_fd,
+                            gint stdout_fd,
+                            gint stderr_fd,
+                            GError **error)
+{
+#if GLIB_CHECK_VERSION(2, 58, 0)
+    return g_spawn_async_with_fds(working_directory, argv, envp, flags,
+                                  child_setup, user_data,
+                                  child_pid, stdin_fd, stdout_fd, stderr_fd,
+                                  error);
+#else
+    QemuGSpawnFds setup = {
+        .child_setup = child_setup,
+        .user_data = user_data,
+        .stdin_fd = stdin_fd,
+        .stdout_fd = stdout_fd,
+        .stderr_fd = stderr_fd,
+    };
+
+    return g_spawn_async(working_directory, argv, envp, flags,
+                         qemu_gspawn_fds_setup, &setup,
+                         child_pid, error);
+#endif
+}
+
+#define g_spawn_async_with_fds(wd, argv, env, f, c, d, p, ifd, ofd, efd, err) \
+    g_spawn_async_with_fds_qemu(wd, argv, env, f, c, d, p, ifd, ofd, efd, err)
 
 #if defined(_WIN32) && !GLIB_CHECK_VERSION(2, 50, 0)
 /*
-- 
2.20.1

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

* [Qemu-devel] [PULL 44/65] slirp: simplify fork_exec()
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (42 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 43/65] glib-compat: add g_spawn_async_with_fds() fallback Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 45/65] slirp: replace error_report() with g_critical() Samuel Thibault
                   ` (22 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Use g_spawn_async_with_fds() to setup the child.

GSpawn handles reaping the child, and closing parent file descriptors.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/misc.c | 75 +++++++++++++++++++++++++---------------------------
 1 file changed, 36 insertions(+), 39 deletions(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index ee3492a2ae..753b3da25b 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -129,56 +129,53 @@ err:
     return -1;
 }
 
+static void
+fork_exec_child_setup(gpointer data)
+{
+    setsid();
+}
+
 int
 fork_exec(struct socket *so, const char *ex)
 {
-	char **argv;
-	int opt, c, sp[2];
-	pid_t pid;
+    GError *err = NULL;
+    char **argv;
+    int opt, sp[2];
 
-	DEBUG_CALL("fork_exec");
-	DEBUG_ARG("so = %p", so);
-	DEBUG_ARG("ex = %p", ex);
+    DEBUG_CALL("fork_exec");
+    DEBUG_ARG("so = %p", so);
+    DEBUG_ARG("ex = %p", ex);
 
     if (slirp_socketpair_with_oob(sp) < 0) {
         return 0;
     }
 
-	pid = fork();
-	switch(pid) {
-	 case -1:
-		error_report("Error: fork failed: %s", strerror(errno));
-		closesocket(sp[0]);
-		closesocket(sp[1]);
-		return 0;
-
-	 case 0:
-		setsid();
-		dup2(sp[1], 0);
-		dup2(sp[1], 1);
-		dup2(sp[1], 2);
-		for (c = getdtablesize() - 1; c >= 3; c--)
-		   close(c);
+    argv = g_strsplit(ex, " ", -1);
+    g_spawn_async_with_fds(NULL /* cwd */,
+                           argv,
+                           NULL /* env */,
+                           G_SPAWN_SEARCH_PATH,
+                           fork_exec_child_setup, NULL /* data */,
+                           NULL /* child_pid */,
+                           sp[1], sp[1], sp[1],
+                           &err);
+    g_strfreev(argv);
 
-                argv = g_strsplit(ex, " ", -1);
-		execvp(argv[0], (char **)argv);
-
-		/* Ooops, failed, let's tell the user why */
-        fprintf(stderr, "Error: execvp of %s failed: %s\n",
-                argv[0], strerror(errno));
-		close(0); close(1); close(2); /* XXX */
-		exit(1);
+    if (err) {
+        error_report("%s", err->message);
+        g_error_free(err);
+        closesocket(sp[0]);
+        closesocket(sp[1]);
+        return 0;
+    }
 
-	 default:
-		so->s = sp[0];
-		closesocket(sp[1]);
-		qemu_add_child_watch(pid);
-		socket_set_fast_reuse(so->s);
-		opt = 1;
-		qemu_setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));
-		qemu_set_nonblock(so->s);
-		return 1;
-	}
+    so->s = sp[0];
+    closesocket(sp[1]);
+    socket_set_fast_reuse(so->s);
+    opt = 1;
+    qemu_setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));
+    qemu_set_nonblock(so->s);
+    return 1;
 }
 #endif
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 45/65] slirp: replace error_report() with g_critical()
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (43 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 44/65] slirp: simplify fork_exec() Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 46/65] slirp: Enable fork_exec support on Windows Samuel Thibault
                   ` (21 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Reduce dependency on QEMU. QEMU could use a custom log handler if it
wants to redirect/filter it.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/misc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index 753b3da25b..b141446319 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -162,7 +162,7 @@ fork_exec(struct socket *so, const char *ex)
     g_strfreev(argv);
 
     if (err) {
-        error_report("%s", err->message);
+        g_critical("fork_exec: %s", err->message);
         g_error_free(err);
         closesocket(sp[0]);
         closesocket(sp[1]);
-- 
2.20.1

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

* [Qemu-devel] [PULL 46/65] slirp: Enable fork_exec support on Windows
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (44 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 45/65] slirp: replace error_report() with g_critical() Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 47/65] slirp: drop <Vista compatibility Samuel Thibault
                   ` (20 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Samuel Thibault, stefanha, jan.kiszka, Marc-André Lureau,
	Daniel P . Berrangé

g_spawn_async_with_fds is portable on Windows, so we can now enable
fork_exec support there.

Thanks Daniel P. Berrangé for the notice!

Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
 slirp/misc.c | 14 ++------------
 1 file changed, 2 insertions(+), 12 deletions(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index b141446319..2d092624d3 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -62,17 +62,6 @@ int add_exec(struct ex_list **ex_ptr, void *chardev, const char *cmdline,
 }
 
 
-#ifdef _WIN32
-
-int
-fork_exec(struct socket *so, const char *ex)
-{
-    /* not implemented */
-    return 0;
-}
-
-#else
-
 static int
 slirp_socketpair_with_oob(int sv[2])
 {
@@ -132,7 +121,9 @@ err:
 static void
 fork_exec_child_setup(gpointer data)
 {
+#ifndef _WIN32
     setsid();
+#endif
 }
 
 int
@@ -177,7 +168,6 @@ fork_exec(struct socket *so, const char *ex)
     qemu_set_nonblock(so->s);
     return 1;
 }
-#endif
 
 char *slirp_connection_info(Slirp *slirp)
 {
-- 
2.20.1

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

* [Qemu-devel] [PULL 47/65] slirp: drop <Vista compatibility
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (45 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 46/65] slirp: Enable fork_exec support on Windows Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 48/65] slirp: rename exec_list Samuel Thibault
                   ` (19 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Since commit 12f8def0e02232d7c6416ad9b66640f973c531d1 (v2.9), qemu
requires Vista. Let's remove some conditional code.

Note that this introduces a missing declaration warning with mingw.
warning: implicit declaration of function 'inet_ntop'

See also: https://sourceforge.net/p/mingw-w64/mailman/message/36473782/

We could workaround it by declaring it ourself depending on __MINGW64_VERSION_*:
WINSOCK_API_LINKAGE INT WSAAPI inet_pton(int Family, PCTSTR pszAddrString, PVOID pAddrBuf);

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 net/slirp.c       | 22 ----------------------
 slirp/ip6_icmp.c  | 10 ++++------
 slirp/ndp_table.c | 14 ++++++--------
 3 files changed, 10 insertions(+), 36 deletions(-)

diff --git a/net/slirp.c b/net/slirp.c
index b1c98b9470..2d5337da04 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -290,17 +290,6 @@ static int net_slirp_init(NetClientState *peer, const char *model,
     }
 #endif
 
-#if defined(_WIN32) && (_WIN32_WINNT < 0x0600)
-    /* No inet_pton helper before Vista... */
-    if (vprefix6) {
-        /* Unsupported */
-        error_setg(errp, "IPv6 prefix not supported");
-        return -1;
-    }
-    memset(&ip6_prefix, 0, sizeof(ip6_prefix));
-    ip6_prefix.s6_addr[0] = 0xfe;
-    ip6_prefix.s6_addr[1] = 0xc0;
-#else
     if (!vprefix6) {
         vprefix6 = "fec0::";
     }
@@ -308,7 +297,6 @@ static int net_slirp_init(NetClientState *peer, const char *model,
         error_setg(errp, "Failed to parse IPv6 prefix");
         return -1;
     }
-#endif
 
     if (!vprefix6_len) {
         vprefix6_len = 64;
@@ -320,10 +308,6 @@ static int net_slirp_init(NetClientState *peer, const char *model,
     }
 
     if (vhost6) {
-#if defined(_WIN32) && (_WIN32_WINNT < 0x0600)
-        error_setg(errp, "IPv6 host not supported");
-        return -1;
-#else
         if (!inet_pton(AF_INET6, vhost6, &ip6_host)) {
             error_setg(errp, "Failed to parse IPv6 host");
             return -1;
@@ -332,17 +316,12 @@ static int net_slirp_init(NetClientState *peer, const char *model,
             error_setg(errp, "IPv6 Host doesn't belong to network");
             return -1;
         }
-#endif
     } else {
         ip6_host = ip6_prefix;
         ip6_host.s6_addr[15] |= 2;
     }
 
     if (vnameserver6) {
-#if defined(_WIN32) && (_WIN32_WINNT < 0x0600)
-        error_setg(errp, "IPv6 DNS not supported");
-        return -1;
-#else
         if (!inet_pton(AF_INET6, vnameserver6, &ip6_dns)) {
             error_setg(errp, "Failed to parse IPv6 DNS");
             return -1;
@@ -351,7 +330,6 @@ static int net_slirp_init(NetClientState *peer, const char *model,
             error_setg(errp, "IPv6 DNS doesn't belong to network");
             return -1;
         }
-#endif
     } else {
         ip6_dns = ip6_prefix;
         ip6_dns.s6_addr[15] |= 3;
diff --git a/slirp/ip6_icmp.c b/slirp/ip6_icmp.c
index 3f74d172f4..595a62c8d4 100644
--- a/slirp/ip6_icmp.c
+++ b/slirp/ip6_icmp.c
@@ -74,6 +74,7 @@ void icmp6_send_error(struct mbuf *m, uint8_t type, uint8_t code)
     Slirp *slirp = m->slirp;
     struct mbuf *t;
     struct ip6 *ip = mtod(m, struct ip6 *);
+    char addrstr[INET6_ADDRSTRLEN];
 
     DEBUG_CALL("icmp6_send_error");
     DEBUG_ARGS(" type = %d, code = %d\n", type, code);
@@ -90,11 +91,8 @@ void icmp6_send_error(struct mbuf *m, uint8_t type, uint8_t code)
     struct ip6 *rip = mtod(t, struct ip6 *);
     rip->ip_src = (struct in6_addr)LINKLOCAL_ADDR;
     rip->ip_dst = ip->ip_src;
-#if !defined(_WIN32) || (_WIN32_WINNT >= 0x0600)
-    char addrstr[INET6_ADDRSTRLEN];
     inet_ntop(AF_INET6, &rip->ip_dst, addrstr, INET6_ADDRSTRLEN);
     DEBUG_ARG("target = %s", addrstr);
-#endif
 
     rip->ip_nh = IPPROTO_ICMPV6;
     const int error_data_len = MIN(m->m_len,
@@ -222,12 +220,12 @@ void ndp_send_ra(Slirp *slirp)
  */
 void ndp_send_ns(Slirp *slirp, struct in6_addr addr)
 {
-    DEBUG_CALL("ndp_send_ns");
-#if !defined(_WIN32) || (_WIN32_WINNT >= 0x0600)
     char addrstr[INET6_ADDRSTRLEN];
+
     inet_ntop(AF_INET6, &addr, addrstr, INET6_ADDRSTRLEN);
+
+    DEBUG_CALL("ndp_send_ns");
     DEBUG_ARG("target = %s", addrstr);
-#endif
 
     /* Build IPv6 packet */
     struct mbuf *t = m_get(slirp);
diff --git a/slirp/ndp_table.c b/slirp/ndp_table.c
index a4e6421fd3..1401e1b322 100644
--- a/slirp/ndp_table.c
+++ b/slirp/ndp_table.c
@@ -10,15 +10,14 @@
 void ndp_table_add(Slirp *slirp, struct in6_addr ip_addr,
                     uint8_t ethaddr[ETH_ALEN])
 {
+    char addrstr[INET6_ADDRSTRLEN];
     NdpTable *ndp_table = &slirp->ndp_table;
     int i;
 
-    DEBUG_CALL("ndp_table_add");
-#if !defined(_WIN32) || (_WIN32_WINNT >= 0x0600)
-    char addrstr[INET6_ADDRSTRLEN];
     inet_ntop(AF_INET6, &(ip_addr), addrstr, INET6_ADDRSTRLEN);
+
+    DEBUG_CALL("ndp_table_add");
     DEBUG_ARG("ip = %s", addrstr);
-#endif
     DEBUG_ARGS(" hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
                ethaddr[0], ethaddr[1], ethaddr[2],
                ethaddr[3], ethaddr[4], ethaddr[5]);
@@ -50,15 +49,14 @@ void ndp_table_add(Slirp *slirp, struct in6_addr ip_addr,
 bool ndp_table_search(Slirp *slirp, struct in6_addr ip_addr,
                       uint8_t out_ethaddr[ETH_ALEN])
 {
+    char addrstr[INET6_ADDRSTRLEN];
     NdpTable *ndp_table = &slirp->ndp_table;
     int i;
 
-    DEBUG_CALL("ndp_table_search");
-#if !defined(_WIN32) || (_WIN32_WINNT >= 0x0600)
-    char addrstr[INET6_ADDRSTRLEN];
     inet_ntop(AF_INET6, &(ip_addr), addrstr, INET6_ADDRSTRLEN);
+
+    DEBUG_CALL("ndp_table_search");
     DEBUG_ARG("ip = %s", addrstr);
-#endif
 
     assert(!in6_zero(&ip_addr));
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 48/65] slirp: rename exec_list
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (46 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 47/65] slirp: drop <Vista compatibility Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 49/65] slirp: use virtual time for packet expiration Samuel Thibault
                   ` (18 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

This list is not only used to handle command to execute on guest
connection, it can also redirect to an arbitrary object, such as a
chardev. Let's rename the struct and the field to "guestfwd".

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/misc.c      |  6 +++---
 slirp/misc.h      |  6 +++---
 slirp/slirp.c     | 18 +++++++++---------
 slirp/slirp.h     |  2 +-
 slirp/tcp_input.c |  6 +++---
 slirp/tcp_subr.c  |  4 ++--
 6 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index 2d092624d3..526cefa0f1 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -36,10 +36,10 @@ remque(void *a)
   element->qh_rlink = NULL;
 }
 
-int add_exec(struct ex_list **ex_ptr, void *chardev, const char *cmdline,
+int add_exec(struct gfwd_list **ex_ptr, void *chardev, const char *cmdline,
              struct in_addr addr, int port)
 {
-	struct ex_list *tmp_ptr;
+	struct gfwd_list *tmp_ptr;
 
 	/* First, check if the port is "bound" */
 	for (tmp_ptr = *ex_ptr; tmp_ptr; tmp_ptr = tmp_ptr->ex_next) {
@@ -49,7 +49,7 @@ int add_exec(struct ex_list **ex_ptr, void *chardev, const char *cmdline,
 	}
 
 	tmp_ptr = *ex_ptr;
-	*ex_ptr = g_new0(struct ex_list, 1);
+	*ex_ptr = g_new0(struct gfwd_list, 1);
 	(*ex_ptr)->ex_fport = port;
 	(*ex_ptr)->ex_addr = addr;
 	if (chardev) {
diff --git a/slirp/misc.h b/slirp/misc.h
index 0bc5e74bc5..1df707c052 100644
--- a/slirp/misc.h
+++ b/slirp/misc.h
@@ -8,12 +8,12 @@
 #ifndef MISC_H
 #define MISC_H
 
-struct ex_list {
+struct gfwd_list {
 	void *ex_chardev;
 	struct in_addr ex_addr;		/* Server address */
 	int ex_fport;                   /* Port to telnet to */
 	char *ex_exec;                  /* Command line of what to exec */
-	struct ex_list *ex_next;
+	struct gfwd_list *ex_next;
 };
 
 #define EMU_NONE 0x0
@@ -51,7 +51,7 @@ struct slirp_quehead {
 
 void slirp_insque(void *, void *);
 void slirp_remque(void *);
-int add_exec(struct ex_list **, void *, const char *, struct in_addr, int);
+int add_exec(struct gfwd_list **, void *, const char *, struct in_addr, int);
 int fork_exec(struct socket *so, const char *ex);
 
 #endif
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 591dd1fcb4..e860750f72 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -345,9 +345,9 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork,
 
 void slirp_cleanup(Slirp *slirp)
 {
-    struct ex_list *e, *next;
+    struct gfwd_list *e, *next;
 
-    for (e = slirp->exec_list; e; e = next) {
+    for (e = slirp->guestfwd_list; e; e = next) {
         next = e->ex_next;
         g_free(e->ex_exec);
         g_free(e);
@@ -760,7 +760,7 @@ static void arp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len)
     struct ethhdr *reh = (struct ethhdr *)arp_reply;
     struct slirp_arphdr *rah = (struct slirp_arphdr *)(arp_reply + ETH_HLEN);
     int ar_op;
-    struct ex_list *ex_ptr;
+    struct gfwd_list *ex_ptr;
 
     if (!slirp->in_enabled) {
         return;
@@ -780,7 +780,7 @@ static void arp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len)
             if (ah->ar_tip == slirp->vnameserver_addr.s_addr ||
                 ah->ar_tip == slirp->vhost_addr.s_addr)
                 goto arp_ok;
-            for (ex_ptr = slirp->exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
+            for (ex_ptr = slirp->guestfwd_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
                 if (ex_ptr->ex_addr.s_addr == ah->ar_tip)
                     goto arp_ok;
             }
@@ -1052,7 +1052,7 @@ int slirp_add_exec(Slirp *slirp, void *chardev, const char *cmdline,
         return -1;
     }
 
-    return add_exec(&slirp->exec_list, chardev, cmdline, *guest_addr,
+    return add_exec(&slirp->guestfwd_list, chardev, cmdline, *guest_addr,
                     htons(guest_port));
 }
 
@@ -1423,9 +1423,9 @@ static const VMStateDescription vmstate_slirp = {
 static void slirp_state_save(QEMUFile *f, void *opaque)
 {
     Slirp *slirp = opaque;
-    struct ex_list *ex_ptr;
+    struct gfwd_list *ex_ptr;
 
-    for (ex_ptr = slirp->exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next)
+    for (ex_ptr = slirp->guestfwd_list; ex_ptr; ex_ptr = ex_ptr->ex_next)
         if (ex_ptr->ex_chardev) {
             struct socket *so;
             so = slirp_find_ctl_socket(slirp, ex_ptr->ex_addr,
@@ -1445,7 +1445,7 @@ static void slirp_state_save(QEMUFile *f, void *opaque)
 static int slirp_state_load(QEMUFile *f, void *opaque, int version_id)
 {
     Slirp *slirp = opaque;
-    struct ex_list *ex_ptr;
+    struct gfwd_list *ex_ptr;
 
     while (qemu_get_byte(f)) {
         int ret;
@@ -1460,7 +1460,7 @@ static int slirp_state_load(QEMUFile *f, void *opaque, int version_id)
             slirp->vnetwork_addr.s_addr) {
             return -EINVAL;
         }
-        for (ex_ptr = slirp->exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
+        for (ex_ptr = slirp->guestfwd_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
             if (ex_ptr->ex_chardev &&
                 so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr &&
                 so->so_fport == ex_ptr->ex_fport) {
diff --git a/slirp/slirp.h b/slirp/slirp.h
index fdf397256b..9aa245715d 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -147,7 +147,7 @@ struct Slirp {
     char client_hostname[33];
 
     int restricted;
-    struct ex_list *exec_list;
+    struct gfwd_list *guestfwd_list;
 
     /* mbuf states */
     struct quehead m_freelist;
diff --git a/slirp/tcp_input.c b/slirp/tcp_input.c
index c4d7abf1fa..f1cddce992 100644
--- a/slirp/tcp_input.c
+++ b/slirp/tcp_input.c
@@ -211,7 +211,7 @@ tcp_input(struct mbuf *m, int iphlen, struct socket *inso, unsigned short af)
 	struct sockaddr_storage lhost, fhost;
 	struct sockaddr_in *lhost4, *fhost4;
 	struct sockaddr_in6 *lhost6, *fhost6;
-    struct ex_list *ex_ptr;
+    struct gfwd_list *ex_ptr;
     Slirp *slirp;
 
 	DEBUG_CALL("tcp_input");
@@ -394,7 +394,7 @@ findso:
              * for non-hostfwd connections. These should be dropped, unless it
              * happens to be a guestfwd.
              */
-            for (ex_ptr = slirp->exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
+            for (ex_ptr = slirp->guestfwd_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
                 if (ex_ptr->ex_fport == ti->ti_dport &&
                     ti->ti_dst.s_addr == ex_ptr->ex_addr.s_addr) {
                     break;
@@ -616,7 +616,7 @@ findso:
 	    if (so->so_faddr.s_addr != slirp->vhost_addr.s_addr &&
 		so->so_faddr.s_addr != slirp->vnameserver_addr.s_addr) {
 		/* May be an add exec */
-		for (ex_ptr = slirp->exec_list; ex_ptr;
+		for (ex_ptr = slirp->guestfwd_list; ex_ptr;
 		     ex_ptr = ex_ptr->ex_next) {
 		  if(ex_ptr->ex_fport == so->so_fport &&
 		     so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr) {
diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index 00cee73163..3b14684107 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -949,14 +949,14 @@ int tcp_ctl(struct socket *so)
 {
     Slirp *slirp = so->slirp;
     struct sbuf *sb = &so->so_snd;
-    struct ex_list *ex_ptr;
+    struct gfwd_list *ex_ptr;
 
     DEBUG_CALL("tcp_ctl");
     DEBUG_ARG("so = %p", so);
 
     if (so->so_faddr.s_addr != slirp->vhost_addr.s_addr) {
         /* Check if it's pty_exec */
-        for (ex_ptr = slirp->exec_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
+        for (ex_ptr = slirp->guestfwd_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
             if (ex_ptr->ex_fport == so->so_fport &&
                 so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr) {
                 if (ex_ptr->ex_chardev) {
-- 
2.20.1

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

* [Qemu-devel] [PULL 49/65] slirp: use virtual time for packet expiration
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (47 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 48/65] slirp: rename exec_list Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 50/65] slirp: replace a fprintf with g_critical() Samuel Thibault
                   ` (17 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marc-André Lureau, stefanha, jan.kiszka, Paolo Bonzini,
	Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Make all packets expiration time based on virtual clock.

Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/if.c    | 2 +-
 slirp/slirp.c | 7 ++++---
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/slirp/if.c b/slirp/if.c
index aa88cc4e76..ce4f5fac53 100644
--- a/slirp/if.c
+++ b/slirp/if.c
@@ -148,7 +148,7 @@ diddit:
  */
 void if_start(Slirp *slirp)
 {
-    uint64_t now = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
+    uint64_t now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
     bool from_batchq = false;
     struct mbuf *ifm, *ifm_next, *ifqt;
 
diff --git a/slirp/slirp.c b/slirp/slirp.c
index e860750f72..7091c3998a 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -582,7 +582,7 @@ void slirp_pollfds_poll(GArray *pollfds, int select_error)
         return;
     }
 
-    curtime = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
+    curtime = qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL);
 
     QTAILQ_FOREACH(slirp, &slirp_instances, entry) {
         /*
@@ -909,7 +909,8 @@ static int if_encap4(Slirp *slirp, struct mbuf *ifm, struct ethhdr *eh,
             ifm->resolution_requested = true;
 
             /* Expire request and drop outgoing packet after 1 second */
-            ifm->expiration_date = qemu_clock_get_ns(QEMU_CLOCK_REALTIME) + 1000000000ULL;
+            ifm->expiration_date =
+                qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + 1000000000ULL;
         }
         return 0;
     } else {
@@ -936,7 +937,7 @@ static int if_encap6(Slirp *slirp, struct mbuf *ifm, struct ethhdr *eh,
             ndp_send_ns(slirp, ip6h->ip_dst);
             ifm->resolution_requested = true;
             ifm->expiration_date =
-                qemu_clock_get_ns(QEMU_CLOCK_REALTIME) + 1000000000ULL;
+                qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + 1000000000ULL;
         }
         return 0;
     } else {
-- 
2.20.1

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

* [Qemu-devel] [PULL 50/65] slirp: replace a fprintf with g_critical()
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (48 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 49/65] slirp: use virtual time for packet expiration Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 51/65] slirp: replace some fprintf() with DEBUG_MISC Samuel Thibault
                   ` (16 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Reduce dependency on QEMU. QEMU could use a custom glib log handler if
it wants to redirect/filter it.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/socket.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/slirp/socket.c b/slirp/socket.c
index 677fd20c9d..08a065f6a7 100644
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -285,7 +285,7 @@ err:
 
     sofcantrcvmore(so);
     tcp_sockclosed(sototcpcb(so));
-    fprintf(stderr, "soreadbuf buffer to small");
+    g_critical("soreadbuf buffer too small");
     return -1;
 }
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 51/65] slirp: replace some fprintf() with DEBUG_MISC
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (49 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 50/65] slirp: replace a fprintf with g_critical() Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 52/65] slirp: replace a DEBUG block with WITH_ICMP_ERROR_MSG Samuel Thibault
                   ` (15 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Remove some clutter, and avoids direct call to fprintf().

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/slirp.c | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/slirp/slirp.c b/slirp/slirp.c
index 7091c3998a..ce5f571d0f 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -164,9 +164,7 @@ static int get_dns_addr_resolv_conf(int af, void *pdns_addr, void *cached_addr,
     if (!f)
         return -1;
 
-#ifdef DEBUG
-    fprintf(stderr, "IP address of your DNS(s): ");
-#endif
+    DEBUG_MISC("IP address of your DNS(s): ");
     while (fgets(buff, 512, f) != NULL) {
         if (sscanf(buff, "nameserver%*[ \t]%256s", buff2) == 1) {
             char *c = strchr(buff2, '%');
@@ -188,15 +186,12 @@ static int get_dns_addr_resolv_conf(int af, void *pdns_addr, void *cached_addr,
                     *scope_id = if_index;
                 }
                 *cached_time = curtime;
+            } else {
+                DEBUG_MISC(", ");
             }
-#ifdef DEBUG
-            else
-                fprintf(stderr, ", ");
-#endif
+
             if (++found > 3) {
-#ifdef DEBUG
-                fprintf(stderr, "(more)");
-#endif
+                DEBUG_MISC("(more)");
                 break;
             }
 #ifdef DEBUG
@@ -206,7 +201,7 @@ static int get_dns_addr_resolv_conf(int af, void *pdns_addr, void *cached_addr,
                 if (!res) {
                     res = "(string conversion error)";
                 }
-                fprintf(stderr, "%s", res);
+                DEBUG_MISC("%s", res);
             }
 #endif
         }
-- 
2.20.1

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

* [Qemu-devel] [PULL 52/65] slirp: replace a DEBUG block with WITH_ICMP_ERROR_MSG
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (50 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 51/65] slirp: replace some fprintf() with DEBUG_MISC Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 53/65] slirp: no need to make DPRINTF conditional on DEBUG Samuel Thibault
                   ` (14 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

icmp_send_error() doesnt actually log messages when DEBUG is enabled.
Let's use a different define that describes better the tweaked
behaviour of the function, and avoid uncompiled code.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/ip_icmp.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/slirp/ip_icmp.c b/slirp/ip_icmp.c
index af11cfcefe..6c7e375ff8 100644
--- a/slirp/ip_icmp.c
+++ b/slirp/ip_icmp.c
@@ -34,6 +34,10 @@
 #include "slirp.h"
 #include "ip_icmp.h"
 
+#ifndef WITH_ICMP_ERROR_MSG
+#define WITH_ICMP_ERROR_MSG 0
+#endif
+
 /* The message sent when emulating PING */
 /* Be nice and tell them it's just a pseudo-ping packet */
 static const char icmp_ping_msg[] = "This is a pseudo-PING packet used by Slirp to emulate ICMP ECHO-REQUEST packets.\n";
@@ -319,8 +323,7 @@ icmp_send_error(struct mbuf *msrc, u_char type, u_char code, int minsize,
   HTONS(icp->icmp_ip.ip_id);
   HTONS(icp->icmp_ip.ip_off);
 
-#ifdef DEBUG
-  if(message) {           /* DEBUG : append message to ICMP packet */
+  if (message && WITH_ICMP_ERROR_MSG) { /* append message to ICMP packet */
     int message_len;
     char *cpnt;
     message_len=strlen(message);
@@ -329,7 +332,6 @@ icmp_send_error(struct mbuf *msrc, u_char type, u_char code, int minsize,
     memcpy(cpnt, message, message_len);
     m->m_len+=message_len;
   }
-#endif
 
   icp->icmp_cksum = 0;
   icp->icmp_cksum = cksum(m, m->m_len);
-- 
2.20.1

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

* [Qemu-devel] [PULL 53/65] slirp: no need to make DPRINTF conditional on DEBUG
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (51 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 52/65] slirp: replace a DEBUG block with WITH_ICMP_ERROR_MSG Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 54/65] slirp: always build with debug statements Samuel Thibault
                   ` (13 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

DEBUG_CALL is already handled conditionally.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/bootp.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/slirp/bootp.c b/slirp/bootp.c
index 5ab6692038..4c9a77eb98 100644
--- a/slirp/bootp.c
+++ b/slirp/bootp.c
@@ -36,11 +36,7 @@
 
 static const uint8_t rfc1533_cookie[] = { RFC1533_COOKIE };
 
-#ifdef DEBUG
 #define DPRINTF(fmt, ...) DEBUG_CALL(fmt, ##__VA_ARGS__)
-#else
-#define DPRINTF(fmt, ...) do{}while(0)
-#endif
 
 static BOOTPClient *get_new_addr(Slirp *slirp, struct in_addr *paddr,
                                  const uint8_t *macaddr)
@@ -166,8 +162,9 @@ static void bootp_reply(Slirp *slirp, const struct bootp_t *bp)
     DPRINTF("bootp packet op=%d msgtype=%d", bp->bp_op, dhcp_msg_type);
     if (preq_addr.s_addr != htonl(0L))
         DPRINTF(" req_addr=%08" PRIx32 "\n", ntohl(preq_addr.s_addr));
-    else
+    else {
         DPRINTF("\n");
+    }
 
     if (dhcp_msg_type == 0)
         dhcp_msg_type = DHCPREQUEST; /* Force reply for old BOOTP clients */
-- 
2.20.1

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

* [Qemu-devel] [PULL 54/65] slirp: always build with debug statements
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (52 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 53/65] slirp: no need to make DPRINTF conditional on DEBUG Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 55/65] slirp: introduce SLIRP_DEBUG environment variable Samuel Thibault
                   ` (12 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Make debug statements condiitonal only on slirp_debug flags, instead
of the pre-processor DEBUG blocks, as it may introduce breakage
easily, since the debug code isn't always compiled.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/debug.h | 15 +++------------
 slirp/misc.c  |  6 +++++-
 2 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/slirp/debug.h b/slirp/debug.h
index ca3a4b04da..ff920f0b87 100644
--- a/slirp/debug.h
+++ b/slirp/debug.h
@@ -5,9 +5,8 @@
  * terms and conditions of the copyright.
  */
 
-//#define DEBUG 1
-
-#ifdef DEBUG
+#ifndef DEBUG_H_
+#define DEBUG_H_
 
 #define DBG_CALL 0x1
 #define DBG_MISC 0x2
@@ -50,12 +49,4 @@ extern int slirp_debug;
     }                                           \
 } while (0)
 
-#else
-
-#define DEBUG_CALL(fmt, ...)
-#define DEBUG_ARG(fmt, ...)
-#define DEBUG_ARGS(fmt, ...)
-#define DEBUG_MISC(fmt, ...)
-#define DEBUG_ERROR(fmt, ...)
-
-#endif
+#endif /* DEBUG_H_ */
diff --git a/slirp/misc.c b/slirp/misc.c
index 526cefa0f1..e30d2ceb2a 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -12,9 +12,13 @@
 #include "qemu/main-loop.h"
 
 #ifdef DEBUG
-int slirp_debug = DBG_CALL|DBG_MISC|DBG_ERROR;
+#define SLIRP_DEBUG (DBG_CALL | DBG_MISC | DBG_ERROR)
+#else
+#define SLIRP_DEBUG 0
 #endif
 
+int slirp_debug = SLIRP_DEBUG;
+
 inline void
 insque(void *a, void *b)
 {
-- 
2.20.1

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

* [Qemu-devel] [PULL 55/65] slirp: introduce SLIRP_DEBUG environment variable
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (53 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 54/65] slirp: always build with debug statements Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 56/65] slirp: use %p for pointers format Samuel Thibault
                   ` (11 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Learn to read SLIRP_DEBUG=call,misc,error (all or help also handled)
to set the slirp_debug flags.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/misc.c  |  8 --------
 slirp/slirp.c | 15 +++++++++++++++
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index e30d2ceb2a..a0f104be5e 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -11,14 +11,6 @@
 #include "qemu/error-report.h"
 #include "qemu/main-loop.h"
 
-#ifdef DEBUG
-#define SLIRP_DEBUG (DBG_CALL | DBG_MISC | DBG_ERROR)
-#else
-#define SLIRP_DEBUG 0
-#endif
-
-int slirp_debug = SLIRP_DEBUG;
-
 inline void
 insque(void *a, void *b)
 {
diff --git a/slirp/slirp.c b/slirp/slirp.c
index ce5f571d0f..0b70cb9fb6 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -35,6 +35,8 @@
 #include <net/if.h>
 #endif
 
+int slirp_debug;
+
 /* Define to 1 if you want KEEPALIVE timers */
 bool slirp_do_keepalive;
 
@@ -250,6 +252,7 @@ int get_dns6_addr(struct in6_addr *pdns6_addr, uint32_t *scope_id)
 static void slirp_init_once(void)
 {
     static int initialized;
+    const char *debug;
 #ifdef _WIN32
     WSADATA Data;
 #endif
@@ -266,6 +269,18 @@ static void slirp_init_once(void)
 
     loopback_addr.s_addr = htonl(INADDR_LOOPBACK);
     loopback_mask = htonl(IN_CLASSA_NET);
+
+    debug = g_getenv("SLIRP_DEBUG");
+    if (debug) {
+        const GDebugKey keys[] = {
+            { "call", DBG_CALL },
+            { "misc", DBG_MISC },
+            { "error", DBG_ERROR },
+        };
+        slirp_debug = g_parse_debug_string(debug, keys, G_N_ELEMENTS(keys));
+    }
+
+
 }
 
 static void slirp_state_save(QEMUFile *f, void *opaque);
-- 
2.20.1

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

* [Qemu-devel] [PULL 56/65] slirp: use %p for pointers format
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (54 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 55/65] slirp: introduce SLIRP_DEBUG environment variable Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 57/65] slirp: remove remaining DEBUG blocks Samuel Thibault
                   ` (10 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

This fixes some compilation warnings on mingw64.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/ip6_icmp.c   | 2 +-
 slirp/ip6_input.c  | 2 +-
 slirp/ip6_output.c | 4 ++--
 slirp/udp6.c       | 6 +++---
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/slirp/ip6_icmp.c b/slirp/ip6_icmp.c
index 595a62c8d4..bce075913c 100644
--- a/slirp/ip6_icmp.c
+++ b/slirp/ip6_icmp.c
@@ -390,7 +390,7 @@ void icmp6_input(struct mbuf *m)
     int hlen = sizeof(struct ip6);
 
     DEBUG_CALL("icmp6_input");
-    DEBUG_ARG("m = %lx", (long) m);
+    DEBUG_ARG("m = %p", m);
     DEBUG_ARG("m_len = %d", m->m_len);
 
     if (ntohs(ip->ip_pl) < ICMP6_MINLEN) {
diff --git a/slirp/ip6_input.c b/slirp/ip6_input.c
index ac2e3ea882..ab656a0a9d 100644
--- a/slirp/ip6_input.c
+++ b/slirp/ip6_input.c
@@ -31,7 +31,7 @@ void ip6_input(struct mbuf *m)
     }
 
     DEBUG_CALL("ip6_input");
-    DEBUG_ARG("m = %lx", (long)m);
+    DEBUG_ARG("m = %p", m);
     DEBUG_ARG("m_len = %d", m->m_len);
 
     if (m->m_len < sizeof(struct ip6)) {
diff --git a/slirp/ip6_output.c b/slirp/ip6_output.c
index 762cbfe89c..52c88ad691 100644
--- a/slirp/ip6_output.c
+++ b/slirp/ip6_output.c
@@ -19,8 +19,8 @@ int ip6_output(struct socket *so, struct mbuf *m, int fast)
     struct ip6 *ip = mtod(m, struct ip6 *);
 
     DEBUG_CALL("ip6_output");
-    DEBUG_ARG("so = %lx", (long)so);
-    DEBUG_ARG("m = %lx", (long)m);
+    DEBUG_ARG("so = %p", so);
+    DEBUG_ARG("m = %p", m);
 
     /* Fill IPv6 header */
     ip->ip_v = IP6VERSION;
diff --git a/slirp/udp6.c b/slirp/udp6.c
index 473ba1586e..8cdb1892e2 100644
--- a/slirp/udp6.c
+++ b/slirp/udp6.c
@@ -20,7 +20,7 @@ void udp6_input(struct mbuf *m)
     struct sockaddr_in6 lhost;
 
     DEBUG_CALL("udp6_input");
-    DEBUG_ARG("m = %lx", (long)m);
+    DEBUG_ARG("m = %p", m);
 
     if (slirp->restricted) {
         goto bad;
@@ -144,8 +144,8 @@ int udp6_output(struct socket *so, struct mbuf *m,
     struct udphdr *uh;
 
     DEBUG_CALL("udp6_output");
-    DEBUG_ARG("so = %lx", (long)so);
-    DEBUG_ARG("m = %lx", (long)m);
+    DEBUG_ARG("so = %p", so);
+    DEBUG_ARG("m = %p", m);
 
     /* adjust for header */
     m->m_data -= sizeof(struct udphdr);
-- 
2.20.1

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

* [Qemu-devel] [PULL 57/65] slirp: remove remaining DEBUG blocks
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (55 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 56/65] slirp: use %p for pointers format Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:52 ` [Qemu-devel] [PULL 58/65] slirp: replace DEBUG_ARGS with DEBUG_ARG Samuel Thibault
                   ` (9 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Instead, rely on slirp_debug flags, or compile unconditionally (the
substraction in cksum is unlikely to affect any benchmark result).

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/cksum.c   | 4 ----
 slirp/ip_icmp.c | 5 ++---
 slirp/slirp.c   | 5 +----
 3 files changed, 3 insertions(+), 11 deletions(-)

diff --git a/slirp/cksum.c b/slirp/cksum.c
index b9466485b5..0a988b845d 100644
--- a/slirp/cksum.c
+++ b/slirp/cksum.c
@@ -70,9 +70,7 @@ int cksum(struct mbuf *m, int len)
 
 	if (len < mlen)
 	   mlen = len;
-#ifdef DEBUG
 	len -= mlen;
-#endif
 	/*
 	 * Force to even boundary.
 	 */
@@ -122,12 +120,10 @@ int cksum(struct mbuf *m, int len)
 	   s_util.c[0] = *(uint8_t *)w;
 
 cont:
-#ifdef DEBUG
 	if (len) {
 		DEBUG_ERROR("cksum: out of data\n");
 		DEBUG_ERROR(" len = %d\n", len);
 	}
-#endif
 	if (mlen == -1) {
 		/* The last mbuf has odd # of bytes. Follow the
 		 standard (the odd byte may be shifted left by 8 bits
diff --git a/slirp/ip_icmp.c b/slirp/ip_icmp.c
index 6c7e375ff8..cd2faeacb6 100644
--- a/slirp/ip_icmp.c
+++ b/slirp/ip_icmp.c
@@ -257,13 +257,12 @@ icmp_send_error(struct mbuf *msrc, u_char type, u_char code, int minsize,
   /* check msrc */
   if(!msrc) goto end_error;
   ip = mtod(msrc, struct ip *);
-#ifdef DEBUG
-  { char bufa[20], bufb[20];
+  if (slirp_debug & DBG_MISC) {
+    char bufa[20], bufb[20];
     strcpy(bufa, inet_ntoa(ip->ip_src));
     strcpy(bufb, inet_ntoa(ip->ip_dst));
     DEBUG_MISC(" %.16s to %.16s\n", bufa, bufb);
   }
-#endif
   if(ip->ip_off & IP_OFFMASK) goto end_error;    /* Only reply to fragment 0 */
 
   /* Do not reply to source-only IPs */
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 0b70cb9fb6..6c732cd15b 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -195,9 +195,7 @@ static int get_dns_addr_resolv_conf(int af, void *pdns_addr, void *cached_addr,
             if (++found > 3) {
                 DEBUG_MISC("(more)");
                 break;
-            }
-#ifdef DEBUG
-            else {
+            } else if (slirp_debug & DBG_MISC) {
                 char s[INET6_ADDRSTRLEN];
                 const char *res = inet_ntop(af, tmp_addr, s, sizeof(s));
                 if (!res) {
@@ -205,7 +203,6 @@ static int get_dns_addr_resolv_conf(int af, void *pdns_addr, void *cached_addr,
                 }
                 DEBUG_MISC("%s", res);
             }
-#endif
         }
     }
     fclose(f);
-- 
2.20.1

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

* [Qemu-devel] [PULL 58/65] slirp: replace DEBUG_ARGS with DEBUG_ARG
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (56 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 57/65] slirp: remove remaining DEBUG blocks Samuel Thibault
@ 2019-01-14 22:52 ` Samuel Thibault
  2019-01-14 22:53 ` [Qemu-devel] [PULL 59/65] slirp: factor out guestfwd addition checks Samuel Thibault
                   ` (8 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

There is no clear benefit in calling an alias DEBUG_ARGS(). Replace
calls with DEBUG_ARG(), and fix the white-spacing while at it.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/arp_table.c | 12 ++++++------
 slirp/debug.h     |  2 --
 slirp/ip6_icmp.c  |  2 +-
 slirp/ndp_table.c | 18 +++++++++---------
 slirp/slirp.c     | 12 ++++++------
 slirp/tcp_input.c |  6 +++---
 6 files changed, 25 insertions(+), 27 deletions(-)

diff --git a/slirp/arp_table.c b/slirp/arp_table.c
index ce19e6e7c0..bf71b984ad 100644
--- a/slirp/arp_table.c
+++ b/slirp/arp_table.c
@@ -34,9 +34,9 @@ void arp_table_add(Slirp *slirp, uint32_t ip_addr, uint8_t ethaddr[ETH_ALEN])
 
     DEBUG_CALL("arp_table_add");
     DEBUG_ARG("ip = %s", inet_ntoa((struct in_addr){.s_addr = ip_addr}));
-    DEBUG_ARGS(" hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
-               ethaddr[0], ethaddr[1], ethaddr[2],
-               ethaddr[3], ethaddr[4], ethaddr[5]);
+    DEBUG_ARG("hw addr = %02x:%02x:%02x:%02x:%02x:%02x",
+              ethaddr[0], ethaddr[1], ethaddr[2],
+              ethaddr[3], ethaddr[4], ethaddr[5]);
 
     if (ip_addr == 0 || ip_addr == 0xffffffff || ip_addr == broadcast_addr) {
         /* Do not register broadcast addresses */
@@ -79,9 +79,9 @@ bool arp_table_search(Slirp *slirp, uint32_t ip_addr,
     for (i = 0; i < ARP_TABLE_SIZE; i++) {
         if (arptbl->table[i].ar_sip == ip_addr) {
             memcpy(out_ethaddr, arptbl->table[i].ar_sha,  ETH_ALEN);
-            DEBUG_ARGS(" found hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
-                       out_ethaddr[0], out_ethaddr[1], out_ethaddr[2],
-                       out_ethaddr[3], out_ethaddr[4], out_ethaddr[5]);
+            DEBUG_ARG("found hw addr = %02x:%02x:%02x:%02x:%02x:%02x",
+                      out_ethaddr[0], out_ethaddr[1], out_ethaddr[2],
+                      out_ethaddr[3], out_ethaddr[4], out_ethaddr[5]);
             return 1;
         }
     }
diff --git a/slirp/debug.h b/slirp/debug.h
index ff920f0b87..50f30898fb 100644
--- a/slirp/debug.h
+++ b/slirp/debug.h
@@ -33,8 +33,6 @@ extern int slirp_debug;
     }                                           \
 } while (0)
 
-#define DEBUG_ARGS(fmt, ...) DEBUG_ARG(fmt, ##__VA_ARGS__)
-
 #define DEBUG_MISC(fmt, ...) do {               \
     if (slirp_debug & DBG_MISC) {               \
         fprintf(dfd, fmt, ##__VA_ARGS__);       \
diff --git a/slirp/ip6_icmp.c b/slirp/ip6_icmp.c
index bce075913c..97304a9dd9 100644
--- a/slirp/ip6_icmp.c
+++ b/slirp/ip6_icmp.c
@@ -77,7 +77,7 @@ void icmp6_send_error(struct mbuf *m, uint8_t type, uint8_t code)
     char addrstr[INET6_ADDRSTRLEN];
 
     DEBUG_CALL("icmp6_send_error");
-    DEBUG_ARGS(" type = %d, code = %d\n", type, code);
+    DEBUG_ARG("type = %d, code = %d", type, code);
 
     if (IN6_IS_ADDR_MULTICAST(&ip->ip_src) ||
             in6_zero(&ip->ip_src)) {
diff --git a/slirp/ndp_table.c b/slirp/ndp_table.c
index 1401e1b322..b7b73722f7 100644
--- a/slirp/ndp_table.c
+++ b/slirp/ndp_table.c
@@ -18,9 +18,9 @@ void ndp_table_add(Slirp *slirp, struct in6_addr ip_addr,
 
     DEBUG_CALL("ndp_table_add");
     DEBUG_ARG("ip = %s", addrstr);
-    DEBUG_ARGS(" hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
-               ethaddr[0], ethaddr[1], ethaddr[2],
-               ethaddr[3], ethaddr[4], ethaddr[5]);
+    DEBUG_ARG("hw addr = %02x:%02x:%02x:%02x:%02x:%02x",
+              ethaddr[0], ethaddr[1], ethaddr[2],
+              ethaddr[3], ethaddr[4], ethaddr[5]);
 
     if (IN6_IS_ADDR_MULTICAST(&ip_addr) || in6_zero(&ip_addr)) {
         /* Do not register multicast or unspecified addresses */
@@ -67,18 +67,18 @@ bool ndp_table_search(Slirp *slirp, struct in6_addr ip_addr,
         out_ethaddr[3] = ip_addr.s6_addr[13];
         out_ethaddr[4] = ip_addr.s6_addr[14];
         out_ethaddr[5] = ip_addr.s6_addr[15];
-        DEBUG_ARGS(" multicast addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
-                   out_ethaddr[0], out_ethaddr[1], out_ethaddr[2],
-                   out_ethaddr[3], out_ethaddr[4], out_ethaddr[5]);
+        DEBUG_ARG("multicast addr = %02x:%02x:%02x:%02x:%02x:%02x",
+                  out_ethaddr[0], out_ethaddr[1], out_ethaddr[2],
+                  out_ethaddr[3], out_ethaddr[4], out_ethaddr[5]);
         return 1;
     }
 
     for (i = 0; i < NDP_TABLE_SIZE; i++) {
         if (in6_equal(&ndp_table->table[i].ip_addr, &ip_addr)) {
             memcpy(out_ethaddr, ndp_table->table[i].eth_addr,  ETH_ALEN);
-            DEBUG_ARGS(" found hw addr = %02x:%02x:%02x:%02x:%02x:%02x\n",
-                       out_ethaddr[0], out_ethaddr[1], out_ethaddr[2],
-                       out_ethaddr[3], out_ethaddr[4], out_ethaddr[5]);
+            DEBUG_ARG("found hw addr = %02x:%02x:%02x:%02x:%02x:%02x",
+                      out_ethaddr[0], out_ethaddr[1], out_ethaddr[2],
+                      out_ethaddr[3], out_ethaddr[4], out_ethaddr[5]);
             return 1;
         }
     }
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 6c732cd15b..851462a4cd 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -992,12 +992,12 @@ int if_encap(Slirp *slirp, struct mbuf *ifm)
     }
 
     memcpy(eh->h_dest, ethaddr, ETH_ALEN);
-    DEBUG_ARGS(" src = %02x:%02x:%02x:%02x:%02x:%02x\n",
-               eh->h_source[0], eh->h_source[1], eh->h_source[2],
-               eh->h_source[3], eh->h_source[4], eh->h_source[5]);
-    DEBUG_ARGS(" dst = %02x:%02x:%02x:%02x:%02x:%02x\n",
-               eh->h_dest[0], eh->h_dest[1], eh->h_dest[2],
-               eh->h_dest[3], eh->h_dest[4], eh->h_dest[5]);
+    DEBUG_ARG("src = %02x:%02x:%02x:%02x:%02x:%02x",
+              eh->h_source[0], eh->h_source[1], eh->h_source[2],
+              eh->h_source[3], eh->h_source[4], eh->h_source[5]);
+    DEBUG_ARG("dst = %02x:%02x:%02x:%02x:%02x:%02x",
+              eh->h_dest[0], eh->h_dest[1], eh->h_dest[2],
+              eh->h_dest[3], eh->h_dest[4], eh->h_dest[5]);
     memcpy(buf + sizeof(struct ethhdr), ifm->m_data, ifm->m_len);
     slirp->cb->output(slirp->opaque, buf, ifm->m_len + ETH_HLEN);
     return 1;
diff --git a/slirp/tcp_input.c b/slirp/tcp_input.c
index f1cddce992..585ed1cb2f 100644
--- a/slirp/tcp_input.c
+++ b/slirp/tcp_input.c
@@ -215,8 +215,8 @@ tcp_input(struct mbuf *m, int iphlen, struct socket *inso, unsigned short af)
     Slirp *slirp;
 
 	DEBUG_CALL("tcp_input");
-	DEBUG_ARGS(" m = %p  iphlen = %2d  inso = %p\n",
-               m, iphlen, inso);
+	DEBUG_ARG("m = %p  iphlen = %2d  inso = %p",
+              m, iphlen, inso);
 
 	/*
 	 * If called with m == 0, then we're continuing the connect
@@ -1389,7 +1389,7 @@ tcp_dooptions(struct tcpcb *tp, u_char *cp, int cnt, struct tcpiphdr *ti)
 	int opt, optlen;
 
 	DEBUG_CALL("tcp_dooptions");
-	DEBUG_ARGS(" tp = %p  cnt=%i\n", tp, cnt);
+	DEBUG_ARG("tp = %p  cnt=%i", tp, cnt);
 
 	for (; cnt > 0; cnt -= optlen, cp += optlen) {
 		opt = cp[0];
-- 
2.20.1

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

* [Qemu-devel] [PULL 59/65] slirp: factor out guestfwd addition checks
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (57 preceding siblings ...)
  2019-01-14 22:52 ` [Qemu-devel] [PULL 58/65] slirp: replace DEBUG_ARGS with DEBUG_ARG Samuel Thibault
@ 2019-01-14 22:53 ` Samuel Thibault
  2019-01-14 22:53 ` [Qemu-devel] [PULL 60/65] slirp: add clock_get_ns() callback Samuel Thibault
                   ` (7 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:53 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

This will allow reusing the function in a following patch.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/misc.c  |  7 -------
 slirp/slirp.c | 23 +++++++++++++++++++++--
 2 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index a0f104be5e..eae9596a55 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -37,13 +37,6 @@ int add_exec(struct gfwd_list **ex_ptr, void *chardev, const char *cmdline,
 {
 	struct gfwd_list *tmp_ptr;
 
-	/* First, check if the port is "bound" */
-	for (tmp_ptr = *ex_ptr; tmp_ptr; tmp_ptr = tmp_ptr->ex_next) {
-		if (port == tmp_ptr->ex_fport &&
-		    addr.s_addr == tmp_ptr->ex_addr.s_addr)
-			return -1;
-	}
-
 	tmp_ptr = *ex_ptr;
 	*ex_ptr = g_new0(struct gfwd_list, 1);
 	(*ex_ptr)->ex_fport = port;
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 851462a4cd..882d28a4de 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -1046,9 +1046,11 @@ int slirp_add_hostfwd(Slirp *slirp, int is_udp, struct in_addr host_addr,
     return 0;
 }
 
-int slirp_add_exec(Slirp *slirp, void *chardev, const char *cmdline,
-                   struct in_addr *guest_addr, int guest_port)
+static bool
+check_guestfwd(Slirp *slirp, struct in_addr *guest_addr, int guest_port)
 {
+    struct gfwd_list *tmp_ptr;
+
     if (!guest_addr->s_addr) {
         guest_addr->s_addr = slirp->vnetwork_addr.s_addr |
             (htonl(0x0204) & ~slirp->vnetwork_mask.s_addr);
@@ -1057,6 +1059,23 @@ int slirp_add_exec(Slirp *slirp, void *chardev, const char *cmdline,
         slirp->vnetwork_addr.s_addr ||
         guest_addr->s_addr == slirp->vhost_addr.s_addr ||
         guest_addr->s_addr == slirp->vnameserver_addr.s_addr) {
+        return false;
+    }
+
+    /* check if the port is "bound" */
+    for (tmp_ptr = slirp->guestfwd_list; tmp_ptr; tmp_ptr = tmp_ptr->ex_next) {
+        if (guest_port == tmp_ptr->ex_fport &&
+            guest_addr->s_addr == tmp_ptr->ex_addr.s_addr)
+            return false;
+    }
+
+    return true;
+}
+
+int slirp_add_exec(Slirp *slirp, void *chardev, const char *cmdline,
+                   struct in_addr *guest_addr, int guest_port)
+{
+    if (!check_guestfwd(slirp, guest_addr, guest_port)) {
         return -1;
     }
 
-- 
2.20.1

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

* [Qemu-devel] [PULL 60/65] slirp: add clock_get_ns() callback
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (58 preceding siblings ...)
  2019-01-14 22:53 ` [Qemu-devel] [PULL 59/65] slirp: factor out guestfwd addition checks Samuel Thibault
@ 2019-01-14 22:53 ` Samuel Thibault
  2019-01-14 22:53 ` [Qemu-devel] [PULL 61/65] build-sys: use a separate slirp-obj-y && slirp.mo Samuel Thibault
                   ` (6 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:53 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 net/slirp.c      |  6 ++++++
 slirp/if.c       |  2 +-
 slirp/ip6_icmp.c |  4 ++--
 slirp/libslirp.h |  2 ++
 slirp/slirp.c    | 12 +++++-------
 5 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/net/slirp.c b/net/slirp.c
index 2d5337da04..f98425ee9f 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -146,9 +146,15 @@ static void net_slirp_guest_error(const char *msg)
     qemu_log_mask(LOG_GUEST_ERROR, "%s", msg);
 }
 
+static int64_t net_slirp_clock_get_ns(void)
+{
+    return qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
+}
+
 static const SlirpCb slirp_cb = {
     .output = net_slirp_output,
     .guest_error = net_slirp_guest_error,
+    .clock_get_ns = net_slirp_clock_get_ns,
 };
 
 static int net_slirp_init(NetClientState *peer, const char *model,
diff --git a/slirp/if.c b/slirp/if.c
index ce4f5fac53..73e3705740 100644
--- a/slirp/if.c
+++ b/slirp/if.c
@@ -148,7 +148,7 @@ diddit:
  */
 void if_start(Slirp *slirp)
 {
-    uint64_t now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
+    uint64_t now = slirp->cb->clock_get_ns();
     bool from_batchq = false;
     struct mbuf *ifm, *ifm_next, *ifqt;
 
diff --git a/slirp/ip6_icmp.c b/slirp/ip6_icmp.c
index 97304a9dd9..5261baae27 100644
--- a/slirp/ip6_icmp.c
+++ b/slirp/ip6_icmp.c
@@ -17,7 +17,7 @@ static void ra_timer_handler(void *opaque)
 {
     Slirp *slirp = opaque;
     timer_mod(slirp->ra_timer,
-              qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + NDP_Interval);
+              slirp->cb->clock_get_ns() / SCALE_MS + NDP_Interval);
     ndp_send_ra(slirp);
 }
 
@@ -31,7 +31,7 @@ void icmp6_init(Slirp *slirp)
                                      SCALE_MS, QEMU_TIMER_ATTR_EXTERNAL,
                                      ra_timer_handler, slirp);
     timer_mod(slirp->ra_timer,
-              qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + NDP_Interval);
+              slirp->cb->clock_get_ns() / SCALE_MS + NDP_Interval);
 }
 
 void icmp6_cleanup(Slirp *slirp)
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index 3e0aa19f4b..4611a7447b 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -15,6 +15,8 @@ typedef struct SlirpCb {
     void (*output)(void *opaque, const uint8_t *pkt, int pkt_len);
     /* Print a message for an error due to guest misbehavior.  */
     void (*guest_error)(const char *msg);
+    /* Return the virtual clock value in nanoseconds */
+    int64_t (*clock_get_ns)(void);
 } SlirpCb;
 
 
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 882d28a4de..535c8ad5f9 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -581,15 +581,15 @@ void slirp_pollfds_fill(GArray *pollfds, uint32_t *timeout)
 
 void slirp_pollfds_poll(GArray *pollfds, int select_error)
 {
-    Slirp *slirp;
+    Slirp *slirp = QTAILQ_FIRST(&slirp_instances);
     struct socket *so, *so_next;
     int ret;
 
-    if (QTAILQ_EMPTY(&slirp_instances)) {
+    if (!slirp) {
         return;
     }
 
-    curtime = qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL);
+    curtime = slirp->cb->clock_get_ns() / SCALE_MS;
 
     QTAILQ_FOREACH(slirp, &slirp_instances, entry) {
         /*
@@ -916,8 +916,7 @@ static int if_encap4(Slirp *slirp, struct mbuf *ifm, struct ethhdr *eh,
             ifm->resolution_requested = true;
 
             /* Expire request and drop outgoing packet after 1 second */
-            ifm->expiration_date =
-                qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + 1000000000ULL;
+            ifm->expiration_date = slirp->cb->clock_get_ns() + 1000000000ULL;
         }
         return 0;
     } else {
@@ -943,8 +942,7 @@ static int if_encap6(Slirp *slirp, struct mbuf *ifm, struct ethhdr *eh,
         if (!ifm->resolution_requested) {
             ndp_send_ns(slirp, ip6h->ip_dst);
             ifm->resolution_requested = true;
-            ifm->expiration_date =
-                qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + 1000000000ULL;
+            ifm->expiration_date = slirp->cb->clock_get_ns() + 1000000000ULL;
         }
         return 0;
     } else {
-- 
2.20.1

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

* [Qemu-devel] [PULL 61/65] build-sys: use a separate slirp-obj-y && slirp.mo
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (59 preceding siblings ...)
  2019-01-14 22:53 ` [Qemu-devel] [PULL 60/65] slirp: add clock_get_ns() callback Samuel Thibault
@ 2019-01-14 22:53 ` Samuel Thibault
  2019-01-14 22:53 ` [Qemu-devel] [PULL 62/65] slirp: set G_LOG_DOMAIN Samuel Thibault
                   ` (5 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:53 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

This will allow to have cflags for the whole slirp.mo -objs.
It makes it possible to build tests that links only with
slirp-obj-y (and not the whole common-obj).

It is also a step towards building slirp as a shared library, although
this requires a bit more thoughts to build with
net/slirp.o (CONFIG_SLIRP would need to be 'm') and other build issues.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 Makefile            |  5 +++--
 Makefile.objs       |  3 +--
 Makefile.target     |  5 ++++-
 slirp/Makefile.objs | 35 ++++++++++++++++++++++++++++++-----
 4 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/Makefile b/Makefile
index a9ac16d94e..dccba1dca2 100644
--- a/Makefile
+++ b/Makefile
@@ -379,7 +379,8 @@ dummy := $(call unnest-vars,, \
                 ui-obj-m \
                 audio-obj-y \
                 audio-obj-m \
-                trace-obj-y)
+                trace-obj-y \
+                slirp-obj-y)
 
 include $(SRC_PATH)/tests/Makefile.include
 
@@ -452,7 +453,7 @@ CAP_CFLAGS += -DCAPSTONE_HAS_X86
 subdir-capstone: .git-submodule-status
 	$(call quiet-command,$(MAKE) -C $(SRC_PATH)/capstone CAPSTONE_SHARED=no BUILDDIR="$(BUILD_DIR)/capstone" CC="$(CC)" AR="$(AR)" LD="$(LD)" RANLIB="$(RANLIB)" CFLAGS="$(CAP_CFLAGS)" $(SUBDIR_MAKEFLAGS) $(BUILD_DIR)/capstone/$(LIBCAPSTONE))
 
-$(SUBDIR_RULES): libqemuutil.a $(common-obj-y) $(chardev-obj-y) \
+$(SUBDIR_RULES): libqemuutil.a $(common-obj-y) $(chardev-obj-y) $(slirp-obj-y) \
 	$(qom-obj-y) $(crypto-aes-obj-$(CONFIG_USER_ONLY))
 
 ROMSUBDIR_RULES=$(patsubst %,romsubdir-%, $(ROMS))
diff --git a/Makefile.objs b/Makefile.objs
index 2121120492..67a054b08a 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -17,6 +17,7 @@ util-obj-y += $(QAPI_MODULES:%=qapi/qapi-events-%.o)
 util-obj-y += qapi/qapi-introspect.o
 
 chardev-obj-y = chardev/
+slirp-obj-$(CONFIG_SLIRP) = slirp/
 
 #######################################################################
 # block-obj-y is code used by both qemu system emulation and qemu-img
@@ -79,8 +80,6 @@ common-obj-y += vl.o
 vl.o-cflags := $(GPROF_CFLAGS) $(SDL_CFLAGS)
 common-obj-$(CONFIG_TPM) += tpm.o
 
-common-obj-$(CONFIG_SLIRP) += slirp/
-
 common-obj-y += backends/
 common-obj-y += chardev/
 
diff --git a/Makefile.target b/Makefile.target
index 44ec4b630c..39f72e81be 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -165,6 +165,7 @@ target-obj-y :=
 block-obj-y :=
 common-obj-y :=
 chardev-obj-y :=
+slirp-obj-y :=
 include $(SRC_PATH)/Makefile.objs
 dummy := $(call unnest-vars,,target-obj-y)
 target-obj-y-save := $(target-obj-y)
@@ -177,7 +178,8 @@ dummy := $(call unnest-vars,.., \
                qom-obj-y \
                io-obj-y \
                common-obj-y \
-               common-obj-m)
+               common-obj-m \
+               slirp-obj-y)
 target-obj-y := $(target-obj-y-save)
 all-obj-y += $(common-obj-y)
 all-obj-y += $(target-obj-y)
@@ -186,6 +188,7 @@ all-obj-$(CONFIG_SOFTMMU) += $(block-obj-y) $(chardev-obj-y)
 all-obj-$(CONFIG_USER_ONLY) += $(crypto-aes-obj-y)
 all-obj-$(CONFIG_SOFTMMU) += $(crypto-obj-y)
 all-obj-$(CONFIG_SOFTMMU) += $(io-obj-y)
+all-obj-$(CONFIG_SOFTMMU) += $(slirp-obj-y)
 
 $(QEMU_PROG_BUILD): config-devices.mak
 
diff --git a/slirp/Makefile.objs b/slirp/Makefile.objs
index 28049b03cd..21653f69e9 100644
--- a/slirp/Makefile.objs
+++ b/slirp/Makefile.objs
@@ -1,5 +1,30 @@
-common-obj-y = cksum.o if.o ip_icmp.o ip6_icmp.o ip6_input.o ip6_output.o \
-               ip_input.o ip_output.o dnssearch.o dhcpv6.o
-common-obj-y += slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o tcp_output.o
-common-obj-y += tcp_subr.o tcp_timer.o udp.o udp6.o bootp.o tftp.o arp_table.o \
-                ndp_table.o ncsi.o
+slirp-obj-y = slirp.mo
+
+slirp.mo-objs = \
+	arp_table.o \
+	bootp.o \
+	cksum.o \
+	dhcpv6.o \
+	dnssearch.o \
+	if.o \
+	ip6_icmp.o \
+	ip6_input.o \
+	ip6_output.o \
+	ip_icmp.o \
+	ip_input.o \
+	ip_output.o \
+	mbuf.o \
+	misc.o \
+	ncsi.o \
+	ndp_table.o \
+	sbuf.o \
+	slirp.o \
+	socket.o \
+	tcp_input.o \
+	tcp_output.o \
+	tcp_subr.o \
+	tcp_timer.o \
+	tftp.o \
+	udp.o \
+	udp6.o \
+	$(NULL)
-- 
2.20.1

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

* [Qemu-devel] [PULL 62/65] slirp: set G_LOG_DOMAIN
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (60 preceding siblings ...)
  2019-01-14 22:53 ` [Qemu-devel] [PULL 61/65] build-sys: use a separate slirp-obj-y && slirp.mo Samuel Thibault
@ 2019-01-14 22:53 ` Samuel Thibault
  2019-01-14 22:53 ` [Qemu-devel] [PULL 63/65] slirp: call into g_debug() for DEBUG macros Samuel Thibault
                   ` (4 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:53 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

We are moving to g_log() facilities to log errors and probably debug
messages too. Let's have the "Slirp" prefix on messages slirp produces.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/Makefile.objs | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/slirp/Makefile.objs b/slirp/Makefile.objs
index 21653f69e9..959558c732 100644
--- a/slirp/Makefile.objs
+++ b/slirp/Makefile.objs
@@ -28,3 +28,5 @@ slirp.mo-objs = \
 	udp.o \
 	udp6.o \
 	$(NULL)
+
+slirp.mo-cflags = -DG_LOG_DOMAIN=\"Slirp\"
-- 
2.20.1

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

* [Qemu-devel] [PULL 63/65] slirp: call into g_debug() for DEBUG macros
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (61 preceding siblings ...)
  2019-01-14 22:53 ` [Qemu-devel] [PULL 62/65] slirp: set G_LOG_DOMAIN Samuel Thibault
@ 2019-01-14 22:53 ` Samuel Thibault
  2019-01-14 22:53 ` [Qemu-devel] [PULL 64/65] slirp: Mark debugging calls as unlikely Samuel Thibault
                   ` (3 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:53 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Make slirp use GLib logging, instead of fprintf(), so that
applications can filter log, process it etc.

With recent versions of glib, G_MESSAGES_DEBUG must be set to "all" or
"Slirp" to see slirp debug messages.

Reformat DEBUG_MISC & DEBUG_ERROR calls to not need \n ending.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/cksum.c      |  4 ++--
 slirp/debug.h      | 17 ++++-------------
 slirp/dhcpv6.c     |  6 +++---
 slirp/ip_icmp.c    | 10 +++++-----
 slirp/slirp.c      | 10 ++++------
 slirp/socket.c     | 24 ++++++++++++------------
 slirp/tcp_input.c  |  7 +++----
 slirp/tcp_output.c |  2 +-
 slirp/tcp_subr.c   |  2 +-
 slirp/udp.c        |  5 ++---
 slirp/udp6.c       |  5 ++---
 11 files changed, 39 insertions(+), 53 deletions(-)

diff --git a/slirp/cksum.c b/slirp/cksum.c
index 0a988b845d..84c858fafb 100644
--- a/slirp/cksum.c
+++ b/slirp/cksum.c
@@ -121,8 +121,8 @@ int cksum(struct mbuf *m, int len)
 
 cont:
 	if (len) {
-		DEBUG_ERROR("cksum: out of data\n");
-		DEBUG_ERROR(" len = %d\n", len);
+		DEBUG_ERROR("cksum: out of data");
+		DEBUG_ERROR(" len = %d", len);
 	}
 	if (mlen == -1) {
 		/* The last mbuf has odd # of bytes. Follow the
diff --git a/slirp/debug.h b/slirp/debug.h
index 50f30898fb..25a5d59439 100644
--- a/slirp/debug.h
+++ b/slirp/debug.h
@@ -12,38 +12,29 @@
 #define DBG_MISC 0x2
 #define DBG_ERROR 0x4
 
-#define dfd stderr
-
 extern int slirp_debug;
 
 #define DEBUG_CALL(fmt, ...) do {               \
     if (slirp_debug & DBG_CALL) {               \
-        fprintf(dfd, fmt, ##__VA_ARGS__);       \
-        fprintf(dfd, "...\n");                  \
-        fflush(dfd);                            \
+        g_debug(fmt "...", ##__VA_ARGS__);      \
     }                                           \
 } while (0)
 
 #define DEBUG_ARG(fmt, ...) do {                \
     if (slirp_debug & DBG_CALL) {               \
-        fputc(' ', dfd);                        \
-        fprintf(dfd, fmt, ##__VA_ARGS__);       \
-        fputc('\n', dfd);                       \
-        fflush(dfd);                            \
+        g_debug(" " fmt, ##__VA_ARGS__);        \
     }                                           \
 } while (0)
 
 #define DEBUG_MISC(fmt, ...) do {               \
     if (slirp_debug & DBG_MISC) {               \
-        fprintf(dfd, fmt, ##__VA_ARGS__);       \
-        fflush(dfd);                            \
+        g_debug(fmt, ##__VA_ARGS__);            \
     }                                           \
 } while (0)
 
 #define DEBUG_ERROR(fmt, ...) do {              \
     if (slirp_debug & DBG_ERROR) {              \
-        fprintf(dfd, fmt, ##__VA_ARGS__);       \
-        fflush(dfd);                            \
+        g_debug(fmt, ##__VA_ARGS__);            \
     }                                           \
 } while (0)
 
diff --git a/slirp/dhcpv6.c b/slirp/dhcpv6.c
index 5d703e8ae6..752df40536 100644
--- a/slirp/dhcpv6.c
+++ b/slirp/dhcpv6.c
@@ -92,13 +92,13 @@ static int dhcpv6_parse_info_request(Slirp *slirp, uint8_t *odata, int olen,
                     ri->want_boot_url = true;
                     break;
                 default:
-                    DEBUG_MISC("dhcpv6: Unsupported option request %d\n",
+                    DEBUG_MISC("dhcpv6: Unsupported option request %d",
                                req_opt);
                 }
             }
             break;
         default:
-            DEBUG_MISC("dhcpv6 info req: Unsupported option %d, len=%d\n",
+            DEBUG_MISC("dhcpv6 info req: Unsupported option %d, len=%d",
                        option, len);
         }
 
@@ -203,6 +203,6 @@ void dhcpv6_input(struct sockaddr_in6 *srcsas, struct mbuf *m)
         dhcpv6_info_request(m->slirp, srcsas, xid, &data[4], data_len - 4);
         break;
     default:
-        DEBUG_MISC("dhcpv6_input: Unsupported message type 0x%x\n", data[0]);
+        DEBUG_MISC("dhcpv6_input: Unsupported message type 0x%x", data[0]);
     }
 }
diff --git a/slirp/ip_icmp.c b/slirp/ip_icmp.c
index cd2faeacb6..7c7e042049 100644
--- a/slirp/ip_icmp.c
+++ b/slirp/ip_icmp.c
@@ -103,7 +103,7 @@ static int icmp_send(struct socket *so, struct mbuf *m, int hlen)
 
     if (sendto(so->s, m->m_data + hlen, m->m_len - hlen, 0,
                (struct sockaddr *)&addr, sizeof(addr)) == -1) {
-        DEBUG_MISC("icmp_input icmp sendto tx errno = %d-%s\n",
+        DEBUG_MISC("icmp_input icmp sendto tx errno = %d-%s",
                    errno, strerror(errno));
         icmp_send_error(m, ICMP_UNREACH, ICMP_UNREACH_NET, 0, strerror(errno));
         icmp_detach(so);
@@ -169,7 +169,7 @@ icmp_input(struct mbuf *m, int hlen)
         return;
       }
       if (udp_attach(so, AF_INET) == -1) {
-	DEBUG_MISC("icmp_input udp_attach errno = %d-%s\n",
+	DEBUG_MISC("icmp_input udp_attach errno = %d-%s",
                errno,strerror(errno));
 	sofree(so);
 	m_free(m);
@@ -192,7 +192,7 @@ icmp_input(struct mbuf *m, int hlen)
 
       if(sendto(so->s, icmp_ping_msg, strlen(icmp_ping_msg), 0,
 		(struct sockaddr *)&addr, sockaddr_size(&addr)) == -1) {
-	DEBUG_MISC("icmp_input udp sendto tx errno = %d-%s\n",
+	DEBUG_MISC("icmp_input udp sendto tx errno = %d-%s",
                errno,strerror(errno));
 	icmp_send_error(m, ICMP_UNREACH, ICMP_UNREACH_NET, 0, strerror(errno));
 	udp_detach(so);
@@ -261,7 +261,7 @@ icmp_send_error(struct mbuf *msrc, u_char type, u_char code, int minsize,
     char bufa[20], bufb[20];
     strcpy(bufa, inet_ntoa(ip->ip_src));
     strcpy(bufb, inet_ntoa(ip->ip_dst));
-    DEBUG_MISC(" %.16s to %.16s\n", bufa, bufb);
+    DEBUG_MISC(" %.16s to %.16s", bufa, bufb);
   }
   if(ip->ip_off & IP_OFFMASK) goto end_error;    /* Only reply to fragment 0 */
 
@@ -458,7 +458,7 @@ void icmp_receive(struct socket *so)
         } else {
             error_code = ICMP_UNREACH_HOST;
         }
-        DEBUG_MISC(" udp icmp rx errno = %d-%s\n", errno,
+        DEBUG_MISC(" udp icmp rx errno = %d-%s", errno,
                    strerror(errno));
         icmp_send_error(so->so_m, ICMP_UNREACH, error_code, 0, strerror(errno));
     } else {
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 535c8ad5f9..a9674ab090 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -166,7 +166,7 @@ static int get_dns_addr_resolv_conf(int af, void *pdns_addr, void *cached_addr,
     if (!f)
         return -1;
 
-    DEBUG_MISC("IP address of your DNS(s): ");
+    DEBUG_MISC("IP address of your DNS(s):");
     while (fgets(buff, 512, f) != NULL) {
         if (sscanf(buff, "nameserver%*[ \t]%256s", buff2) == 1) {
             char *c = strchr(buff2, '%');
@@ -188,20 +188,18 @@ static int get_dns_addr_resolv_conf(int af, void *pdns_addr, void *cached_addr,
                     *scope_id = if_index;
                 }
                 *cached_time = curtime;
-            } else {
-                DEBUG_MISC(", ");
             }
 
             if (++found > 3) {
-                DEBUG_MISC("(more)");
+                DEBUG_MISC("  (more)");
                 break;
             } else if (slirp_debug & DBG_MISC) {
                 char s[INET6_ADDRSTRLEN];
                 const char *res = inet_ntop(af, tmp_addr, s, sizeof(s));
                 if (!res) {
-                    res = "(string conversion error)";
+                    res = "  (string conversion error)";
                 }
-                DEBUG_MISC("%s", res);
+                DEBUG_MISC("  %s", res);
             }
         }
     }
diff --git a/slirp/socket.c b/slirp/socket.c
index 08a065f6a7..5ffbaa064a 100644
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -208,7 +208,8 @@ soread(struct socket *so)
 				}
 			}
 
-			DEBUG_MISC(" --- soread() disconnected, nn = %d, errno = %d-%s\n", nn, errno,strerror(errno));
+			DEBUG_MISC(" --- soread() disconnected, nn = %d, errno = %d-%s",
+                       nn, errno,strerror(errno));
 			sofcantrcvmore(so);
 
 			if (err == ECONNRESET || err == ECONNREFUSED
@@ -237,7 +238,7 @@ soread(struct socket *so)
                 nn += ret;
         }
 
-	DEBUG_MISC(" ... read nn = %d bytes\n", nn);
+	DEBUG_MISC(" ... read nn = %d bytes", nn);
 
 	/* Update fields */
 	sb->sb_cc += nn;
@@ -370,7 +371,7 @@ sosendoob(struct socket *so)
 		n = slirp_send(so, buff, len, (MSG_OOB)); /* |MSG_DONTWAIT)); */
 #ifdef DEBUG
 		if (n != len) {
-			DEBUG_ERROR("Didn't send all data urgently XXXXX\n");
+			DEBUG_ERROR("Didn't send all data urgently XXXXX");
 		}
 #endif
 	}
@@ -379,7 +380,7 @@ sosendoob(struct socket *so)
 		return n;
 	}
 	so->so_urgc -= n;
-	DEBUG_MISC(" ---2 sent %d bytes urgent data, %d urgent bytes left\n", n, so->so_urgc);
+	DEBUG_MISC(" ---2 sent %d bytes urgent data, %d urgent bytes left", n, so->so_urgc);
 
 	sb->sb_cc -= n;
 	sb->sb_rptr += n;
@@ -460,7 +461,7 @@ sowrite(struct socket *so)
             if (ret > 0)
                 nn += ret;
         }
-        DEBUG_MISC("  ... wrote nn = %d bytes\n", nn);
+        DEBUG_MISC("  ... wrote nn = %d bytes", nn);
 
 	/* Update sbuf */
 	sb->sb_cc -= nn;
@@ -478,7 +479,7 @@ sowrite(struct socket *so)
 	return nn;
 
 err_disconnected:
-	DEBUG_MISC(" --- sowrite disconnected, so->so_state = %x, errno = %d\n",
+	DEBUG_MISC(" --- sowrite disconnected, so->so_state = %x, errno = %d",
                so->so_state, errno);
 	sofcantsendmore(so);
 	tcp_sockclosed(sototcpcb(so));
@@ -512,7 +513,7 @@ sorecvfrom(struct socket *so)
 	    if(errno == EHOSTUNREACH) code=ICMP_UNREACH_HOST;
 	    else if(errno == ENETUNREACH) code=ICMP_UNREACH_NET;
 
-	    DEBUG_MISC(" udp icmp rx errno = %d-%s\n",
+	    DEBUG_MISC(" udp icmp rx errno = %d-%s",
                    errno,strerror(errno));
 	    icmp_send_error(so->so_m, ICMP_UNREACH, code, 0, strerror(errno));
 	  } else {
@@ -564,7 +565,7 @@ sorecvfrom(struct socket *so)
 
 	  m->m_len = recvfrom(so->s, m->m_data, len, 0,
 			      (struct sockaddr *)&addr, &addrlen);
-	  DEBUG_MISC(" did recvfrom %d, errno = %d-%s\n",
+	  DEBUG_MISC(" did recvfrom %d, errno = %d-%s",
                  m->m_len, errno,strerror(errno));
 	  if(m->m_len<0) {
 	    /* Report error as ICMP */
@@ -579,7 +580,7 @@ sorecvfrom(struct socket *so)
 		code = ICMP_UNREACH_NET;
 	      }
 
-	      DEBUG_MISC(" rx error, tx icmp ICMP_UNREACH:%i\n", code);
+	      DEBUG_MISC(" rx error, tx icmp ICMP_UNREACH:%i", code);
 	      icmp_send_error(so->so_m, ICMP_UNREACH, code, 0, strerror(errno));
 	      break;
 	    case AF_INET6:
@@ -591,7 +592,7 @@ sorecvfrom(struct socket *so)
 		code = ICMP6_UNREACH_NO_ROUTE;
 	      }
 
-	      DEBUG_MISC(" rx error, tx icmp6 ICMP_UNREACH:%i\n", code);
+	      DEBUG_MISC(" rx error, tx icmp6 ICMP_UNREACH:%i", code);
 	      icmp6_send_error(so->so_m, ICMP6_UNREACH, code);
 	      break;
 	    default:
@@ -839,8 +840,7 @@ void sotranslate_out(struct socket *so, struct sockaddr_storage *addr)
             }
         }
 
-        DEBUG_MISC(" addr.sin_port=%d, "
-                   "addr.sin_addr.s_addr=%.16s\n",
+        DEBUG_MISC(" addr.sin_port=%d, addr.sin_addr.s_addr=%.16s",
                    ntohs(sin->sin_port), inet_ntoa(sin->sin_addr));
         break;
 
diff --git a/slirp/tcp_input.c b/slirp/tcp_input.c
index 585ed1cb2f..de5b74a52b 100644
--- a/slirp/tcp_input.c
+++ b/slirp/tcp_input.c
@@ -641,8 +641,7 @@ findso:
               (errno != EINPROGRESS) && (errno != EWOULDBLOCK)
           ) {
 	    uint8_t code;
-	    DEBUG_MISC(" tcp fconnect errno = %d-%s\n",
-                   errno,strerror(errno));
+	    DEBUG_MISC(" tcp fconnect errno = %d-%s", errno, strerror(errno));
 	    if(errno == ECONNREFUSED) {
 	      /* ACK the SYN, send RST to refuse the connection */
 	      tcp_respond(tp, ti, m, ti->ti_seq + 1, (tcp_seq) 0,
@@ -1011,7 +1010,7 @@ trimthenstep6:
 
 		if (SEQ_LEQ(ti->ti_ack, tp->snd_una)) {
 			if (ti->ti_len == 0 && tiwin == tp->snd_wnd) {
-			  DEBUG_MISC(" dup ack  m = %p  so = %p\n", m, so);
+			  DEBUG_MISC(" dup ack  m = %p  so = %p", m, so);
 				/*
 				 * If we have outstanding data (other than
 				 * a window probe), this is a completely
@@ -1550,7 +1549,7 @@ tcp_mss(struct tcpcb *tp, u_int offer)
                                                (mss - (TCP_RCVSPACE % mss)) :
                                                0));
 
-	DEBUG_MISC(" returning mss = %d\n", mss);
+	DEBUG_MISC(" returning mss = %d", mss);
 
 	return mss;
 }
diff --git a/slirp/tcp_output.c b/slirp/tcp_output.c
index ecc2d506b6..6dd1ecf5d9 100644
--- a/slirp/tcp_output.c
+++ b/slirp/tcp_output.c
@@ -92,7 +92,7 @@ again:
 
 	flags = tcp_outflags[tp->t_state];
 
-	DEBUG_MISC(" --- tcp_output flags = 0x%x\n", flags);
+	DEBUG_MISC(" --- tcp_output flags = 0x%x", flags);
 
 	/*
 	 * If in persist timeout with window of 0, send 1 byte.
diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index 3b14684107..4a9a5b5edc 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -964,7 +964,7 @@ int tcp_ctl(struct socket *so)
                     so->chardev = ex_ptr->ex_chardev;
                     return 1;
                 }
-                DEBUG_MISC(" executing %s\n", ex_ptr->ex_exec);
+                DEBUG_MISC(" executing %s", ex_ptr->ex_exec);
                 return fork_exec(so, ex_ptr->ex_exec);
             }
         }
diff --git a/slirp/udp.c b/slirp/udp.c
index 4853243d87..309feb9aae 100644
--- a/slirp/udp.c
+++ b/slirp/udp.c
@@ -172,8 +172,7 @@ udp_input(register struct mbuf *m, int iphlen)
 	   */
 	  so = socreate(slirp);
 	  if (udp_attach(so, AF_INET) == -1) {
-	    DEBUG_MISC(" udp_attach errno = %d-%s\n",
-                   errno, strerror(errno));
+	    DEBUG_MISC(" udp_attach errno = %d-%s", errno, strerror(errno));
 	    sofree(so);
 	    goto bad;
 	  }
@@ -209,7 +208,7 @@ udp_input(register struct mbuf *m, int iphlen)
 	  m->m_len += iphlen;
 	  m->m_data -= iphlen;
 	  *ip=save_ip;
-	  DEBUG_MISC("udp tx errno = %d-%s\n", errno, strerror(errno));
+	  DEBUG_MISC("udp tx errno = %d-%s", errno, strerror(errno));
 	  icmp_send_error(m, ICMP_UNREACH, ICMP_UNREACH_NET, 0,
 	                  strerror(errno));
 	  goto bad;
diff --git a/slirp/udp6.c b/slirp/udp6.c
index 8cdb1892e2..fa531e03c4 100644
--- a/slirp/udp6.c
+++ b/slirp/udp6.c
@@ -92,8 +92,7 @@ void udp6_input(struct mbuf *m)
         /* If there's no socket for this packet, create one. */
         so = socreate(slirp);
         if (udp_attach(so, AF_INET6) == -1) {
-            DEBUG_MISC(" udp6_attach errno = %d-%s\n",
-                       errno, strerror(errno));
+            DEBUG_MISC(" udp6_attach errno = %d-%s", errno, strerror(errno));
             sofree(so);
             goto bad;
         }
@@ -119,7 +118,7 @@ void udp6_input(struct mbuf *m)
         m->m_len += iphlen;
         m->m_data -= iphlen;
         *ip = save_ip;
-        DEBUG_MISC("udp tx errno = %d-%s\n", errno, strerror(errno));
+        DEBUG_MISC("udp tx errno = %d-%s", errno, strerror(errno));
         icmp6_send_error(m, ICMP6_UNREACH, ICMP6_UNREACH_NO_ROUTE);
         goto bad;
     }
-- 
2.20.1

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

* [Qemu-devel] [PULL 64/65] slirp: Mark debugging calls as unlikely
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (62 preceding siblings ...)
  2019-01-14 22:53 ` [Qemu-devel] [PULL 63/65] slirp: call into g_debug() for DEBUG macros Samuel Thibault
@ 2019-01-14 22:53 ` Samuel Thibault
  2019-01-14 22:53 ` [Qemu-devel] [PULL 65/65] slirp: check data length while emulating ident function Samuel Thibault
                   ` (2 subsequent siblings)
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:53 UTC (permalink / raw)
  To: qemu-devel; +Cc: Samuel Thibault, stefanha, jan.kiszka, Marc-André Lureau

to get them out of the hot path.

Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 slirp/debug.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/slirp/debug.h b/slirp/debug.h
index 25a5d59439..269d97d807 100644
--- a/slirp/debug.h
+++ b/slirp/debug.h
@@ -15,25 +15,25 @@
 extern int slirp_debug;
 
 #define DEBUG_CALL(fmt, ...) do {               \
-    if (slirp_debug & DBG_CALL) {               \
+    if (G_UNLIKELY(slirp_debug & DBG_CALL)) {   \
         g_debug(fmt "...", ##__VA_ARGS__);      \
     }                                           \
 } while (0)
 
 #define DEBUG_ARG(fmt, ...) do {                \
-    if (slirp_debug & DBG_CALL) {               \
+    if (G_UNLIKELY(slirp_debug & DBG_CALL)) {   \
         g_debug(" " fmt, ##__VA_ARGS__);        \
     }                                           \
 } while (0)
 
 #define DEBUG_MISC(fmt, ...) do {               \
-    if (slirp_debug & DBG_MISC) {               \
+    if (G_UNLIKELY(slirp_debug & DBG_MISC)) {   \
         g_debug(fmt, ##__VA_ARGS__);            \
     }                                           \
 } while (0)
 
 #define DEBUG_ERROR(fmt, ...) do {              \
-    if (slirp_debug & DBG_ERROR) {              \
+    if (G_UNLIKELY(slirp_debug & DBG_ERROR)) {  \
         g_debug(fmt, ##__VA_ARGS__);            \
     }                                           \
 } while (0)
-- 
2.20.1

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

* [Qemu-devel] [PULL 65/65] slirp: check data length while emulating ident function
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (63 preceding siblings ...)
  2019-01-14 22:53 ` [Qemu-devel] [PULL 64/65] slirp: Mark debugging calls as unlikely Samuel Thibault
@ 2019-01-14 22:53 ` Samuel Thibault
  2019-01-15  5:28 ` [Qemu-devel] [PULLv3 00/65] slirp updates no-reply
  2019-01-17 11:35 ` Peter Maydell
  66 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14 22:53 UTC (permalink / raw)
  To: qemu-devel; +Cc: Prasad J Pandit, stefanha, jan.kiszka, Kira, Samuel Thibault

From: Prasad J Pandit <pjp@fedoraproject.org>

While emulating identification protocol, tcp_emu() does not check
available space in the 'sc_rcv->sb_data' buffer. It could lead to
heap buffer overflow issue. Add check to avoid it.

Reported-by: Kira <864786842@qq.com>
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 slirp/tcp_subr.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index 4a9a5b5edc..23a841f26e 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -634,6 +634,11 @@ tcp_emu(struct socket *so, struct mbuf *m)
 			socklen_t addrlen = sizeof(struct sockaddr_in);
 			struct sbuf *so_rcv = &so->so_rcv;
 
+			if (m->m_len > so_rcv->sb_datalen
+					- (so_rcv->sb_wptr - so_rcv->sb_data)) {
+			    return 1;
+			}
+
 			memcpy(so_rcv->sb_wptr, m->m_data, m->m_len);
 			so_rcv->sb_wptr += m->m_len;
 			so_rcv->sb_rptr += m->m_len;
-- 
2.20.1

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

* Re: [Qemu-devel] [PULLv3 00/65] slirp updates
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (64 preceding siblings ...)
  2019-01-14 22:53 ` [Qemu-devel] [PULL 65/65] slirp: check data length while emulating ident function Samuel Thibault
@ 2019-01-15  5:28 ` no-reply
  2019-01-17 11:35 ` Peter Maydell
  66 siblings, 0 replies; 69+ messages in thread
From: no-reply @ 2019-01-15  5:28 UTC (permalink / raw)
  To: samuel.thibault; +Cc: fam, qemu-devel, stefanha, jan.kiszka

Patchew URL: https://patchew.org/QEMU/20190114225306.21569-1-samuel.thibault@ens-lyon.org/



Hi,

This series seems to have some coding style problems. See output below for
more information:

Message-id: 20190114225306.21569-1-samuel.thibault@ens-lyon.org
Subject: [Qemu-devel] [PULLv3 00/65] slirp updates
Type: series

=== TEST SCRIPT BEGIN ===
#!/bin/bash
git config --local diff.renamelimit 0
git config --local diff.renames True
git config --local diff.algorithm histogram
./scripts/checkpatch.pl --mailback base..
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
017fc2f slirp: check data length while emulating ident function
e87d727 slirp: Mark debugging calls as unlikely
aa49d8f slirp: call into g_debug() for DEBUG macros
01dbc97 slirp: set G_LOG_DOMAIN
8a5a5ed build-sys: use a separate slirp-obj-y && slirp.mo
13d5ea9 slirp: add clock_get_ns() callback
753120f slirp: factor out guestfwd addition checks
2634d85 slirp: replace DEBUG_ARGS with DEBUG_ARG
4ba0640 slirp: remove remaining DEBUG blocks
6df5752 slirp: use %p for pointers format
25e8eec slirp: introduce SLIRP_DEBUG environment variable
e6ba465 slirp: always build with debug statements
17daeeb slirp: no need to make DPRINTF conditional on DEBUG
212865f slirp: replace a DEBUG block with WITH_ICMP_ERROR_MSG
99583b0 slirp: replace some fprintf() with DEBUG_MISC
9dc44cc slirp: replace a fprintf with g_critical()
284b5e8 slirp: use virtual time for packet expiration
17a297b slirp: rename exec_list
495e28c slirp: drop <Vista compatibility
ae1e716 slirp: Enable fork_exec support on Windows
33ab40a slirp: replace error_report() with g_critical()
6806bca slirp: simplify fork_exec()
1a26e8d glib-compat: add g_spawn_async_with_fds() fallback
e5bf42a net: do not depend on slirp internals
29a48b3 slirp: replace ARRAY_SIZE with G_N_ELEMENTS
7b883d6 slirp: remove dead TCP_ACK_HACK code
babb0f4 slirp: NULL is defined by stddef.h
98827e5 slirp: remove unused sbflush()
9f0401e slirp: remove #if notdef dead code
6d7b26d slirp: add a callback to log guest errors
40b1f32 slirp: improve a bit the debug macros
a2e7ea0 slirp: replace error_report() with g_critical()
1ab394c slirp: remove unused global slirp_instance
b6edd97 slirp: replace compile time DO_KEEPALIVE
012ad08 slirp: replace SIZEOF_CHAR_P with glib equivalent
a72ab14 slirp: replace HOST_WORDS_BIGENDIAN with glib equivalent
828a604 slirp: remove unused HAVE_INET_ATON
1b7ac8e slirp: remove unused DECLARE_IOVEC
d280dc0 slirp: remove HAVE_SYS_FILIO_H
c63485d slirp: remove HAVE_SYS_IOCTL_H
ccc7855 slirp: remove unused HAVE_SYS_SELECT_H
abdc8cf slirp: remove unused HAVE_SYS_WAIT_H
f855de1 slirp: remove unused HAVE_ARPA_INET_H
a6d2f4d slirp: remove unused HAVE_SYS_STROPTS_H
23c2b23 slirp: remove NO_UNIX_SOCKETS
69f38ed slirp: remove unused HAVE_SYS_BITYPES_H
789792c slirp: remove HAVE_SYS_SIGNAL_H
9bc89a4 slirp: remove the disabled readv()/writev() code path
eb61b82 slirp: remove FULL_BOLT
94ecb18 slirp: remove PROBE_CONN dead-code
4d2d201 slirp: use a callback structure to interface with qemu
2eb292d slirp: remove unused M_TRAILINGSPACE
251a687 slirp: move socket pair creation in helper function
e577000 slirp: add tftp tracing
cf883de slirp: remove dead declarations
ac8b25d slirp: replace the poor-man string split with g_strsplit()
c5d60a6 slirp: fix slirp_add_exec() leaks
89c3eaf slirp: remove Monitor dependency, return a string for info
2da06b1 slirp: move internal function declarations
e1ddac4 slirp: rename /extra/chardev
e20771f slirp: remove unused EMU_RSH
6ba5031 slirp: use a dedicated field for chardev pointer
f67ecc5 slirp: replace ex_pty with ex_chardev
e47b856 slirp: remove do_pty from fork_exec()
b91bf63 slirp: associate slirp_output callback with the Slirp context

=== OUTPUT BEGIN ===
1/65 Checking commit b91bf63f6da4 (slirp: associate slirp_output callback with the Slirp context)
2/65 Checking commit e47b856046a8 (slirp: remove do_pty from fork_exec())
3/65 Checking commit f67ecc52d2f8 (slirp: replace ex_pty with ex_chardev)
ERROR: code indent should never use tabs
#22: FILE: slirp/misc.c:56:
+^I(*ex_ptr)->ex_chardev = do_pty == 3;$

ERROR: code indent should never use tabs
#35: FILE: slirp/misc.h:12:
+^Iint ex_chardev;$

total: 2 errors, 0 warnings, 40 lines checked

Patch 3/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

4/65 Checking commit 6ba5031c5183 (slirp: use a dedicated field for chardev pointer)
ERROR: code indent should never use tabs
#77: FILE: slirp/misc.c:53:
+^I*ex_ptr = g_new0(struct ex_list, 1);$

ERROR: code indent should never use tabs
#82: FILE: slirp/misc.c:56:
+^Iif (chardev) {$

ERROR: code indent should never use tabs
#83: FILE: slirp/misc.c:57:
+^I^I(*ex_ptr)->ex_chardev = chardev;$

ERROR: code indent should never use tabs
#84: FILE: slirp/misc.c:58:
+^I} else {$

ERROR: code indent should never use tabs
#85: FILE: slirp/misc.c:59:
+^I^I(*ex_ptr)->ex_exec = g_strdup(cmdline);$

ERROR: code indent should never use tabs
#86: FILE: slirp/misc.c:60:
+^I}$

ERROR: code indent should never use tabs
#99: FILE: slirp/misc.h:12:
+^Ivoid *ex_chardev;$

total: 7 errors, 0 warnings, 100 lines checked

Patch 4/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

5/65 Checking commit e20771fed78b (slirp: remove unused EMU_RSH)
6/65 Checking commit e1ddac489c29 (slirp: rename /extra/chardev)
ERROR: "foo * bar" should be "foo *bar"
#39: FILE: slirp/socket.h:70:
+  void * chardev;

total: 1 errors, 0 warnings, 28 lines checked

Patch 6/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

7/65 Checking commit 2da06b131f4d (slirp: move internal function declarations)
8/65 Checking commit 89c3eaf69442 (slirp: remove Monitor dependency, return a string for info)
9/65 Checking commit c5d60a6957a3 (slirp: fix slirp_add_exec() leaks)
ERROR: code indent should never use tabs
#22: FILE: slirp/misc.h:15:
+^Ichar *ex_exec;                  /* Command line of what to exec */$

total: 1 errors, 0 warnings, 22 lines checked

Patch 9/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

10/65 Checking commit ac8b25d5141e (slirp: replace the poor-man string split with g_strsplit())
ERROR: code indent should never use tabs
#26: FILE: slirp/misc.c:91:
+^Ichar **argv;$

ERROR: code indent should never use tabs
#27: FILE: slirp/misc.c:92:
+^Iint ret;$

total: 2 errors, 0 warnings, 33 lines checked

Patch 10/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

11/65 Checking commit cf883deeb016 (slirp: remove dead declarations)
12/65 Checking commit e577000b30a7 (slirp: add tftp tracing)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#57: 
new file mode 100644

total: 0 errors, 1 warnings, 33 lines checked

Patch 12/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
13/65 Checking commit 251a687b9b7a (slirp: move socket pair creation in helper function)
ERROR: code indent should never use tabs
#102: FILE: slirp/misc.c:136:
+^Iint opt, c, sp[2];$

ERROR: code indent should never use tabs
#154: FILE: slirp/misc.c:151:
+^I^Iclosesocket(sp[0]);$

ERROR: code indent should never use tabs
#155: FILE: slirp/misc.c:152:
+^I^Iclosesocket(sp[1]);$

ERROR: code indent should never use tabs
#168: FILE: slirp/misc.c:156:
+^I^Isetsid();$

ERROR: code indent should never use tabs
#169: FILE: slirp/misc.c:157:
+^I^Idup2(sp[1], 0);$

ERROR: code indent should never use tabs
#170: FILE: slirp/misc.c:158:
+^I^Idup2(sp[1], 1);$

ERROR: code indent should never use tabs
#171: FILE: slirp/misc.c:159:
+^I^Idup2(sp[1], 2);$

ERROR: code indent should never use tabs
#172: FILE: slirp/misc.c:160:
+^I^Ifor (c = getdtablesize() - 1; c >= 3; c--)$

ERROR: suspect code indent for conditional statements (16, 19)
#172: FILE: slirp/misc.c:160:
+               for (c = getdtablesize() - 1; c >= 3; c--)
+                  close(c);

ERROR: braces {} are necessary for all arms of this statement
#172: FILE: slirp/misc.c:160:
+               for (c = getdtablesize() - 1; c >= 3; c--)
[...]

ERROR: code indent should never use tabs
#173: FILE: slirp/misc.c:161:
+^I^I   close(c);$

ERROR: code indent should never use tabs
#181: FILE: slirp/misc.c:173:
+^I^Iso->s = sp[0];$

ERROR: code indent should never use tabs
#182: FILE: slirp/misc.c:174:
+^I^Iclosesocket(sp[1]);$

ERROR: code indent should never use tabs
#196: FILE: slirp/misc.c:176:
+^I^Isocket_set_fast_reuse(so->s);$

ERROR: code indent should never use tabs
#197: FILE: slirp/misc.c:177:
+^I^Iopt = 1;$

WARNING: line over 80 characters
#198: FILE: slirp/misc.c:178:
+               qemu_setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));

ERROR: code indent should never use tabs
#198: FILE: slirp/misc.c:178:
+^I^Iqemu_setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));$

total: 16 errors, 1 warnings, 175 lines checked

Patch 13/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

14/65 Checking commit 2eb292db9be5 (slirp: remove unused M_TRAILINGSPACE)
15/65 Checking commit 4d2d20166523 (slirp: use a callback structure to interface with qemu)
16/65 Checking commit 94ecb187994c (slirp: remove PROBE_CONN dead-code)
17/65 Checking commit eb61b824d7bc (slirp: remove FULL_BOLT)
18/65 Checking commit 9bc89a4f2a5c (slirp: remove the disabled readv()/writev() code path)
19/65 Checking commit 789792cfe87e (slirp: remove HAVE_SYS_SIGNAL_H)
20/65 Checking commit 69f38ed4447b (slirp: remove unused HAVE_SYS_BITYPES_H)
21/65 Checking commit 23c2b23d572c (slirp: remove NO_UNIX_SOCKETS)
22/65 Checking commit a6d2f4d42343 (slirp: remove unused HAVE_SYS_STROPTS_H)
23/65 Checking commit f855de15d8cf (slirp: remove unused HAVE_ARPA_INET_H)
24/65 Checking commit abdc8cf9f2ff (slirp: remove unused HAVE_SYS_WAIT_H)
25/65 Checking commit ccc7855687b3 (slirp: remove unused HAVE_SYS_SELECT_H)
26/65 Checking commit c63485d789c7 (slirp: remove HAVE_SYS_IOCTL_H)
27/65 Checking commit d280dc058a4b (slirp: remove HAVE_SYS_FILIO_H)
WARNING: architecture specific defines should be avoided
#21: FILE: slirp/slirp.h:39:
+#ifdef __APPLE__

total: 0 errors, 1 warnings, 20 lines checked

Patch 27/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
28/65 Checking commit 1b7ac8e35ca4 (slirp: remove unused DECLARE_IOVEC)
29/65 Checking commit 828a604413f1 (slirp: remove unused HAVE_INET_ATON)
30/65 Checking commit a72ab1493793 (slirp: replace HOST_WORDS_BIGENDIAN with glib equivalent)
31/65 Checking commit 012ad080d1e0 (slirp: replace SIZEOF_CHAR_P with glib equivalent)
32/65 Checking commit b6edd977f00d (slirp: replace compile time DO_KEEPALIVE)
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#52: 
deleted file mode 100644

ERROR: code indent should never use tabs
#78: FILE: slirp/tcp_input.c:484:
+^Iif (slirp_do_keepalive)$

ERROR: suspect code indent for conditional statements (8, 11)
#78: FILE: slirp/tcp_input.c:484:
+       if (slirp_do_keepalive)
           tp->t_timer[TCPT_KEEP] = TCPTV_KEEPINTVL;

ERROR: braces {} are necessary for all arms of this statement
#78: FILE: slirp/tcp_input.c:484:
+       if (slirp_do_keepalive)
[...]
        else
[...]

ERROR: code indent should never use tabs
#91: FILE: slirp/tcp_timer.c:265:
+^I^Iif (slirp_do_keepalive && tp->t_state <= TCPS_CLOSE_WAIT) {$

total: 4 errors, 1 warnings, 43 lines checked

Patch 32/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

33/65 Checking commit 1ab394cb6787 (slirp: remove unused global slirp_instance)
34/65 Checking commit a2e7ea0909cb (slirp: replace error_report() with g_critical())
35/65 Checking commit 40b1f3274db2 (slirp: improve a bit the debug macros)
ERROR: code indent should never use tabs
#68: FILE: slirp/cksum.c:127:
+^I^IDEBUG_ERROR("cksum: out of data\n");$

ERROR: code indent should never use tabs
#69: FILE: slirp/cksum.c:128:
+^I^IDEBUG_ERROR(" len = %d\n", len);$

ERROR: code indent should never use tabs
#199: FILE: slirp/ip_icmp.c:168:
+^IDEBUG_MISC("icmp_input udp_attach errno = %d-%s\n",$

ERROR: space required after that ',' (ctx:VxV)
#200: FILE: slirp/ip_icmp.c:169:
+               errno,strerror(errno));
                     ^

ERROR: code indent should never use tabs
#210: FILE: slirp/ip_icmp.c:191:
+^IDEBUG_MISC("icmp_input udp sendto tx errno = %d-%s\n",$

ERROR: space required after that ',' (ctx:VxV)
#211: FILE: slirp/ip_icmp.c:192:
+               errno,strerror(errno));
                     ^

ERROR: code indent should never use tabs
#244: FILE: slirp/mbuf.c:235:
+^IDEBUG_ERROR("dtom failed");$

ERROR: line over 90 characters
#322: FILE: slirp/socket.c:211:
+                       DEBUG_MISC(" --- soread() disconnected, nn = %d, errno = %d-%s\n", nn, errno,strerror(errno));

ERROR: code indent should never use tabs
#322: FILE: slirp/socket.c:211:
+^I^I^IDEBUG_MISC(" --- soread() disconnected, nn = %d, errno = %d-%s\n", nn, errno,strerror(errno));$

ERROR: space required after that ',' (ctx:VxV)
#322: FILE: slirp/socket.c:211:
+                       DEBUG_MISC(" --- soread() disconnected, nn = %d, errno = %d-%s\n", nn, errno,strerror(errno));
                                                                                                    ^

ERROR: code indent should never use tabs
#331: FILE: slirp/socket.c:240:
+^IDEBUG_MISC(" ... read nn = %d bytes\n", nn);$

ERROR: code indent should never use tabs
#340: FILE: slirp/socket.c:373:
+^I^I^IDEBUG_ERROR("Didn't send all data urgently XXXXX\n");$

ERROR: line over 90 characters
#349: FILE: slirp/socket.c:382:
+       DEBUG_MISC(" ---2 sent %d bytes urgent data, %d urgent bytes left\n", n, so->so_urgc);

ERROR: code indent should never use tabs
#349: FILE: slirp/socket.c:382:
+^IDEBUG_MISC(" ---2 sent %d bytes urgent data, %d urgent bytes left\n", n, so->so_urgc);$

ERROR: code indent should never use tabs
#368: FILE: slirp/socket.c:481:
+^IDEBUG_MISC(" --- sowrite disconnected, so->so_state = %x, errno = %d\n",$

ERROR: code indent should never use tabs
#379: FILE: slirp/socket.c:515:
+^I    DEBUG_MISC(" udp icmp rx errno = %d-%s\n",$

ERROR: space required after that ',' (ctx:VxV)
#380: FILE: slirp/socket.c:516:
+                   errno,strerror(errno));
                         ^

ERROR: code indent should never use tabs
#390: FILE: slirp/socket.c:567:
+^I  DEBUG_MISC(" did recvfrom %d, errno = %d-%s\n",$

ERROR: space required after that ',' (ctx:VxV)
#391: FILE: slirp/socket.c:568:
+                 m->m_len, errno,strerror(errno));
                                 ^

ERROR: code indent should never use tabs
#400: FILE: slirp/socket.c:582:
+^I      DEBUG_MISC(" rx error, tx icmp ICMP_UNREACH:%i\n", code);$

ERROR: code indent should never use tabs
#409: FILE: slirp/socket.c:594:
+^I      DEBUG_MISC(" rx error, tx icmp6 ICMP_UNREACH:%i\n", code);$

ERROR: code indent should never use tabs
#436: FILE: slirp/tcp_input.c:239:
+^IDEBUG_ARGS(" m = %p  iphlen = %2d  inso = %p\n",$

ERROR: code indent should never use tabs
#447: FILE: slirp/tcp_input.c:665:
+^I    DEBUG_MISC(" tcp fconnect errno = %d-%s\n",$

ERROR: space required after that ',' (ctx:VxV)
#448: FILE: slirp/tcp_input.c:666:
+                   errno,strerror(errno));
                         ^

ERROR: suspect code indent for conditional statements (24, 26)
#455: FILE: slirp/tcp_input.c:1034:
                        if (ti->ti_len == 0 && tiwin == tp->snd_wnd) {
+                         DEBUG_MISC(" dup ack  m = %p  so = %p\n", m, so);

ERROR: code indent should never use tabs
#458: FILE: slirp/tcp_input.c:1035:
+^I^I^I  DEBUG_MISC(" dup ack  m = %p  so = %p\n", m, so);$

ERROR: code indent should never use tabs
#467: FILE: slirp/tcp_input.c:1413:
+^IDEBUG_ARGS(" tp = %p  cnt=%i\n", tp, cnt);$

ERROR: code indent should never use tabs
#476: FILE: slirp/tcp_input.c:1613:
+^IDEBUG_MISC(" returning mss = %d\n", mss);$

ERROR: code indent should never use tabs
#489: FILE: slirp/tcp_output.c:95:
+^IDEBUG_MISC(" --- tcp_output flags = 0x%x\n", flags);$

ERROR: code indent should never use tabs
#525: FILE: slirp/udp.c:175:
+^I    DEBUG_MISC(" udp_attach errno = %d-%s\n",$

ERROR: code indent should never use tabs
#535: FILE: slirp/udp.c:212:
+^I  DEBUG_MISC("udp tx errno = %d-%s\n", errno, strerror(errno));$

total: 31 errors, 0 warnings, 445 lines checked

Patch 35/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

36/65 Checking commit 6d7b26ddf447 (slirp: add a callback to log guest errors)
37/65 Checking commit 9f0401e53bed (slirp: remove #if notdef dead code)
38/65 Checking commit 98827e58f8aa (slirp: remove unused sbflush())
39/65 Checking commit babb0f4b20b1 (slirp: NULL is defined by stddef.h)
40/65 Checking commit 7b883d6e93a3 (slirp: remove dead TCP_ACK_HACK code)
41/65 Checking commit 29a48b37342a (slirp: replace ARRAY_SIZE with G_N_ELEMENTS)
ERROR: suspect code indent for conditional statements (2, 6)
#37: FILE: slirp/tftp.c:362:
+  while (k < pktlen && nb_options < G_N_ELEMENTS(option_name)) {
       const char *key, *value;

ERROR: suspect code indent for conditional statements (2, 6)
#44: FILE: slirp/tftp.c:405:
   if (nb_options > 0) {
+      assert(nb_options <= G_N_ELEMENTS(option_name));

total: 2 errors, 0 warnings, 24 lines checked

Patch 41/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

42/65 Checking commit e5bf42a86705 (net: do not depend on slirp internals)
43/65 Checking commit 1a26e8d5afc7 (glib-compat: add g_spawn_async_with_fds() fallback)
44/65 Checking commit 6806bca2d314 (slirp: simplify fork_exec())
WARNING: Block comments use a leading /* on a separate line
#58: FILE: slirp/misc.c:154:
+    g_spawn_async_with_fds(NULL /* cwd */,

WARNING: Block comments use a leading /* on a separate line
#60: FILE: slirp/misc.c:156:
+                           NULL /* env */,

WARNING: Block comments use a leading /* on a separate line
#62: FILE: slirp/misc.c:158:
+                           fork_exec_child_setup, NULL /* data */,

WARNING: Block comments use a leading /* on a separate line
#63: FILE: slirp/misc.c:159:
+                           NULL /* child_pid */,

total: 0 errors, 4 warnings, 92 lines checked

Patch 44/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
45/65 Checking commit 33ab40a1799e (slirp: replace error_report() with g_critical())
46/65 Checking commit ae1e716c6522 (slirp: Enable fork_exec support on Windows)
47/65 Checking commit 495e28c5cd19 (slirp: drop <Vista compatibility)
48/65 Checking commit 17a297b93e93 (slirp: rename exec_list)
ERROR: code indent should never use tabs
#28: FILE: slirp/misc.c:42:
+^Istruct gfwd_list *tmp_ptr;$

ERROR: code indent should never use tabs
#37: FILE: slirp/misc.c:52:
+^I*ex_ptr = g_new0(struct gfwd_list, 1);$

ERROR: code indent should never use tabs
#56: FILE: slirp/misc.h:16:
+^Istruct gfwd_list *ex_next;$

WARNING: line over 80 characters
#99: FILE: slirp/slirp.c:783:
+            for (ex_ptr = slirp->guestfwd_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {

WARNING: line over 80 characters
#173: FILE: slirp/tcp_input.c:397:
+            for (ex_ptr = slirp->guestfwd_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {

ERROR: code indent should never use tabs
#182: FILE: slirp/tcp_input.c:619:
+^I^Ifor (ex_ptr = slirp->guestfwd_list; ex_ptr;$

ERROR: suspect code indent for conditional statements (16, 18)
#182: FILE: slirp/tcp_input.c:619:
+               for (ex_ptr = slirp->guestfwd_list; ex_ptr;
[...]
                  if(ex_ptr->ex_fport == so->so_fport &&

total: 5 errors, 2 warnings, 152 lines checked

Patch 48/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

49/65 Checking commit 284b5e847032 (slirp: use virtual time for packet expiration)
50/65 Checking commit 9dc44cc1dfcb (slirp: replace a fprintf with g_critical())
51/65 Checking commit 99583b0538af (slirp: replace some fprintf() with DEBUG_MISC)
52/65 Checking commit 212865ff2cf4 (slirp: replace a DEBUG block with WITH_ICMP_ERROR_MSG)
53/65 Checking commit 17daeebf144f (slirp: no need to make DPRINTF conditional on DEBUG)
54/65 Checking commit e6ba465226f0 (slirp: always build with debug statements)
55/65 Checking commit 25e8eec4a767 (slirp: introduce SLIRP_DEBUG environment variable)
56/65 Checking commit 6df57528d916 (slirp: use %p for pointers format)
57/65 Checking commit 4ba0640754f0 (slirp: remove remaining DEBUG blocks)
58/65 Checking commit 2634d8529ecb (slirp: replace DEBUG_ARGS with DEBUG_ARG)
ERROR: code indent should never use tabs
#145: FILE: slirp/tcp_input.c:218:
+^IDEBUG_ARG("m = %p  iphlen = %2d  inso = %p",$

ERROR: code indent should never use tabs
#155: FILE: slirp/tcp_input.c:1392:
+^IDEBUG_ARG("tp = %p  cnt=%i", tp, cnt);$

total: 2 errors, 0 warnings, 112 lines checked

Patch 58/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

59/65 Checking commit 753120f87af5 (slirp: factor out guestfwd addition checks)
60/65 Checking commit 13d5ea9c3f4f (slirp: add clock_get_ns() callback)
61/65 Checking commit 8a5a5edeb8c0 (build-sys: use a separate slirp-obj-y && slirp.mo)
62/65 Checking commit 01dbc97b8989 (slirp: set G_LOG_DOMAIN)
63/65 Checking commit aa49d8f53dde (slirp: call into g_debug() for DEBUG macros)
ERROR: code indent should never use tabs
#29: FILE: slirp/cksum.c:124:
+^I^IDEBUG_ERROR("cksum: out of data");$

ERROR: code indent should never use tabs
#30: FILE: slirp/cksum.c:125:
+^I^IDEBUG_ERROR(" len = %d", len);$

ERROR: code indent should never use tabs
#127: FILE: slirp/ip_icmp.c:172:
+^IDEBUG_MISC("icmp_input udp_attach errno = %d-%s",$

ERROR: code indent should never use tabs
#136: FILE: slirp/ip_icmp.c:195:
+^IDEBUG_MISC("icmp_input udp sendto tx errno = %d-%s",$

WARNING: line over 80 characters
#204: FILE: slirp/socket.c:211:
+                       DEBUG_MISC(" --- soread() disconnected, nn = %d, errno = %d-%s",

ERROR: code indent should never use tabs
#204: FILE: slirp/socket.c:211:
+^I^I^IDEBUG_MISC(" --- soread() disconnected, nn = %d, errno = %d-%s",$

ERROR: space required after that ',' (ctx:VxV)
#205: FILE: slirp/socket.c:212:
+                       nn, errno,strerror(errno));
                                 ^

ERROR: code indent should never use tabs
#214: FILE: slirp/socket.c:241:
+^IDEBUG_MISC(" ... read nn = %d bytes", nn);$

ERROR: code indent should never use tabs
#223: FILE: slirp/socket.c:374:
+^I^I^IDEBUG_ERROR("Didn't send all data urgently XXXXX");$

ERROR: line over 90 characters
#232: FILE: slirp/socket.c:383:
+       DEBUG_MISC(" ---2 sent %d bytes urgent data, %d urgent bytes left", n, so->so_urgc);

ERROR: code indent should never use tabs
#232: FILE: slirp/socket.c:383:
+^IDEBUG_MISC(" ---2 sent %d bytes urgent data, %d urgent bytes left", n, so->so_urgc);$

ERROR: code indent should never use tabs
#250: FILE: slirp/socket.c:482:
+^IDEBUG_MISC(" --- sowrite disconnected, so->so_state = %x, errno = %d",$

ERROR: code indent should never use tabs
#259: FILE: slirp/socket.c:516:
+^I    DEBUG_MISC(" udp icmp rx errno = %d-%s",$

ERROR: code indent should never use tabs
#268: FILE: slirp/socket.c:568:
+^I  DEBUG_MISC(" did recvfrom %d, errno = %d-%s",$

ERROR: code indent should never use tabs
#277: FILE: slirp/socket.c:583:
+^I      DEBUG_MISC(" rx error, tx icmp ICMP_UNREACH:%i", code);$

ERROR: code indent should never use tabs
#286: FILE: slirp/socket.c:595:
+^I      DEBUG_MISC(" rx error, tx icmp6 ICMP_UNREACH:%i", code);$

ERROR: code indent should never use tabs
#310: FILE: slirp/tcp_input.c:644:
+^I    DEBUG_MISC(" tcp fconnect errno = %d-%s", errno, strerror(errno));$

ERROR: suspect code indent for conditional statements (24, 26)
#317: FILE: slirp/tcp_input.c:1012:
                        if (ti->ti_len == 0 && tiwin == tp->snd_wnd) {
+                         DEBUG_MISC(" dup ack  m = %p  so = %p", m, so);

ERROR: code indent should never use tabs
#319: FILE: slirp/tcp_input.c:1013:
+^I^I^I  DEBUG_MISC(" dup ack  m = %p  so = %p", m, so);$

ERROR: code indent should never use tabs
#328: FILE: slirp/tcp_input.c:1552:
+^IDEBUG_MISC(" returning mss = %d", mss);$

ERROR: code indent should never use tabs
#341: FILE: slirp/tcp_output.c:95:
+^IDEBUG_MISC(" --- tcp_output flags = 0x%x", flags);$

ERROR: code indent should never use tabs
#368: FILE: slirp/udp.c:175:
+^I    DEBUG_MISC(" udp_attach errno = %d-%s", errno, strerror(errno));$

ERROR: code indent should never use tabs
#377: FILE: slirp/udp.c:211:
+^I  DEBUG_MISC("udp tx errno = %d-%s", errno, strerror(errno));$

total: 22 errors, 1 warnings, 310 lines checked

Patch 63/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

64/65 Checking commit e87d727081e2 (slirp: Mark debugging calls as unlikely)
65/65 Checking commit 017fc2ffc1d9 (slirp: check data length while emulating ident function)
ERROR: code indent should never use tabs
#24: FILE: slirp/tcp_subr.c:637:
+^I^I^Iif (m->m_len > so_rcv->sb_datalen$

ERROR: code indent should never use tabs
#25: FILE: slirp/tcp_subr.c:638:
+^I^I^I^I^I- (so_rcv->sb_wptr - so_rcv->sb_data)) {$

ERROR: code indent should never use tabs
#26: FILE: slirp/tcp_subr.c:639:
+^I^I^I    return 1;$

ERROR: code indent should never use tabs
#27: FILE: slirp/tcp_subr.c:640:
+^I^I^I}$

total: 4 errors, 0 warnings, 11 lines checked

Patch 65/65 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

=== OUTPUT END ===

Test command exited with code: 1


The full log is available at
http://patchew.org/logs/20190114225306.21569-1-samuel.thibault@ens-lyon.org/testing.checkpatch/?type=message.
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@redhat.com

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

* Re: [Qemu-devel] [PULLv3 00/65] slirp updates
  2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
                   ` (65 preceding siblings ...)
  2019-01-15  5:28 ` [Qemu-devel] [PULLv3 00/65] slirp updates no-reply
@ 2019-01-17 11:35 ` Peter Maydell
  66 siblings, 0 replies; 69+ messages in thread
From: Peter Maydell @ 2019-01-17 11:35 UTC (permalink / raw)
  To: Samuel Thibault; +Cc: QEMU Developers, Stefan Hajnoczi, Jan Kiszka

On Mon, 14 Jan 2019 at 23:01, Samuel Thibault
<samuel.thibault@ens-lyon.org> wrote:
>
> The following changes since commit 27df21ca3886fff4dd3d70e515517667963a52f1:
>
>   Merge remote-tracking branch 'remotes/kraxel/tags/misc-20190111-pull-request' into staging (2019-01-11 16:45:59 +0000)
>
> are available in the Git repository at:
>
>   https://people.debian.org/~sthibault/qemu.git tags/samuel-thibault
>
> for you to fetch changes up to a7104eda7dab99d0cdbd3595c211864cba415905:
>
>   slirp: check data length while emulating ident function (2019-01-14 23:36:38 +0100)
>
> ----------------------------------------------------------------

Applied, thanks.

Please update the changelog at https://wiki.qemu.org/ChangeLog/4.0
for any user-visible changes.

-- PMM

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

* [Qemu-devel] [PULL 01/65] slirp: associate slirp_output callback with the Slirp context
  2019-01-14  0:02 [Qemu-devel] [PULLv2 " Samuel Thibault
@ 2019-01-14  0:02 ` Samuel Thibault
  0 siblings, 0 replies; 69+ messages in thread
From: Samuel Thibault @ 2019-01-14  0:02 UTC (permalink / raw)
  To: qemu-devel; +Cc: Marc-André Lureau, stefanha, jan.kiszka, Samuel Thibault

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Let's make the slirp interface a bit more library-like.
Associate the slirp_output() with a Slirp context.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
---
 net/slirp.c      |  5 +++--
 slirp/libslirp.h |  9 +++++----
 slirp/ncsi.c     |  2 +-
 slirp/slirp.c    | 11 +++++++----
 slirp/slirp.h    |  1 +
 5 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/net/slirp.c b/net/slirp.c
index 38ae65e4a9..dd06b0189e 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -99,7 +99,7 @@ static void slirp_smb_cleanup(SlirpState *s);
 static inline void slirp_smb_cleanup(SlirpState *s) { }
 #endif
 
-void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len)
+static void net_slirp_output(void *opaque, const uint8_t *pkt, int pkt_len)
 {
     SlirpState *s = opaque;
 
@@ -378,7 +378,8 @@ static int net_slirp_init(NetClientState *peer, const char *model,
                           ipv6, ip6_prefix, vprefix6_len, ip6_host,
                           vhostname, tftp_server_name,
                           tftp_export, bootfile, dhcp,
-                          dns, ip6_dns, dnssearch, vdomainname, s);
+                          dns, ip6_dns, dnssearch, vdomainname,
+                          net_slirp_output, s);
     QTAILQ_INSERT_TAIL(&slirp_stacks, s, entry);
 
     for (config = slirp_configs; config; config = config->next) {
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index 42e42e9a2a..52dbb9feb5 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -5,6 +5,8 @@
 
 typedef struct Slirp Slirp;
 
+typedef void (*slirp_output)(void *opaque, const uint8_t *pkt, int pkt_len);
+
 int get_dns_addr(struct in_addr *pdns_addr);
 int get_dns6_addr(struct in6_addr *pdns6_addr, uint32_t *scope_id);
 
@@ -17,7 +19,9 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork,
                   const char *tftp_path, const char *bootfile,
                   struct in_addr vdhcp_start, struct in_addr vnameserver,
                   struct in6_addr vnameserver6, const char **vdnssearch,
-                  const char *vdomainname, void *opaque);
+                  const char *vdomainname,
+                  slirp_output output,
+                  void *opaque);
 void slirp_cleanup(Slirp *slirp);
 
 void slirp_pollfds_fill(GArray *pollfds, uint32_t *timeout);
@@ -26,9 +30,6 @@ void slirp_pollfds_poll(GArray *pollfds, int select_error);
 
 void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len);
 
-/* you must provide the following functions: */
-void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len);
-
 int slirp_add_hostfwd(Slirp *slirp, int is_udp,
                       struct in_addr host_addr, int host_port,
                       struct in_addr guest_addr, int guest_port);
diff --git a/slirp/ncsi.c b/slirp/ncsi.c
index 7116034afc..d7701f7785 100644
--- a/slirp/ncsi.c
+++ b/slirp/ncsi.c
@@ -163,5 +163,5 @@ void ncsi_input(Slirp *slirp, const uint8_t *pkt, int pkt_len)
     *pchecksum = htonl(checksum);
     ncsi_rsp_len += 4;
 
-    slirp_output(slirp->opaque, ncsi_reply, ETH_HLEN + ncsi_rsp_len);
+    slirp->output(slirp->opaque, ncsi_reply, ETH_HLEN + ncsi_rsp_len);
 }
diff --git a/slirp/slirp.c b/slirp/slirp.c
index ab2fc4eb8b..4d4c2c13b5 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -287,12 +287,15 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork,
                   const char *tftp_path, const char *bootfile,
                   struct in_addr vdhcp_start, struct in_addr vnameserver,
                   struct in6_addr vnameserver6, const char **vdnssearch,
-                  const char *vdomainname, void *opaque)
+                  const char *vdomainname,
+                  slirp_output output,
+                  void *opaque)
 {
     Slirp *slirp = g_malloc0(sizeof(Slirp));
 
     slirp_init_once();
 
+    slirp->output = output;
     slirp->grand = g_rand_new();
     slirp->restricted = restricted;
 
@@ -832,7 +835,7 @@ static void arp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len)
             rah->ar_sip = ah->ar_tip;
             memcpy(rah->ar_tha, ah->ar_sha, ETH_ALEN);
             rah->ar_tip = ah->ar_sip;
-            slirp_output(slirp->opaque, arp_reply, sizeof(arp_reply));
+            slirp->output(slirp->opaque, arp_reply, sizeof(arp_reply));
         }
         break;
     case ARPOP_REPLY:
@@ -932,7 +935,7 @@ static int if_encap4(Slirp *slirp, struct mbuf *ifm, struct ethhdr *eh,
             /* target IP */
             rah->ar_tip = iph->ip_dst.s_addr;
             slirp->client_ipaddr = iph->ip_dst;
-            slirp_output(slirp->opaque, arp_req, sizeof(arp_req));
+            slirp->output(slirp->opaque, arp_req, sizeof(arp_req));
             ifm->resolution_requested = true;
 
             /* Expire request and drop outgoing packet after 1 second */
@@ -1018,7 +1021,7 @@ int if_encap(Slirp *slirp, struct mbuf *ifm)
                 eh->h_dest[0], eh->h_dest[1], eh->h_dest[2],
                 eh->h_dest[3], eh->h_dest[4], eh->h_dest[5]));
     memcpy(buf + sizeof(struct ethhdr), ifm->m_data, ifm->m_len);
-    slirp_output(slirp->opaque, buf, ifm->m_len + ETH_HLEN);
+    slirp->output(slirp->opaque, buf, ifm->m_len + ETH_HLEN);
     return 1;
 }
 
diff --git a/slirp/slirp.h b/slirp/slirp.h
index b80725a0d6..e3d65d68ec 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -220,6 +220,7 @@ struct Slirp {
     GRand *grand;
     QEMUTimer *ra_timer;
 
+    slirp_output output;
     void *opaque;
 };
 
-- 
2.20.1

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

end of thread, other threads:[~2019-01-17 11:35 UTC | newest]

Thread overview: 69+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-14 22:52 [Qemu-devel] [PULLv3 00/65] slirp updates Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 01/65] slirp: associate slirp_output callback with the Slirp context Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 02/65] slirp: remove do_pty from fork_exec() Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 03/65] slirp: replace ex_pty with ex_chardev Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 04/65] slirp: use a dedicated field for chardev pointer Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 05/65] slirp: remove unused EMU_RSH Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 06/65] slirp: rename /extra/chardev Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 07/65] slirp: move internal function declarations Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 08/65] slirp: remove Monitor dependency, return a string for info Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 09/65] slirp: fix slirp_add_exec() leaks Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 10/65] slirp: replace the poor-man string split with g_strsplit() Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 11/65] slirp: remove dead declarations Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 12/65] slirp: add tftp tracing Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 13/65] slirp: move socket pair creation in helper function Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 14/65] slirp: remove unused M_TRAILINGSPACE Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 15/65] slirp: use a callback structure to interface with qemu Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 16/65] slirp: remove PROBE_CONN dead-code Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 17/65] slirp: remove FULL_BOLT Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 18/65] slirp: remove the disabled readv()/writev() code path Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 19/65] slirp: remove HAVE_SYS_SIGNAL_H Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 20/65] slirp: remove unused HAVE_SYS_BITYPES_H Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 21/65] slirp: remove NO_UNIX_SOCKETS Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 22/65] slirp: remove unused HAVE_SYS_STROPTS_H Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 23/65] slirp: remove unused HAVE_ARPA_INET_H Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 24/65] slirp: remove unused HAVE_SYS_WAIT_H Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 25/65] slirp: remove unused HAVE_SYS_SELECT_H Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 26/65] slirp: remove HAVE_SYS_IOCTL_H Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 27/65] slirp: remove HAVE_SYS_FILIO_H Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 28/65] slirp: remove unused DECLARE_IOVEC Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 29/65] slirp: remove unused HAVE_INET_ATON Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 30/65] slirp: replace HOST_WORDS_BIGENDIAN with glib equivalent Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 31/65] slirp: replace SIZEOF_CHAR_P " Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 32/65] slirp: replace compile time DO_KEEPALIVE Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 33/65] slirp: remove unused global slirp_instance Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 34/65] slirp: replace error_report() with g_critical() Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 35/65] slirp: improve a bit the debug macros Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 36/65] slirp: add a callback to log guest errors Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 37/65] slirp: remove #if notdef dead code Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 38/65] slirp: remove unused sbflush() Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 39/65] slirp: NULL is defined by stddef.h Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 40/65] slirp: remove dead TCP_ACK_HACK code Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 41/65] slirp: replace ARRAY_SIZE with G_N_ELEMENTS Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 42/65] net: do not depend on slirp internals Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 43/65] glib-compat: add g_spawn_async_with_fds() fallback Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 44/65] slirp: simplify fork_exec() Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 45/65] slirp: replace error_report() with g_critical() Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 46/65] slirp: Enable fork_exec support on Windows Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 47/65] slirp: drop <Vista compatibility Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 48/65] slirp: rename exec_list Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 49/65] slirp: use virtual time for packet expiration Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 50/65] slirp: replace a fprintf with g_critical() Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 51/65] slirp: replace some fprintf() with DEBUG_MISC Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 52/65] slirp: replace a DEBUG block with WITH_ICMP_ERROR_MSG Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 53/65] slirp: no need to make DPRINTF conditional on DEBUG Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 54/65] slirp: always build with debug statements Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 55/65] slirp: introduce SLIRP_DEBUG environment variable Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 56/65] slirp: use %p for pointers format Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 57/65] slirp: remove remaining DEBUG blocks Samuel Thibault
2019-01-14 22:52 ` [Qemu-devel] [PULL 58/65] slirp: replace DEBUG_ARGS with DEBUG_ARG Samuel Thibault
2019-01-14 22:53 ` [Qemu-devel] [PULL 59/65] slirp: factor out guestfwd addition checks Samuel Thibault
2019-01-14 22:53 ` [Qemu-devel] [PULL 60/65] slirp: add clock_get_ns() callback Samuel Thibault
2019-01-14 22:53 ` [Qemu-devel] [PULL 61/65] build-sys: use a separate slirp-obj-y && slirp.mo Samuel Thibault
2019-01-14 22:53 ` [Qemu-devel] [PULL 62/65] slirp: set G_LOG_DOMAIN Samuel Thibault
2019-01-14 22:53 ` [Qemu-devel] [PULL 63/65] slirp: call into g_debug() for DEBUG macros Samuel Thibault
2019-01-14 22:53 ` [Qemu-devel] [PULL 64/65] slirp: Mark debugging calls as unlikely Samuel Thibault
2019-01-14 22:53 ` [Qemu-devel] [PULL 65/65] slirp: check data length while emulating ident function Samuel Thibault
2019-01-15  5:28 ` [Qemu-devel] [PULLv3 00/65] slirp updates no-reply
2019-01-17 11:35 ` Peter Maydell
  -- strict thread matches above, loose matches on Subject: below --
2019-01-14  0:02 [Qemu-devel] [PULLv2 " Samuel Thibault
2019-01-14  0:02 ` [Qemu-devel] [PULL 01/65] slirp: associate slirp_output callback with the Slirp context Samuel Thibault

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.