qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Samuel Thibault <samuel.thibault@gnu.org>
To: Eric Blake <eblake@redhat.com>
Cc: "kwolf@redhat.com" <kwolf@redhat.com>,
	Yann Bordenave <meow@meowstars.org>,
	qemu-devel@nongnu.org, Guillaume Subiron <maethor@subiron.org>
Subject: Re: [Qemu-devel] [PATCH 16/16] qapi-schema, qemu-options & slirp: Adding Qemu options for IPv6 addresses
Date: Tue, 22 Oct 2013 21:12:58 +0200	[thread overview]
Message-ID: <20131022191258.GH5890@type.youpi.perso.aquilenet.fr> (raw)
In-Reply-To: <5266904F.3090105@redhat.com>

I see.  So it would be something like this?

commit 1807466d691f281f430fbf8c0bbff6bf8073247d
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Tue Oct 22 21:11:46 2013 +0200

    qapi-schema, qemu-options & slirp: Adding Qemu options for IPv6 addresses
    
    This patchs adds parameters to manage some new options in the qemu -net
    command.
    Slirp IPv6 address, network prefix, and DNS IPv6 address can be given in
    argument to the qemu command.
    Defaults parameters are respectively fc00::2, fc00::, /64 and fc00::3.
    
    Signed-off-by: Yann Bordenave <meow@meowstars.org>
    Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>

