[libvirt] [PATCH 2/2] util: introduce virSocketAddrParseAny

Jim Fehlig jfehlig at suse.com
Thu Apr 5 20:55:21 UTC 2018


On 03/29/2018 11:27 AM, John Ferlan wrote:
> 
> 
> On 03/26/2018 04:29 PM, Jim Fehlig wrote:
>> When preparing for migration, the libxl driver creates a new TCP listen
>> socket for the incoming migration by calling virNetSocketNewListenTCP,
>> passing the destination host name. virNetSocketNewListenTCP calls
>> virSocketAddrParse to check if the host name is a wildcard address, in
>> which case it avoids adding the AI_ADDRCONFIG flag to the hints passed to
>> getaddrinfo. If the host name is not an IP address, virSocketAddrParse
>> reports an error
>>
>> error : virSocketAddrParseInternal:121 : Cannot parse socket address
>> 'myhost.example.com': Name or service not known
>>
>> But virNetSocketNewListenTCP succeeds regardless and the overall migration
>> operation succeeds.
>>
>> Introduce virSocketAddrParseAny and use it when simply testing if a host
>> name/addr is parsable.
>>
>> Signed-off-by: Jim Fehlig <jfehlig at suse.com>
>> ---
>>
>> Essentially a V2 of
>>
>> https://www.redhat.com/archives/libvir-list/2018-March/msg01120.html
>>
>> It takes a slightly different approach by creating a function that can
>> parse host names or IP addresses.
>>
>>   src/libvirt_private.syms |  1 +
>>   src/rpc/virnetsocket.c   |  2 +-
>>   src/util/virsocketaddr.c | 50 +++++++++++++++++++++++++++++++++++++++++++++---
>>   src/util/virsocketaddr.h |  5 +++++
>>   4 files changed, 54 insertions(+), 4 deletions(-)
>>
> 
> Reviewed-by: John Ferlan <jferlan at redhat.com>
> 
> Wait for 4.2.0 for this one...
> 
> John
> 
> BTW: Your call on whether to add to the new API comments something about
> the API could be susceptible to a delay due to network name resolution
> lookup pause.  That is, from the getaddrinfo man page:
> 
> "The AI_NUMERICHOST flag suppresses any potentially lengthy network host
> address lookups."

Good point. I squashed in the below comment to this patch before pushing both.

Regards,
Jim

diff --git a/src/util/virsocketaddr.c b/src/util/virsocketaddr.c
index 84610560f..99dc54830 100644
--- a/src/util/virsocketaddr.c
+++ b/src/util/virsocketaddr.c
@@ -173,7 +173,10 @@ int virSocketAddrParse(virSocketAddrPtr addr, const char 
*val, int family)
   *
   * Mostly a wrapper for getaddrinfo() extracting the address storage
   * from a host name like acme.example.com or a numeric string like 1.2.3.4
- * or 2001:db8:85a3:0:0:8a2e:370:7334
+ * or 2001:db8:85a3:0:0:8a2e:370:7334.
+ *
+ * When @val is a network host name, this function may be susceptible to a
+ * delay due to potentially lengthy netork host address lookups.
   *
   * Returns the length of the network address or -1 in case of error.
   */




More information about the libvir-list mailing list