From nobody Mon Feb 9 19:30:39 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1619076757; cv=none; d=zohomail.com; s=zohoarc; b=aBU9ApHUG8e2gOEp3KE2JJsKnDdcjaiOP3T8z7XcK1/9scGxX2RShGQn6eyWc8moIy40ow7XsOkeHnPmHdBGfkCvPXU1kmfrGq9tLLYl2NCXyOe8ek/PzMTX/76LZIKGZkjFkXx78I4ngRDr8CF1IvrV96qe3CrCHIbJ15JHhkY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1619076757; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=E66ICDOVNikWB/1DL4Xe6lcSJmL4YQzvhS2xqnfRAyE=; b=PdWhZXn3kWivaimrOXtFX+o9q30iQNUctCxOfvAUqONvGRgxXLrj/qtZnhDE0ur1BZBX3EhXgb8Oy8S/K0lagCRNt7AkQwxrSrOygmtntx1ZHCHDxqbF7uhqO5/9QgqSAGZ7e54izmoo7d3MN6v1NUtRRghccGx7uyBZFigwQ2Q= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1619076757839815.1685040980145; Thu, 22 Apr 2021 00:32:37 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-325-WYwOjd7ZPmyRF-pl6XX6bA-1; Thu, 22 Apr 2021 03:32:33 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 43BEE343BD; Thu, 22 Apr 2021 07:32:27 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1335210016FD; Thu, 22 Apr 2021 07:32:27 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id D03011806D25; Thu, 22 Apr 2021 07:32:26 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 13M7VVms023800 for ; Thu, 22 Apr 2021 03:31:31 -0400 Received: by smtp.corp.redhat.com (Postfix) id 3A4D720FE6D1; Thu, 22 Apr 2021 07:31:31 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast05.extmail.prod.ext.rdu2.redhat.com [10.11.55.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 348C420FE6D0 for ; Thu, 22 Apr 2021 07:31:31 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1D11185338A for ; Thu, 22 Apr 2021 07:31:31 +0000 (UTC) Received: from m97136.mail.qiye.163.com (m97136.mail.qiye.163.com [220.181.97.136]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-185-7amtf4PGOD6_3Jve6H-V6Q-1; Thu, 22 Apr 2021 03:31:26 -0400 Received: from localhost.localdomain (unknown [58.56.27.130]) by smtp2 (Coremail) with SMTP id iOCowAA3HLYJJYFgMwTJAQ--.5876S11; Thu, 22 Apr 2021 15:26:06 +0800 (CST) X-MC-Unique: WYwOjd7ZPmyRF-pl6XX6bA-1 X-MC-Unique: 7amtf4PGOD6_3Jve6H-V6Q-1 From: Shi Lei To: libvir-list@redhat.com Subject: [RFCv3 09/25] util: Add parsexml/formatbuf helper functions for virSocketAddr Date: Thu, 22 Apr 2021 15:25:17 +0800 Message-Id: <20210422072533.312211-10-shi_lei@massclouds.com> In-Reply-To: <20210422072533.312211-1-shi_lei@massclouds.com> References: <20210422072533.312211-1-shi_lei@massclouds.com> MIME-Version: 1.0 X-CM-TRANSID: iOCowAA3HLYJJYFgMwTJAQ--.5876S11 X-Coremail-Antispam: 1Uf129KBjvJXoWxAw43Jw4xKF1kZw45uF13XFb_yoWrArWkpF 15twn8XFW8tws3Zw4Iqr4Y9r1ftF18XayUXa47uw10krs8J3W3t3ZFqFy3Gr1rJFWjyF48 XFn8GrWkCF4UJF7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0JbMD7hUUUUU= X-Originating-IP: [58.56.27.130] X-CM-SenderInfo: pvklsz1hl6ztxvvfz0xxgvhudrp/1tbiXA58T1i2lRiHegAAs- X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Cc: Shi Lei X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Implement the parsexml/formatbuf functions for virSocketAddr. Signed-off-by: Shi Lei --- src/libvirt_private.syms | 2 ++ src/util/virsocketaddr.c | 42 ++++++++++++++++++++++++++++++++++++++++ src/util/virsocketaddr.h | 23 ++++++++++++++++++++-- 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index e78491dc..055396d0 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -3213,6 +3213,7 @@ virSocketAddrBroadcastByPrefix; virSocketAddrCheckNetmask; virSocketAddrEqual; virSocketAddrFormat; +virSocketAddrFormatBuf; virSocketAddrFormatFull; virSocketAddrGetIPPrefix; virSocketAddrGetNumNetmaskBits; @@ -3230,6 +3231,7 @@ virSocketAddrParse; virSocketAddrParseAny; virSocketAddrParseIPv4; virSocketAddrParseIPv6; +virSocketAddrParseXML; virSocketAddrPrefixToNetmask; virSocketAddrPTRDomain; virSocketAddrResolveService; diff --git a/src/util/virsocketaddr.c b/src/util/virsocketaddr.c index 94cbfc62..fcad7f8a 100644 --- a/src/util/virsocketaddr.c +++ b/src/util/virsocketaddr.c @@ -154,6 +154,15 @@ int virSocketAddrParse(virSocketAddr *addr, const char= *val, int family) return len; } =20 +int virSocketAddrParseXML(const char *val, + virSocketAddr *addr, + const char *instname G_GNUC_UNUSED, + void *parent G_GNUC_UNUSED, + void *opaque G_GNUC_UNUSED) +{ + return virSocketAddrParse(addr, val, AF_UNSPEC); +} + /** * virSocketAddrParseAny: * @addr: where to store the return value, optional. @@ -1306,3 +1315,36 @@ virSocketAddrFree(virSocketAddr *addr) { g_free(addr); } + +void +virSocketAddrClear(virSocketAddr *addr) +{ + memset(addr, 0, sizeof(virSocketAddr)); +} + +int +virSocketAddrFormatBuf(virBuffer *buf, + const char *fmt, + const virSocketAddr *addr, + const void *parent G_GNUC_UNUSED, + void *opaque G_GNUC_UNUSED) +{ + g_autofree char *str =3D NULL; + if (!VIR_SOCKET_ADDR_VALID(addr)) + return 0; + + str =3D virSocketAddrFormatFull(addr, false, NULL); + if (!str) + return -1; + + virBufferAsprintf(buf, fmt, str); + return 0; +} + +bool +virSocketAddrCheck(const virSocketAddr *addr, + const void *parent G_GNUC_UNUSED, + void *opaque G_GNUC_UNUSED) +{ + return VIR_SOCKET_ADDR_VALID(addr); +} diff --git a/src/util/virsocketaddr.h b/src/util/virsocketaddr.h index f76e2297..cba87390 100644 --- a/src/util/virsocketaddr.h +++ b/src/util/virsocketaddr.h @@ -18,11 +18,13 @@ =20 #pragma once =20 +#include "virbuffer.h" #include "virsocket.h" =20 #define VIR_LOOPBACK_IPV4_ADDR "127.0.0.1" =20 -typedef struct { +typedef struct _virSocketAddr virSocketAddr; +struct _virSocketAddr { union { struct sockaddr sa; struct sockaddr_storage stor; @@ -33,7 +35,7 @@ typedef struct { #endif } data; socklen_t len; -} virSocketAddr; +}; =20 #define VIR_SOCKET_ADDR_VALID(s) \ ((s)->data.sa.sa_family !=3D AF_UNSPEC) @@ -66,6 +68,12 @@ int virSocketAddrParse(virSocketAddr *addr, const char *val, int family); =20 +int virSocketAddrParseXML(const char *val, + virSocketAddr *addr, + const char *instname, + void *parent, + void *opaque); + int virSocketAddrParseAny(virSocketAddr *addr, const char *val, int family, @@ -89,6 +97,12 @@ char *virSocketAddrFormatFull(const virSocketAddr *addr, bool withService, const char *separator); =20 +int virSocketAddrFormatBuf(virBuffer *buf, + const char *fmt, + const virSocketAddr *addr, + const void *parent, + void *opaque); + char *virSocketAddrGetPath(virSocketAddr *addr); =20 int virSocketAddrSetPort(virSocketAddr *addr, int port); @@ -141,5 +155,10 @@ int virSocketAddrPTRDomain(const virSocketAddr *addr, ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3); =20 void virSocketAddrFree(virSocketAddr *addr); +void virSocketAddrClear(virSocketAddr *addr); =20 G_DEFINE_AUTOPTR_CLEANUP_FUNC(virSocketAddr, virSocketAddrFree); + +bool virSocketAddrCheck(const virSocketAddr *addr, + const void *parent, + void *opaque); --=20 2.25.1