qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 1/2 v4] slirp: Add domainname option to slirp's


From: Samuel Thibault
Subject: Re: [Qemu-devel] [PATCH 1/2 v4] slirp: Add domainname option to slirp's DHCP server
Date: Sun, 4 Mar 2018 21:43:41 +0100
User-agent: NeoMutt/20170113 (1.7.2)

Benjamin Drung, on mar. 27 févr. 2018 17:06:01 +0100, wrote:
> This patch will allow the user to include the domainname option in
> replies from the built-in DHCP server.
> 
> Signed-off-by: Benjamin Drung <address@hidden>

Reviewed-by: Samuel Thibault <address@hidden>

and applied to my tree.

Samuel

> ---
>  net/slirp.c      | 12 +++++++++---
>  qapi/net.json    |  4 ++++
>  qemu-options.hx  |  7 +++++--
>  slirp/bootp.c    |  8 ++++++++
>  slirp/libslirp.h |  2 +-
>  slirp/slirp.c    |  4 +++-
>  slirp/slirp.h    |  1 +
>  7 files changed, 31 insertions(+), 7 deletions(-)
> 
> diff --git a/net/slirp.c b/net/slirp.c
> index 8991816bbf..8c08e5644f 100644
> --- a/net/slirp.c
> +++ b/net/slirp.c
> @@ -157,7 +157,8 @@ static int net_slirp_init(NetClientState *peer, const 
> char *model,
>                            const char *bootfile, const char *vdhcp_start,
>                            const char *vnameserver, const char *vnameserver6,
>                            const char *smb_export, const char *vsmbserver,
> -                          const char **dnssearch, Error **errp)
> +                          const char **dnssearch, const char *vdomainname,
> +                          Error **errp)
>  {
>      /* default settings according to historic slirp */
>      struct in_addr net  = { .s_addr = htonl(0x0a000200) }; /* 10.0.2.0 */
> @@ -359,6 +360,11 @@ static int net_slirp_init(NetClientState *peer, const 
> char *model,
>          ip6_dns.s6_addr[15] |= 3;
>      }
>  
> +    if (vdomainname && !*vdomainname) {
> +        error_setg(errp, "'domainname' parameter cannot be empty");
> +        return -1;
> +    }
> +
>  
>      nc = qemu_new_net_client(&net_slirp_info, peer, model, name);
>  
> @@ -371,7 +377,7 @@ static int net_slirp_init(NetClientState *peer, const 
> char *model,
>      s->slirp = slirp_init(restricted, ipv4, net, mask, host,
>                            ipv6, ip6_prefix, vprefix6_len, ip6_host,
>                            vhostname, tftp_export, bootfile, dhcp,
> -                          dns, ip6_dns, dnssearch, s);
> +                          dns, ip6_dns, dnssearch, vdomainname, s);
>      QTAILQ_INSERT_TAIL(&slirp_stacks, s, entry);
>  
>      for (config = slirp_configs; config; config = config->next) {
> @@ -958,7 +964,7 @@ int net_init_slirp(const Netdev *netdev, const char *name,
>                           user->ipv6_host, user->hostname, user->tftp,
>                           user->bootfile, user->dhcpstart,
>                           user->dns, user->ipv6_dns, user->smb,
> -                         user->smbserver, dnssearch, errp);
> +                         user->smbserver, dnssearch, user->domainname, errp);
>  
>      while (slirp_configs) {
>          config = slirp_configs;
> diff --git a/qapi/net.json b/qapi/net.json
> index 1238ba5de1..9dfd34cafa 100644
> --- a/qapi/net.json
> +++ b/qapi/net.json
> @@ -160,6 +160,9 @@
>  # @dnssearch: list of DNS suffixes to search, passed as DHCP option
>  #             to the guest
>  #
> +# @domainname: guest-visible domain name of the virtual nameserver
> +#              (since 2.12)
> +#
>  # @ipv6-prefix: IPv6 network prefix (default is fec0::) (since
>  #               2.6). The network prefix is given in the usual
>  #               hexadecimal IPv6 address notation.
> @@ -197,6 +200,7 @@
>      '*dhcpstart': 'str',
>      '*dns':       'str',
>      '*dnssearch': ['String'],
> +    '*domainname': 'str',
>      '*ipv6-prefix':      'str',
>      '*ipv6-prefixlen':   'int',
>      '*ipv6-host':        'str',
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 8ccd5dcaa6..c000ef454e 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -1906,8 +1906,8 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev,
>      "-netdev user,id=str[,ipv4[=on|off]][,net=addr[/mask]][,host=addr]\n"
>      "         [,ipv6[=on|off]][,ipv6-net=addr[/int]][,ipv6-host=addr]\n"
>      "         [,restrict=on|off][,hostname=host][,dhcpstart=addr]\n"
> -    "         [,dns=addr][,ipv6-dns=addr][,dnssearch=domain][,tftp=dir]\n"
> -    "         [,bootfile=f][,hostfwd=rule][,guestfwd=rule]"
> +    "         
> [,dns=addr][,ipv6-dns=addr][,dnssearch=domain][,domainname=domain]\n"
> +    "         [,tftp=dir][,bootfile=f][,hostfwd=rule][,guestfwd=rule]"
>  #ifndef _WIN32
>                                               "[,smb=dir[,smbserver=addr]]\n"
>  #endif
> @@ -2116,6 +2116,9 @@ Example:
>  qemu -net user,dnssearch=mgmt.example.org,dnssearch=example.org [...]
>  @end example
>  
> address@hidden address@hidden
> +Specifies the client domain name reported by the built-in DHCP server.
> +
>  @item address@hidden
>  When using the user mode network stack, activate a built-in TFTP
>  server. The files in @var{dir} will be exposed as the root of a TFTP server.
> diff --git a/slirp/bootp.c b/slirp/bootp.c
> index 5dd1a415b5..9e7b53ba94 100644
> --- a/slirp/bootp.c
> +++ b/slirp/bootp.c
> @@ -298,6 +298,14 @@ static void bootp_reply(Slirp *slirp, const struct 
> bootp_t *bp)
>              q += val;
>          }
>  
> +        if (slirp->vdomainname) {
> +            val = strlen(slirp->vdomainname);
> +            *q++ = RFC1533_DOMAINNAME;
> +            *q++ = val;
> +            memcpy(q, slirp->vdomainname, val);
> +            q += val;
> +        }
> +
>          if (slirp->vdnssearch) {
>              size_t spaceleft = sizeof(rbp->bp_vend) - (q - rbp->bp_vend);
>              val = slirp->vdnssearch_len;
> diff --git a/slirp/libslirp.h b/slirp/libslirp.h
> index 540b3e5903..740408a96e 100644
> --- a/slirp/libslirp.h
> +++ b/slirp/libslirp.h
> @@ -16,7 +16,7 @@ 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,
> -                  void *opaque);
> +                  const char *vdomainname, void *opaque);
>  void slirp_cleanup(Slirp *slirp);
>  
>  void slirp_pollfds_fill(GArray *pollfds, uint32_t *timeout);
> diff --git a/slirp/slirp.c b/slirp/slirp.c
> index 1cb6b07004..4f29753444 100644
> --- a/slirp/slirp.c
> +++ b/slirp/slirp.c
> @@ -286,7 +286,7 @@ 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,
> -                  void *opaque)
> +                  const char *vdomainname, void *opaque)
>  {
>      Slirp *slirp = g_malloc0(sizeof(Slirp));
>  
> @@ -317,6 +317,7 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct 
> in_addr vnetwork,
>      }
>      slirp->tftp_prefix = g_strdup(tftp_path);
>      slirp->bootp_filename = g_strdup(bootfile);
> +    slirp->vdomainname = g_strdup(vdomainname);
>      slirp->vdhcp_startaddr = vdhcp_start;
>      slirp->vnameserver_addr = vnameserver;
>      slirp->vnameserver_addr6 = vnameserver6;
> @@ -349,6 +350,7 @@ void slirp_cleanup(Slirp *slirp)
>      g_free(slirp->vdnssearch);
>      g_free(slirp->tftp_prefix);
>      g_free(slirp->bootp_filename);
> +    g_free(slirp->vdomainname);
>      g_free(slirp);
>  }
>  
> diff --git a/slirp/slirp.h b/slirp/slirp.h
> index 06febfc78b..10b410898a 100644
> --- a/slirp/slirp.h
> +++ b/slirp/slirp.h
> @@ -193,6 +193,7 @@ struct Slirp {
>      char *bootp_filename;
>      size_t vdnssearch_len;
>      uint8_t *vdnssearch;
> +    char *vdomainname;
>  
>      /* tcp states */
>      struct socket tcb;
> -- 
> 2.14.1
> 

-- 
Samuel
<b> il faut combien de chevaux pour tirer une doloréan à 88 morph ?
***b vient de remarque que 88 mph c'est 142 km/h
<y> aaaaah
<y> c'est pour ça qu'ils limitent à 130 km/h sur les autoroutes
<y> c'est pour éviter que les gens voyagent dans le temps
<b> probablement



reply via email to

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