diff --git a/net/net.c b/net/net.c
index c330c9a..0833aba 100644
--- a/net/net.c
+++ b/net/net.c
@@ -809,6 +809,36 @@ int net_client_init(QemuOpts *opts, int is_netdev, Error **errp)
     int ret = -1;
 
     {
+        /* Parse convenience option format ip6-net=fc00::0[/64] */
+        const char *ip6_net = qemu_opt_get(opts, "ip6-net");
+
+        if (ip6_net) {
+            char buf[strlen(ip6_net)+1];
+
+            if (get_str_sep(buf, sizeof(buf), &ip6_net, '/') < 0) {
+                /* Default 64bit prefix length.  */
+                qemu_opt_set(opts, "ip6-prefix", ip6_net);
+                qemu_opt_set_number(opts, "ip6-prefixlen", 64);
+            } else {
+                /* User-specified prefix length.  */
+                int len;
+                char *end;
+
+                qemu_opt_set(opts, "ip6-prefix", buf);
+                len = strtol(ip6_net, &end, 10);
+
+                if (*end != '\0') {
+                    error_set(errp, QERR_INVALID_PARAMETER_VALUE,
+                              "ip6-prefix", "a number");
+                } else {
+                    qemu_opt_set_number(opts, "ip6-prefixlen", len);
+                }
+            }
+            qemu_opt_unset(opts, "ip6-net");
+        }
+    }
+
+    {
         OptsVisitor *ov = opts_visitor_new(opts);
 
         net_visit(opts_get_visitor(ov), is_netdev, &object, &err);
diff --git a/net/slirp.c b/net/slirp.c
index 124e953..01f81e0 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -134,17 +134,23 @@ static NetClientInfo net_slirp_info = {
 static int net_slirp_init(NetClientState *peer, const char *model,
                           const char *name, int restricted,
                           const char *vnetwork, const char *vhost,
+                          const char *vprefix6, int vprefix6_len,
+                          const char *vhost6,
                           const char *vhostname, const char *tftp_export,
                           const char *bootfile, const char *vdhcp_start,
-                          const char *vnameserver, const char *smb_export,
-                          const char *vsmbserver, const char **dnssearch)
+                          const char *vnameserver, const char *vnameserver6,
+                          const char *smb_export, const char *vsmbserver,
+                          const char **dnssearch)
 {
     /* default settings according to historic slirp */
     struct in_addr net  = { .s_addr = htonl(0x0a000200) }; /* 10.0.2.0 */
     struct in_addr mask = { .s_addr = htonl(0xffffff00) }; /* 255.255.255.0 */
     struct in_addr host = { .s_addr = htonl(0x0a000202) }; /* 10.0.2.2 */
+    struct in6_addr ip6_prefix;
+    struct in6_addr ip6_host;
     struct in_addr dhcp = { .s_addr = htonl(0x0a00020f) }; /* 10.0.2.15 */
     struct in_addr dns  = { .s_addr = htonl(0x0a000203) }; /* 10.0.2.3 */
+    struct in6_addr ip6_dns;
 #ifndef _WIN32
     struct in_addr smbsrv = { .s_addr = 0 };
 #endif
@@ -212,6 +218,24 @@ static int net_slirp_init(NetClientState *peer, const char *model,
         return -1;
     }
 
+    if (!vprefix6)
+        vprefix6 = "fc00::";
+    if (!inet_pton(AF_INET6, vprefix6, &ip6_prefix)) {
+        return -1;
+    }
+
+    if (!vprefix6_len)
+        vprefix6_len = 64;
+    if (vprefix6_len < 0 || vprefix6_len > 128) {
+        return -1;
+    }
+
+    if (!vhost6)
+        vhost6 = "fc00::2";
+    if (!inet_pton(AF_INET6, vhost6, &ip6_host)) {
+        return -1;
+    }
+
     if (vnameserver && !inet_aton(vnameserver, &dns)) {
         return -1;
     }
@@ -220,6 +244,12 @@ static int net_slirp_init(NetClientState *peer, const char *model,
         return -1;
     }
 
+    if (!vnameserver6)
+        vnameserver6 = "fc00::3";
+    if (!inet_pton(AF_INET6, vnameserver6, &ip6_dns)) {
+        return -1;
+    }
+
     if (vdhcp_start && !inet_aton(vdhcp_start, &dhcp)) {
         return -1;
     }
@@ -242,8 +272,10 @@ static int net_slirp_init(NetClientState *peer, const char *model,
 
     s = DO_UPCAST(SlirpState, nc, nc);
 
-    s->slirp = slirp_init(restricted, net, mask, host, vhostname,
-                          tftp_export, bootfile, dhcp, dns, dnssearch, s);
+    s->slirp = slirp_init(restricted, net, mask, host,
+                          ip6_prefix, vprefix6_len, ip6_host,
+                          vhostname, tftp_export, bootfile, dhcp,
+                          dns, ip6_dns, dnssearch, s);
     QTAILQ_INSERT_TAIL(&slirp_stacks, s, entry);
 
     for (config = slirp_configs; config; config = config->next) {
@@ -750,8 +782,10 @@ int net_init_slirp(const NetClientOptions *opts, const char *name,
     net_init_slirp_configs(user->guestfwd, 0);
 
     ret = net_slirp_init(peer, "user", name, user->q_restrict, vnet,
-                         user->host, user->hostname, user->tftp,
-                         user->bootfile, user->dhcpstart, user->dns, user->smb,
+                         user->host, user->ip6_prefix, user->ip6_prefixlen,
+                         user->ip6_host, user->hostname, user->tftp,
+                         user->bootfile, user->dhcpstart,
+                         user->dns, user->ip6_dns, user->smb,
                          user->smbserver, dnssearch);
 
     while (slirp_configs) {
diff --git a/qapi-schema.json b/qapi-schema.json
index 60f3fd1..fa1b793 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -2807,6 +2807,14 @@
 # @dnssearch: #optional list of DNS suffixes to search, passed as DHCP option
 #             to the guest
 #
+# @ip6-prefix: #optional IPv6 network prefix (since 1.8)
+#
+# @ip6-prefixlen: #optional IPv6 network prefix length (since 1.8)
+#
+# @ip6-host: #optional guest-visible IPv6 address of the host (since 1.8)
+#
+# @ip6-dns: #optional guest-visible IPv6 address of the virtual nameserver (since 1.8)
+#
 # @smb: #optional root directory of the built-in SMB server
 #
 # @smbserver: #optional IP address of the built-in SMB server
@@ -2820,20 +2828,24 @@
 ##
 { 'type': 'NetdevUserOptions',
   'data': {
-    '*hostname':  'str',
-    '*restrict':  'bool',
-    '*ip':        'str',
-    '*net':       'str',
-    '*host':      'str',
-    '*tftp':      'str',
-    '*bootfile':  'str',
-    '*dhcpstart': 'str',
-    '*dns':       'str',
-    '*dnssearch': ['String'],
-    '*smb':       'str',
-    '*smbserver': 'str',
-    '*hostfwd':   ['String'],
-    '*guestfwd':  ['String'] } }
+    '*hostname':        'str',
+    '*restrict':        'bool',
+    '*ip':              'str',
+    '*net':             'str',
+    '*host':            'str',
+    '*tftp':            'str',
+    '*bootfile':        'str',
+    '*dhcpstart':       'str',
+    '*dns':             'str',
+    '*dnssearch':       ['String'],
+    '*ip6-prefix':      'str',
+    '*ip6-prefixlen':   'int',
+    '*ip6-host':        'str',
+    '*ip6-dns':         'str',
+    '*smb':             'str',
+    '*smbserver':       'str',
+    '*hostfwd':         ['String'],
+    '*guestfwd':        ['String'] } }
 
 ##
 # @NetdevTapOptions
diff --git a/qemu-options.hx b/qemu-options.hx
index 5dc8b75..00161e0 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1357,8 +1357,9 @@ DEF("net", HAS_ARG, QEMU_OPTION_net,
     "-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]\n"
     "                create a new Network Interface Card and connect it to VLAN 'n'\n"
 #ifdef CONFIG_SLIRP
-    "-net user[,vlan=n][,name=str][,net=addr[/mask]][,host=addr][,restrict=on|off]\n"
-    "         [,hostname=host][,dhcpstart=addr][,dns=addr][,dnssearch=domain][,tftp=dir]\n"
+    "-net user[,vlan=n][,name=str][,net=addr[/mask]][,host=addr][,ip6-net=addr[/int]]\n"
+    "         [,ip6-host=addr][,restrict=on|off][,hostname=host][,dhcpstart=addr]\n"
+    "         [,dns=addr][,ip6-dns=addr][,dnssearch=domain][,tftp=dir]\n"
     "         [,bootfile=f][,hostfwd=rule][,guestfwd=rule]"
 #ifndef _WIN32
                                              "[,smb=dir[,smbserver=addr]]\n"
@@ -1467,6 +1468,14 @@ either in the form a.b.c.d or as number of valid top-most bits. Default is
 Specify the guest-visible address of the host. Default is the 2nd IP in the
 guest network, i.e. x.x.x.2.
 
+@item ip6-net=@var{addr}[/@var{int}]
+Set IPv6 network address the guest will see. Optionally specify the prefix
+size, as number of valid top-most bits. Default is fc00::/64.
+
+@item ip6-host=@var{addr}
+Specify the guest-visible IPv6 address of the host. Default is the 2nd IPv6 in
+the guest network, i.e. xxxx::2.
+
 @item restrict=on|off
 If this option is enabled, the guest will be isolated, i.e. it will not be
 able to contact the host and no guest IP packets will be routed over the host
@@ -1484,6 +1493,11 @@ Specify the guest-visible address of the virtual nameserver. The address must
 be different from the host address. Default is the 3rd IP in the guest network,
 i.e. x.x.x.3.
 
+@item ip6-dns=@var{addr}
+Specify the guest-visible address of the IPv6 virtual nameserver. The address
+must be different from the host address. Default is the 3rd IP in the guest
+network, i.e. xxxx::3.
+
 @item dnssearch=@var{domain}
 Provides an entry for the domain-search list sent by the built-in
 DHCP server. More than one domain suffix can be transmitted by specifying
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index 5bdcbd5..c4b25c9 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -10,9 +10,11 @@ int get_dns_addr(struct in_addr *pdns_addr);
 
 Slirp *slirp_init(int restricted, struct in_addr vnetwork,
                   struct in_addr vnetmask, struct in_addr vhost,
-                  const char *vhostname, const char *tftp_path,
-                  const char *bootfile, struct in_addr vdhcp_start,
-                  struct in_addr vnameserver, const char **vdnssearch,
+                  struct in6_addr vprefix_addr6, uint8_t vprefix_len,
+                  struct in6_addr vhost6, const char *vhostname,
+                  const char *tftp_path, const char *bootfile,
+                  struct in_addr vdhcp_start, struct in_addr vnameserver,
+                  struct in6_addr vnameserver6, const char **vdnssearch,
                   void *opaque);
 void slirp_cleanup(Slirp *slirp);
 
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 35c2665..48e39f2 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -201,9 +201,11 @@ static int slirp_state_load(QEMUFile *f, void *opaque, int version_id);
 
 Slirp *slirp_init(int restricted, struct in_addr vnetwork,
                   struct in_addr vnetmask, struct in_addr vhost,
-                  const char *vhostname, const char *tftp_path,
-                  const char *bootfile, struct in_addr vdhcp_start,
-                  struct in_addr vnameserver, const char **vdnssearch,
+                  struct in6_addr vprefix_addr6, uint8_t vprefix_len,
+                  struct in6_addr vhost6, const char *vhostname,
+                  const char *tftp_path, const char *bootfile,
+                  struct in_addr vdhcp_start, struct in_addr vnameserver,
+                  struct in6_addr vnameserver6, const char **vdnssearch,
                   void *opaque)
 {
     Slirp *slirp = g_malloc0(sizeof(Slirp));
@@ -222,12 +224,9 @@ Slirp *slirp_init(int restricted, struct in_addr vnetwork,
     slirp->vnetwork_addr = vnetwork;
     slirp->vnetwork_mask = vnetmask;
     slirp->vhost_addr = vhost;
-    /* :TODO:maethor:130311: Use a parameter passed to the function */
-    inet_pton(AF_INET6, "fc00::0", &slirp->vprefix_addr6);
-    /* :TODO:maethor:130311: Use a parameter passed to the function */
-    slirp->vprefix_len = 64;
-    /* :TODO:maethor:130311: Use a parameter passed to the function */
-    inet_pton(AF_INET6, "fc00::2", &slirp->vhost_addr6);
+    slirp->vprefix_addr6 = vprefix_addr6;
+    slirp->vprefix_len = vprefix_len;
+    slirp->vhost_addr6 = vhost6;
     if (vhostname) {
         pstrcpy(slirp->client_hostname, sizeof(slirp->client_hostname),
                 vhostname);
@@ -236,8 +235,7 @@ Slirp *slirp_init(int restricted, struct in_addr vnetwork,
     slirp->bootp_filename = g_strdup(bootfile);
     slirp->vdhcp_startaddr = vdhcp_start;
     slirp->vnameserver_addr = vnameserver;
-    /* :TODO:maethor:130311: Use a parameter passed to the function */
-    inet_pton(AF_INET6, "fc00::3", &slirp->vnameserver_addr6);
+    slirp->vnameserver_addr6 = vnameserver6;
 
     if (vdnssearch) {
         translate_dnssearch(slirp, vdnssearch);

  reply	other threads:[~2013-10-22 19:13 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1374334058-27898-1-git-send-email-maethor@subiron.org>
2013-10-20 14:54 ` [Qemu-devel] [PATCH 00/16] slirp: Adding IPv6 support to Qemu -net user mode Samuel Thibault
2013-10-20 14:56   ` [Qemu-devel] [PATCH 01/16] slirp: goto bad in udp_input if sosendto fails Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 02/16] slirp: Generalizing and neutralizing code before adding IPv6 stuff Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 03/16] qemu/timer.h : Adding function to second scale Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 04/16] slirp: Adding IPv6, ICMPv6 Echo and NDP autoconfiguration Samuel Thibault
2013-10-23  7:51       ` Paolo Bonzini
2013-10-23 22:49         ` Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 05/16] slirp: Adding ICMPv6 error sending Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 06/16] slirp: Make Socket structure IPv6 compatible Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 07/16] slirp: Factorizing address translation Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 08/16] slirp: Factorizing and cleaning solookup() Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 09/16] slirp: Make udp_attach IPv6 compatible Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 10/16] slirp: Adding IPv6 UDP support Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 11/16] slirp: Adding family argument to tcp_fconnect() Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 12/16] slirp: Factorizing tcpiphdr structure with an union Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 13/16] slirp: Generalizing and neutralizing various TCP functions before adding IPv6 stuff Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 14/16] slirp: Handle IPv6 in TCP functions Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 15/16] slirp: Adding IPv6 address for DNS relay Samuel Thibault
2013-10-20 14:56     ` [Qemu-devel] [PATCH 16/16] qapi-schema, qemu-options & slirp: Adding Qemu options for IPv6 addresses Samuel Thibault
2013-10-21 21:04       ` Eric Blake
2013-10-22 10:22         ` Samuel Thibault
2013-10-22 10:27           ` Eric Blake
2013-10-22 10:31             ` Samuel Thibault
2013-10-22 10:33               ` Eric Blake
2013-10-22 10:45                 ` Samuel Thibault
2013-10-22 10:48                   ` Eric Blake
2013-10-22 10:52                     ` Eric Blake
2013-10-22 14:11                       ` Samuel Thibault
2013-10-22 14:48                         ` Eric Blake
2013-10-22 19:12                           ` Samuel Thibault [this message]
2013-10-22 20:25                             ` Eric Blake
2013-11-17 15:04   ` [Qemu-devel] [PATCHv2 00/16] slirp: Adding IPv6 support to Qemu -net user mode Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 01/16] slirp: goto bad in udp_input if sosendto fails Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 02/16] slirp: Generalizing and neutralizing code before adding IPv6 stuff Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 03/16] qemu/timer.h : Adding function to second scale Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 04/16] slirp: Adding IPv6, ICMPv6 Echo and NDP autoconfiguration Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 05/16] slirp: Adding ICMPv6 error sending Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 06/16] slirp: Make Socket structure IPv6 compatible Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 07/16] slirp: Factorizing address translation Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 08/16] slirp: Factorizing and cleaning solookup() Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 09/16] slirp: Make udp_attach IPv6 compatible Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 10/16] slirp: Adding IPv6 UDP support Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 11/16] slirp: Adding family argument to tcp_fconnect() Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 12/16] slirp: Factorizing tcpiphdr structure with an union Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 13/16] slirp: Generalizing and neutralizing various TCP functions before adding IPv6 stuff Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 14/16] slirp: Handle IPv6 in TCP functions Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 15/16] slirp: Adding IPv6 address for DNS relay Samuel Thibault
2013-11-17 15:04     ` [Qemu-devel] [PATCH 16/16] qapi-schema, qemu-options & slirp: Adding Qemu options for IPv6 addresses Samuel Thibault
2014-02-11 13:08     ` [Qemu-devel] [PATCHv3 00/16] slirp: Adding IPv6 support to Qemu -net user mode Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 01/16] slirp: goto bad in udp_input if sosendto fails Samuel Thibault
2014-06-11  8:55         ` [Qemu-devel] [PATCH] " Samuel Thibault
2014-06-12  5:47           ` Jan Kiszka
2014-06-14 19:45             ` Samuel Thibault
2014-07-11 10:18         ` Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 02/16] slirp: Generalizing and neutralizing code before adding IPv6 stuff Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 03/16] qemu/timer.h : Adding function to second scale Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 04/16] slirp: Adding IPv6, ICMPv6 Echo and NDP autoconfiguration Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 05/16] slirp: Adding ICMPv6 error sending Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 06/16] slirp: Make Socket structure IPv6 compatible Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 07/16] slirp: Factorizing address translation Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 08/16] slirp: Factorizing and cleaning solookup() Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 09/16] slirp: Make udp_attach IPv6 compatible Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 10/16] slirp: Adding IPv6 UDP support Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 11/16] slirp: Adding family argument to tcp_fconnect() Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 12/16] slirp: Factorizing tcpiphdr structure with an union Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 13/16] slirp: Generalizing and neutralizing various TCP functions before adding IPv6 stuff Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 14/16] slirp: Handle IPv6 in TCP functions Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 15/16] slirp: Adding IPv6 address for DNS relay Samuel Thibault
2014-02-11 13:08       ` [Qemu-devel] [PATCH 16/16] qapi-schema, qemu-options & slirp: Adding Qemu options for IPv6 addresses Samuel Thibault
2014-03-27 21:42         ` Eric Blake
2014-02-11 13:50       ` [Qemu-devel] [PATCHv3 00/16] slirp: Adding IPv6 support to Qemu -net user mode Eric Blake
2014-02-11 14:35         ` Samuel Thibault
2014-02-11 14:42           ` Max Filippov
2014-02-11 14:48             ` Max Filippov
2014-03-12  7:27       ` Jan Kiszka
2014-03-20  7:58         ` Stefan Hajnoczi
2014-03-20  9:03           ` Samuel Thibault
2014-04-04 18:20             ` Samuel Thibault

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=20131022191258.GH5890@type.youpi.perso.aquilenet.fr \
    --to=samuel.thibault@gnu.org \
    --cc=eblake@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=maethor@subiron.org \
    --cc=meow@meowstars.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

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

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