qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 1/8] sockets: add ability to disable DNS resolut


From: Eric Blake
Subject: Re: [Qemu-devel] [PATCH 1/8] sockets: add ability to disable DNS resolution for InetSocketAddress
Date: Thu, 5 Jan 2017 10:22:43 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1

On 01/05/2017 10:03 AM, Daniel P. Berrange wrote:
> Add a 'numeric' flag to the InetSocketAddress struct to allow the
> caller to indicate that DNS should be skipped for the host/port
> fields. This is useful if the caller knows the address is already
> numeric and wants to guarantee no (potentially blocking) DNS
> lookups are attempted.
> 
> Signed-off-by: Daniel P. Berrange <address@hidden>
> ---
>  qapi-schema.json    | 5 +++++
>  util/qemu-sockets.c | 3 +++
>  2 files changed, 8 insertions(+)
> 
> diff --git a/qapi-schema.json b/qapi-schema.json
> index a0d3b5d..d605c1e 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -3070,6 +3070,10 @@
>  #
>  # @port: port part of the address, or lowest port if @to is present
>  #
> +# @numeric: #optional true if the host/port are guaranteed to be numeric,
> +#           false if name resolution should be attempted. Defaults to false.
> +#           Since 2.8

2.9, actually.  I'm also not sure if Marc-Andre's work requires ()
brackets around the since designation on a per-member listing.

> @@ -3084,6 +3088,7 @@
>    'data': {
>      'host': 'str',
>      'port': 'str',
> +    'numeric':  'bool',

In order to be optional, it must be spelled '*numeric'.

>      '*to': 'uint16',
>      '*ipv4': 'bool',
>      '*ipv6': 'bool' } }

Thinking out loud: Do we even need a 'numeric' field?  If we could
create an alternate type that distinguishes between a 'str' (name, DNS
resolution required) and an 'int' (numeric, skip DNS), then we don't
need a field.  Except that an 'int' for IPv4 addresses is awkward, and
an 'int' for IPv6 addresses in insufficient - so even when the address
is numeric, you STILL have to pass it in as 'str'.  Okay, experiment
failed, your interface seems like the correct thing to do.

> diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
> index fe1d07a..6f1c10a 100644
> --- a/util/qemu-sockets.c
> +++ b/util/qemu-sockets.c
> @@ -141,6 +141,9 @@ static int inet_listen_saddr(InetSocketAddress *saddr,
>  
>      memset(&ai,0, sizeof(ai));
>      ai.ai_flags = AI_PASSIVE;
> +    if (saddr->numeric) {

if (saddr->has_numeric && saddr->numeric)

> +        ai.ai_flags |= AI_NUMERICHOST | AI_NUMERICSERV;
> +    }
>      ai.ai_family = inet_ai_family_from_address(saddr, &err);
>      ai.ai_socktype = SOCK_STREAM;
>  
> 

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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