From nobody Mon Feb 9 14:02:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1687787759; cv=none; d=zohomail.com; s=zohoarc; b=cSZ/TvAj49al5IWj4VgmlQWSmXbmwYw2L8Ds8BAoNxIP+Lllo35QiRSXI/KbVGHdp2cn+V75Zp2ht1ZxzBUcw7PbUCxXMRPG0FqJI7F3sCjPnFX07m1u+HVLDuANXOlzYnhsv9TUSpdVKrJFGiQUmouyMtm3o69eY+PjGtFvFfs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687787759; 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=0rnk5AWms8RkVOG4AppchVEOsnqlZbRftrt3C7Xu2qE=; b=S5DCX4kPZt4TVZ9NeRvG8/Psirct1bD7CPIkFlr7JnrqSZYsYFSGAMoJHHWpH6kV6m53Tj4vPNrTLt+LSUVLGdRPkp0YfgBqpWK6XuOsgFq6+wDMxneLVZIr092a+KqB9NJCio4IbVcDY+hxugQxIw4EmcV88mbUvGe0MSJr8KY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1687787759886857.3575141021222; Mon, 26 Jun 2023 06:55:59 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-14-__VR14mbPhu29-F9JFWshg-1; Mon, 26 Jun 2023 09:55:53 -0400 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id B83693C0F678; Mon, 26 Jun 2023 13:55:47 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9F94140F01F; Mon, 26 Jun 2023 13:55:47 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 510561946A71; Mon, 26 Jun 2023 13:55:45 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 742371946A6E for ; Mon, 26 Jun 2023 13:55:44 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 543D6C575E1; Mon, 26 Jun 2023 13:55:44 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast03.extmail.prod.ext.rdu2.redhat.com [10.11.55.19]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4C20CC575E0 for ; Mon, 26 Jun 2023 13:55:44 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.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 2BED78C80E2 for ; Mon, 26 Jun 2023 13:55:44 +0000 (UTC) Received: from mx0.riseup.net (mx0.riseup.net [198.252.153.6]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-223-BfuWH5mdOK2sh8OzpOEMwQ-1; Mon, 26 Jun 2023 09:55:42 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mail.riseup.net", Issuer "R3" (not verified)) by mx0.riseup.net (Postfix) with ESMTPS id 4QqTrX4SSHz9tFB for ; Mon, 26 Jun 2023 13:55:40 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4QqTrV443WzFpcn; Mon, 26 Jun 2023 13:55:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1687787758; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=0rnk5AWms8RkVOG4AppchVEOsnqlZbRftrt3C7Xu2qE=; b=RqZ6KfLC+/Q6FRuS4Bb9dis4kBpgw+4TqvpqQAbXgzMhcy9HMxY/KGJA5ZaTqytGY/LsjV /Cjb05pqyRZN4jSz3BpFYbgb5K9/YgwiW8L6WVfvblZtamGOEQ0+ZNtktFaBElQBs/shCw JqzbKQHBetQlYi44HZobO39DyUPe+wY= X-MC-Unique: __VR14mbPhu29-F9JFWshg-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: BfuWH5mdOK2sh8OzpOEMwQ-1 X-Riseup-User-ID: A94E1CAF27DD89C178D85DA3AA3E25C02EC41EB1066DAFEBF138565F1EE4AD58 From: K Shiva To: libvir-list@redhat.com Subject: [libvirt PATCH v3 1/8] Parser and Schema definitions Date: Mon, 26 Jun 2023 19:25:16 +0530 Message-ID: <20230626135523.18404-2-shiva_kr@riseup.net> In-Reply-To: <20230626135523.18404-1-shiva_kr@riseup.net> References: <20230626135523.18404-1-shiva_kr@riseup.net> MIME-Version: 1.0 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 3.1 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: K Shiva Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1687787760980100001 Content-Type: text/plain; charset="utf-8"; x-default="true" - The definition of struct virNetworkObj has been moved from=20 virnetworkobj.c to its header as it was needed by network_event.h. - Added functions to parse and save the XML along with helper functions that resolve the live/persistent state of the network. Signed-off-by: K Shiva --- src/conf/network_conf.c | 3 + src/conf/network_conf.h | 2 + src/conf/virnetworkobj.c | 347 ++++++++++++++++++++++++++++++++++++--- src/conf/virnetworkobj.h | 56 +++++++ 4 files changed, 386 insertions(+), 22 deletions(-) diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 73788b6d87..84952db041 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -2546,6 +2546,9 @@ virNetworkSaveXML(const char *configDir, char uuidstr[VIR_UUID_STRING_BUFLEN]; g_autofree char *configFile =3D NULL; =20 + if (!configDir) + return 0; + if ((configFile =3D virNetworkConfigFile(configDir, def->name)) =3D=3D= NULL) return -1; =20 diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h index 2b2e9d15f0..5a1bdb1284 100644 --- a/src/conf/network_conf.h +++ b/src/conf/network_conf.h @@ -249,6 +249,8 @@ struct _virNetworkDef { unsigned char uuid[VIR_UUID_BUFLEN]; bool uuid_specified; char *name; + char *title; + char *description; int connections; /* # of guest interfaces connected to this network = */ =20 char *bridge; /* Name of bridge device */ diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index b8b86da06f..82f90937bc 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -39,28 +39,6 @@ VIR_LOG_INIT("conf.virnetworkobj"); * that big. */ #define INIT_CLASS_ID_BITMAP_SIZE (1<<4) =20 -struct _virNetworkObj { - virObjectLockable parent; - - pid_t dnsmasqPid; - bool active; - bool autostart; - bool persistent; - - virNetworkDef *def; /* The current definition */ - virNetworkDef *newDef; /* New definition to activate at shutdown */ - - virBitmap *classIdMap; /* bitmap of class IDs for QoS */ - unsigned long long floor_sum; /* sum of all 'floor'-s of attached NICs= */ - - unsigned int taint; - - /* Immutable pointer, self locking APIs */ - virMacMap *macmap; - - GHashTable *ports; /* uuid -> virNetworkPortDef **/ -}; - struct _virNetworkObjList { virObjectRWLockable parent; =20 @@ -1822,3 +1800,328 @@ virNetworkObjLoadAllPorts(virNetworkObj *net, =20 return 0; } + + +/** + * virNetworkObjUpdateModificationImpact: + * + * @net: network object + * @flags: flags to update the modification impact on + * + * Resolves virNetworkUpdateFlags in @flags so that they correctly + * apply to the actual state of @net. @flags may be modified after call to= this + * function. + * + * Returns 0 on success if @flags point to a valid combination for @net or= -1 on + * error. + */ +int +virNetworkObjUpdateModificationImpact(virNetworkObj *net, + unsigned int *flags) +{ + bool isActive =3D virNetworkObjIsActive(net); + + if ((*flags & (VIR_NETWORK_UPDATE_AFFECT_LIVE | VIR_NETWORK_UPDATE_AFF= ECT_CONFIG)) =3D=3D + VIR_NETWORK_UPDATE_AFFECT_CURRENT) { + if (isActive) + *flags |=3D VIR_NETWORK_UPDATE_AFFECT_LIVE; + else + *flags |=3D VIR_NETWORK_UPDATE_AFFECT_CONFIG; + } + + if (!isActive && (*flags & VIR_NETWORK_UPDATE_AFFECT_LIVE)) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("network is not running")); + return -1; + } + + if (!net->persistent && (*flags & VIR_NETWORK_UPDATE_AFFECT_CONFIG)) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("transient networks do not have any " + "persistent config")); + return -1; + } + + return 0; +} + + +/** + * virNetworkObjGetDefs: + * + * @net: network object + * @flags: for virNetworkUpdateFlags + * @liveDef: Set the pointer to the live definition of @net. + * @persDef: Set the pointer to the config definition of @net. + * + * Helper function to resolve @flags and retrieve correct network pointer + * objects. This function should be used only when the network driver + * creates net->newDef once the network has started. + * + * If @liveDef or @persDef are set it implies that @flags request modifica= tion + * thereof. + * + * Returns 0 on success and sets @liveDef and @persDef; -1 if @flags are + * inappropriate. + */ +int +virNetworkObjGetDefs(virNetworkObj *net, + unsigned int flags, + virNetworkDef **liveDef, + virNetworkDef **persDef) +{ + if (liveDef) + *liveDef =3D NULL; + + if (persDef) + *persDef =3D NULL; + + if (virNetworkObjUpdateModificationImpact(net, &flags) < 0) + return -1; + + if (virNetworkObjIsActive(net)) { + if (liveDef && (flags & VIR_NETWORK_UPDATE_AFFECT_LIVE)) + *liveDef =3D net->def; + + if (persDef && (flags & VIR_NETWORK_UPDATE_AFFECT_CONFIG)) + *persDef =3D net->newDef; + } else { + if (persDef) + *persDef =3D net->def; + } + + return 0; +} + + +/** + * virNetworkObjGetOneDefState: + * + * @net: Network object + * @flags: for virNetworkUpdateFlags + * @live: set to true if live config was returned (may be omitted) + * + * Helper function to resolve @flags and return the correct network pointer + * object. This function returns one of @net->def or @net->persistentDef + * according to @flags. @live is set to true if the live net config will be + * returned. This helper should be used only in APIs that guarantee + * that @flags contains exactly one of VIR_NETWORK_UPDATE_AFFECT_LIVE or + * VIR_NETWORK_UPDATE_AFFECT_CONFIG and not both. + * + * Returns the correct definition pointer or NULL on error. + */ +virNetworkDef * +virNetworkObjGetOneDefState(virNetworkObj *net, + unsigned int flags, + bool *live) +{ + if (flags & VIR_NETWORK_UPDATE_AFFECT_LIVE && + flags & VIR_NETWORK_UPDATE_AFFECT_CONFIG) { + virReportInvalidArg(flags, "%s", + _("Flags 'VIR_NETWORK_UPDATE_AFFECT_LIVE' and " + "'VIR_NETWORK_UPDATE_AFFECT_CONFIG' are mutu= ally " + "exclusive")); + return NULL; + } + + if (virNetworkObjUpdateModificationImpact(net, &flags) < 0) + return NULL; + + if (live) + *live =3D flags & VIR_NETWORK_UPDATE_AFFECT_LIVE; + + if (virNetworkObjIsActive(net) && flags & VIR_NETWORK_UPDATE_AFFECT_CO= NFIG) + return net->newDef; + + return net->def; +} + + +/** + * virNetworkObjGetOneDef: + * + * @net: Network object + * @flags: for virNetworkUpdateFlags + * + * Helper function to resolve @flags and return the correct network pointer + * object. This function returns one of @net->def or @net->persistentDef + * according to @flags. This helper should be used only in APIs that guara= ntee + * that @flags contains exactly one of VIR_NETWORK_UPDATE_AFFECT_LIVE or + * VIR_NETWORK_UPDATE_AFFECT_CONFIG and not both. + * + * Returns the correct definition pointer or NULL on error. + */ +virNetworkDef * +virNetworkObjGetOneDef(virNetworkObj *net, + unsigned int flags) +{ + return virNetworkObjGetOneDefState(net, flags, NULL); +} + + +char * +virNetworkObjGetMetadata(virNetworkObj *net, + int type, + const char *uri, + unsigned int flags) +{ + virNetworkDef *def; + char *ret =3D NULL; + + virCheckFlags(VIR_NETWORK_UPDATE_AFFECT_LIVE | + VIR_NETWORK_UPDATE_AFFECT_CONFIG, NULL); + + if (type >=3D VIR_NETWORK_METADATA_LAST) { + virReportError(VIR_ERR_INVALID_ARG, + _("unknown metadata type '%1$d'"), type); + return NULL; + } + + if (!(def =3D virNetworkObjGetOneDef(net, flags))) + return NULL; + + switch ((virNetworkMetadataType) type) { + case VIR_NETWORK_METADATA_DESCRIPTION: + ret =3D g_strdup(def->description); + break; + + case VIR_NETWORK_METADATA_TITLE: + ret =3D g_strdup(def->title); + break; + + case VIR_NETWORK_METADATA_ELEMENT: + if (!def->metadata) + break; + + if (virXMLExtractNamespaceXML(def->metadata, uri, &ret) < 0) + return NULL; + break; + + case VIR_NETWORK_METADATA_LAST: + break; + } + + if (!ret) + virReportError(VIR_ERR_NO_NETWORK_METADATA, "%s", + _("Requested metadata element is not present")); + + return ret; +} + + +static int +virNetworkDefSetMetadata(virNetworkDef *def, + int type, + const char *metadata, + const char *key, + const char *uri) +{ + g_autoptr(xmlDoc) doc =3D NULL; + xmlNodePtr old; + g_autoptr(xmlNode) new =3D NULL; + + if (type >=3D VIR_NETWORK_METADATA_LAST) { + virReportError(VIR_ERR_INVALID_ARG, + _("unknown metadata type '%1$d'"), type); + return -1; + } + + switch ((virNetworkMetadataType) type) { + case VIR_NETWORK_METADATA_DESCRIPTION: + g_clear_pointer(&def->description, g_free); + + if (STRNEQ_NULLABLE(metadata, "")) + def->description =3D g_strdup(metadata); + break; + + case VIR_NETWORK_METADATA_TITLE: + g_clear_pointer(&def->title, g_free); + + if (STRNEQ_NULLABLE(metadata, "")) + def->title =3D g_strdup(metadata); + break; + + case VIR_NETWORK_METADATA_ELEMENT: + if (metadata) { + + /* parse and modify the xml from the user */ + if (!(doc =3D virXMLParseStringCtxt(metadata, _("(metadata_xml= )"), NULL))) + return -1; + + if (virXMLInjectNamespace(doc->children, uri, key) < 0) + return -1; + + /* create the root node if needed */ + if (!def->metadata) + def->metadata =3D virXMLNewNode(NULL, "metadata"); + + if (!(new =3D xmlCopyNode(doc->children, 1))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Failed to copy XML node")); + return -1; + } + } + + /* remove possible other nodes sharing the namespace */ + while ((old =3D virXMLFindChildNodeByNs(def->metadata, uri))) { + xmlUnlinkNode(old); + xmlFreeNode(old); + } + + if (new) { + if (!(xmlAddChild(def->metadata, new))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("failed to add metadata to XML document")= ); + return -1; + } + new =3D NULL; + } + break; + + case VIR_NETWORK_METADATA_LAST: + break; + } + + return 0; +} + + +int +virNetworkObjSetMetadata(virNetworkObj *net, + int type, + const char *metadata, + const char *key, + const char *uri, + virNetworkXMLOption *xmlopt, + const char *stateDir, + const char *configDir, + unsigned int flags) +{ + virNetworkDef *def; + virNetworkDef *persistentDef; + + virCheckFlags(VIR_NETWORK_UPDATE_AFFECT_LIVE | + VIR_NETWORK_UPDATE_AFFECT_CONFIG, -1); + + if (virNetworkObjGetDefs(net, flags, &def, &persistentDef) < 0) + return -1; + + if (def) { + if (virNetworkDefSetMetadata(def, type, metadata, key, uri) < 0) + return -1; + + if (virNetworkObjSaveStatus(stateDir, net, xmlopt) < 0) + return -1; + } + + if (persistentDef) { + if (virNetworkDefSetMetadata(persistentDef, type, metadata, key, + uri) < 0) + return -1; + + if (virNetworkSaveConfig(configDir, persistentDef, xmlopt) < 0) + return -1; + } + + return 0; +} diff --git a/src/conf/virnetworkobj.h b/src/conf/virnetworkobj.h index 7d34fa3204..d17a43d7bb 100644 --- a/src/conf/virnetworkobj.h +++ b/src/conf/virnetworkobj.h @@ -26,6 +26,28 @@ =20 typedef struct _virNetworkObj virNetworkObj; =20 +struct _virNetworkObj { + virObjectLockable parent; + + pid_t dnsmasqPid; + bool active; + bool autostart; + bool persistent; + + virNetworkDef *def; /* The current definition */ + virNetworkDef *newDef; /* New definition to activate at shutdown */ + + virBitmap *classIdMap; /* bitmap of class IDs for QoS */ + unsigned long long floor_sum; /* sum of all 'floor'-s of attached NICs= */ + + unsigned int taint; + + /* Immutable pointer, self locking APIs */ + virMacMap *macmap; + + GHashTable *ports; /* uuid -> virNetworkPortDef **/ +}; + virNetworkObj * virNetworkObjNew(void); =20 @@ -258,3 +280,37 @@ virNetworkObjListNumOfNetworks(virNetworkObjList *nets, void virNetworkObjListPrune(virNetworkObjList *nets, unsigned int flags); + +int virNetworkObjUpdateModificationImpact(virNetworkObj *net, + unsigned int *flags); + +int +virNetworkObjGetDefs(virNetworkObj *net, + unsigned int flags, + virNetworkDef **liveDef, + virNetworkDef **persDef); + +virNetworkDef * +virNetworkObjGetOneDefState(virNetworkObj *net, + unsigned int flags, + bool *state); +virNetworkDef * +virNetworkObjGetOneDef(virNetworkObj *net, + unsigned int flags); + +char * +virNetworkObjGetMetadata(virNetworkObj *network, + int type, + const char *uri, + unsigned int flags); + +int +virNetworkObjSetMetadata(virNetworkObj *network, + int type, + const char *metadata, + const char *key, + const char *uri, + virNetworkXMLOption *xmlopt, + const char *stateDir, + const char *configDir, + unsigned int flags); --=20 2.41.0 From nobody Mon Feb 9 14:02:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1687787756; cv=none; d=zohomail.com; s=zohoarc; b=VFIZgSyyfBok9O24IfJtAyf0SW6zAzg632vN+bOIlIFbQa+8c/RiWqeLOFxTBBcuW58hqpHfTsVgMVaxKeQfO/DBaPIvEoiggPbpCP/iLXK9ZxpqK176C6quBPp6Y/jBeFPvQyFciHkem6qrMdXuE1WlRFmBbGS7FK1KYcQR38E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687787756; 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=psP6F59uVo4De5pY0wo3OOqDWnM3sPphfRD/7HFoI58=; b=j6JbQiyF2oojb5Y70FoIXEc0qcKwIYi087YsEINart4JeSpZtH2DcDMDzLeU7xV7XrCRv+kDeLsObEu0xXGBE7KD69zmu7nrhWlevrWv+4vdKHIlvevVL5zaeAyM9Owr8joaMWtGGswt1AJJbE+Vfy+OomfR2ZS5mtsLk+koEzs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1687787756794793.9944079502943; Mon, 26 Jun 2023 06:55:56 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-79-iS7mOFlhOTKCCNfQebyw2w-1; Mon, 26 Jun 2023 09:55:53 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 0D2FE891F40; Mon, 26 Jun 2023 13:55:48 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id EB50F1121319; Mon, 26 Jun 2023 13:55:47 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 46D2C1946588; Mon, 26 Jun 2023 13:55:47 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 0AC0619459EC for ; Mon, 26 Jun 2023 13:55:46 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id DFA5114682F9; Mon, 26 Jun 2023 13:55:45 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast03.extmail.prod.ext.rdu2.redhat.com [10.11.55.19]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D8610140EBB8 for ; Mon, 26 Jun 2023 13:55:45 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.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 B5F9B8C80E0 for ; Mon, 26 Jun 2023 13:55:45 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-313-djyt7FOwMNS_ZLEsHl2wtQ-1; Mon, 26 Jun 2023 09:55:43 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4QqTrZ2Q9czDqmQ for ; Mon, 26 Jun 2023 13:55:42 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4QqTrY0mZGzFpcn; Mon, 26 Jun 2023 13:55:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1687787755; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=psP6F59uVo4De5pY0wo3OOqDWnM3sPphfRD/7HFoI58=; b=SomhkrHwv14EWhnoZn0DiA/+9asN9OyMnxIsyGFc3tWvnqGLx10VTQ3toEk3qZKjQ8R4qh w7Qo1329WB4hP8kdiBOkjcW5bbneFbULAfaHQqzdbdYYt5WPVzPAAsjUUpHrIRbsa8Dz2q cuzhO2hgO0Sb05HkPaOnh6N3Z0gk/Ls= X-MC-Unique: iS7mOFlhOTKCCNfQebyw2w-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: djyt7FOwMNS_ZLEsHl2wtQ-1 X-Riseup-User-ID: C3B3CC8CC2A1C1564333292276A2A221E836EDC7AF9F6E4038148242CEEFCF39 From: K Shiva To: libvir-list@redhat.com Subject: [libvirt PATCH v3 2/8] Metadata change APIs and related enums Date: Mon, 26 Jun 2023 19:25:17 +0530 Message-ID: <20230626135523.18404-3-shiva_kr@riseup.net> In-Reply-To: <20230626135523.18404-1-shiva_kr@riseup.net> References: <20230626135523.18404-1-shiva_kr@riseup.net> MIME-Version: 1.0 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 3.1 on 10.11.54.7 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: K Shiva Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1687787758829100003 Content-Type: text/plain; charset="utf-8"; x-default="true" Added: - virNetworkGetMetadata() and virNetworkSetMetadata() APIs. - enums representing metadata type, i.e title, description or custom metadata. - enum representing metadata change callback event. Signed-off-by: K Shiva --- include/libvirt/libvirt-network.h | 51 +++++++++ src/libvirt-network.c | 167 ++++++++++++++++++++++++++++++ src/libvirt_public.syms | 6 ++ 3 files changed, 224 insertions(+) diff --git a/include/libvirt/libvirt-network.h b/include/libvirt/libvirt-ne= twork.h index 90cde0cf24..e5d25d699b 100644 --- a/include/libvirt/libvirt-network.h +++ b/include/libvirt/libvirt-network.h @@ -330,6 +330,7 @@ typedef void (*virConnectNetworkEventLifecycleCallback)= (virConnectPtr conn, */ typedef enum { VIR_NETWORK_EVENT_ID_LIFECYCLE =3D 0, /* virConnectNetworkEventL= ifecycleCallback (Since: 1.2.1) */ + VIR_NETWORK_EVENT_ID_METADATA_CHANGE =3D 1, /* virConnectNetworkEventM= etadataChangeCallback (Since: 9.5.0) */ =20 # ifdef VIR_ENUM_SENTINELS VIR_NETWORK_EVENT_ID_LAST @@ -547,4 +548,54 @@ virNetworkPortFree(virNetworkPortPtr port); int virNetworkPortRef(virNetworkPortPtr port); =20 +/** + * virNetworkMetadataType: + * + * Since: 9.5.0 + */ +typedef enum { + VIR_NETWORK_METADATA_DESCRIPTION =3D 0, /* Operate on (S= ince: 9.5.0) */ + VIR_NETWORK_METADATA_TITLE =3D 1, /* Operate on (Since: = 9.5.0) */ + VIR_NETWORK_METADATA_ELEMENT =3D 2, /* Operate on <metadata> (Sinc= e: 9.5.0) */ + +# ifdef VIR_ENUM_SENTINELS + VIR_NETWORK_METADATA_LAST /* (Since: 9.5.0) */ +# endif +} virNetworkMetadataType; + +int +virNetworkSetMetadata(virNetworkPtr network, + int type, + const char *metadata, + const char *key, + const char *uri, + unsigned int flags); + +char * +virNetworkGetMetadata(virNetworkPtr network, + int type, + const char *uri, + unsigned int flags); + +/** + * virConnectNetworkEventMetadataChangeCallback: + * @conn: connection object + * @net: network on which the event occurred + * @type: a value from virNetworkMetadataType + * @nsuri: XML namespace URI + * @opaque: application specified data + * + * This callback is triggered when the network XML metadata is changed + * + * The callback signature to use when registering for an event of type + * VIR_NETWORK_EVENT_ID_METADATA_CHANGE with virConnectNetworkEventRegiste= rAny(). + * + * Since: 9.5.0 + */ +typedef void (*virConnectNetworkEventMetadataChangeCallback)(virConnectPtr= conn, + virNetworkPtr = net, + int type, + const char *ns= uri, + void *opaque); + #endif /* LIBVIRT_NETWORK_H */ diff --git a/src/libvirt-network.c b/src/libvirt-network.c index 236dfe2f5d..c0c66bb2fa 100644 --- a/src/libvirt-network.c +++ b/src/libvirt-network.c @@ -1915,3 +1915,170 @@ virNetworkPortRef(virNetworkPortPtr port) virObjectRef(port); return 0; } + + +/** + * virNetworkSetMetadata: + * @network: a network object + * @type: type of metadata, from virNetworkMetadataType + * @metadata: new metadata text + * @key: XML namespace key, or NULL + * @uri: XML namespace URI, or NULL + * @flags: bitwise-OR of virNetworkUpdateFlags + * + * Sets the appropriate network element given by @type to the + * value of @metadata. A @type of VIR_NETWORK_METADATA_DESCRIPTION + * is free-form text; VIR_NETWORK_METADATA_TITLE is free-form, but no + * newlines are permitted, and should be short (although the length is + * not enforced). For these two options @key and @uri are irrelevant and + * must be set to NULL. + * + * For type VIR_NETWORK_METADATA_ELEMENT @metadata must be well-formed + * XML belonging to namespace defined by @uri with local name @key. + * + * Passing NULL for @metadata says to remove that element from the + * network XML (passing the empty string leaves the element present). + * + * The resulting metadata will be present in virNetworkGetXMLDesc(), + * as well as quick access through virNetworkGetMetadata(). + * + * @flags controls whether the live network state, persistent configuratio= n, + * or both will be modified. + * + * Returns 0 on success, -1 in case of failure. + * + * Since: 9.5.0 + */ +int +virNetworkSetMetadata(virNetworkPtr network, + int type, + const char *metadata, + const char *key, + const char *uri, + unsigned int flags) +{ + virConnectPtr conn; + + VIR_DEBUG("network=3D%p, type=3D%d, metadata=3D'%s', key=3D'%s', uri= =3D'%s', flags=3D0x%x", + network, type, NULLSTR(metadata), NULLSTR(key), NULLSTR(uri), + flags); + + virResetLastError(); + + virCheckNetworkReturn(network, -1); + conn =3D network->conn; + + virCheckReadOnlyGoto(conn->flags, error); + + switch (type) { + case VIR_NETWORK_METADATA_TITLE: + if (metadata && strchr(metadata, '\n')) { + virReportInvalidArg(metadata, "%s", + _("metadata title can't contain " + "newlines")); + goto error; + } + G_GNUC_FALLTHROUGH; + case VIR_NETWORK_METADATA_DESCRIPTION: + virCheckNullArgGoto(uri, error); + virCheckNullArgGoto(key, error); + break; + case VIR_NETWORK_METADATA_ELEMENT: + virCheckNonNullArgGoto(uri, error); + if (metadata) + virCheckNonNullArgGoto(key, error); + break; + default: + /* For future expansion */ + break; + } + + if (conn->networkDriver->networkSetMetadata) { + int ret; + ret =3D conn->networkDriver->networkSetMetadata(network, type, met= adata, key, uri, + flags); + if (ret < 0) + goto error; + return ret; + } + + virReportUnsupportedError(); + + error: + virDispatchError(network->conn); + return -1; +} + + +/** + * virNetworkGetMetadata: + * @network: a network object + * @type: type of metadata, from virNetworkMetadataType + * @uri: XML namespace identifier + * @flags: bitwise-OR of virNetworkUpdateFlags + * + * Retrieves the appropriate network element given by @type. + * If VIR_NETWORK_METADATA_ELEMENT is requested parameter @uri + * must be set to the name of the namespace the requested elements + * belong to, otherwise must be NULL. + * + * If an element of the network XML is not present, the resulting + * error will be VIR_ERR_NO_NETWORK_METADATA. This method forms + * a shortcut for seeing information from virNetworkSetMetadata() + * without having to go through virNetworkGetXMLDesc(). + * + * @flags controls whether the live network state or persistent + * configuration will be queried. + * + * Returns the metadata string on success (caller must free), + * or NULL in case of failure. + * + * Since: 9.5.0 + */ +char * +virNetworkGetMetadata(virNetworkPtr network, + int type, + const char *uri, + unsigned int flags) +{ + virConnectPtr conn; + + VIR_DEBUG("network=3D%p, type=3D%d, uri=3D'%s', flags=3D0x%x", + network, type, NULLSTR(uri), flags); + + virResetLastError(); + + virCheckNetworkReturn(network, NULL); + + VIR_EXCLUSIVE_FLAGS_GOTO(VIR_NETWORK_UPDATE_AFFECT_LIVE, + VIR_NETWORK_UPDATE_AFFECT_CONFIG, + error); + + switch (type) { + case VIR_NETWORK_METADATA_TITLE: + case VIR_NETWORK_METADATA_DESCRIPTION: + virCheckNullArgGoto(uri, error); + break; + case VIR_NETWORK_METADATA_ELEMENT: + virCheckNonNullArgGoto(uri, error); + break; + default: + /* For future expansion */ + break; + } + + conn =3D network->conn; + + if (conn->networkDriver->networkGetMetadata) { + char *ret; + if (!(ret =3D conn->networkDriver->networkGetMetadata(network, typ= e, uri, flags))) + goto error; + return ret; + } + + virReportUnsupportedError(); + + error: + virDispatchError(network->conn); + return NULL; +} diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms index 80742f268e..d21fe49caa 100644 --- a/src/libvirt_public.syms +++ b/src/libvirt_public.syms @@ -932,4 +932,10 @@ LIBVIRT_9.0.0 { virDomainFDAssociate; } LIBVIRT_8.5.0; =20 +LIBVIRT_9.5.0 { + global: + virNetworkGetMetadata; + virNetworkSetMetadata; +} LIBVIRT_9.0.0; + # .... define new API here using predicted next version number .... --=20 2.41.0 From nobody Mon Feb 9 14:02:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1687787771; cv=none; d=zohomail.com; s=zohoarc; b=I7bPo3nqXX5jzrh8lXodTy7sAJM5yo/BenE7fmct3SX08fpK4IgkBav9rmIRJp93SaRLNFUaAmkDhkJxkqJ5oIBfd6x/Sr/emNMy5s8MCYqwDf4pSGr7B9p7uzI3fX/61ZJpBnje9JsJT632s1RbwFHNrmDVPu4zLnebZrOKd+0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687787771; 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=2uKiy0VpT8IX/A3zmS5CnjJ+x7sfBTzCCKGtD8A3Fyw=; b=nHJxztmDA7+3XuI2D4mmMa/oBzjYU1ZdbIBbt6pMmV2Zj3r634Qacb0STv7S1lhDbtmXPF/pWPtidzISi00nYHwFr0Z1Mm4J93Gtbg2ssmTHftmIgYx+x2HTjVSaYeZoHnTA7ECH4JunqOewGuDa9753F2EJXj1v41KwZCrMr0c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1687787771324254.9646083346413; Mon, 26 Jun 2023 06:56:11 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-635--PKGcxhaOK6HKeLWUx2mrw-1; Mon, 26 Jun 2023 09:56:07 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id AFC738C80E4; Mon, 26 Jun 2023 13:55:49 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 99A68207B2C3; Mon, 26 Jun 2023 13:55:49 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 812D01946588; Mon, 26 Jun 2023 13:55:49 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id D08101946594 for <libvir-list@listman.corp.redhat.com>; Mon, 26 Jun 2023 13:55:47 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id C46CA2166B27; Mon, 26 Jun 2023 13:55:47 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast07.extmail.prod.ext.rdu2.redhat.com [10.11.55.23]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BC5302166B26 for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:55:47 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-inbound-delivery-1.mimecast.com [205.139.110.61]) (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 83D803C0F699 for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:55:47 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-596-yWDaGiAxPci3fa7_nDnuIA-1; Mon, 26 Jun 2023 09:55:45 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4QqTrc0cxQzDqM3 for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:55:44 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4QqTrZ5zs7zFpcn; Mon, 26 Jun 2023 13:55:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1687787770; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=2uKiy0VpT8IX/A3zmS5CnjJ+x7sfBTzCCKGtD8A3Fyw=; b=c3ixejvZOgZC0NlVum59kqzmQbmTKzftemMFFAMgF3XSnXEF7czHaaSiMZiS0do6qPQnyI yzobLk1CigwWhpKRTTNDq5wRW84toxxdYV0X6XWHyWk2iscvo3Gw25yYy1rVeCQa8vRbtx 9rQWZBF5SXUnVFTSwnT0wLxiObaGgyQ= X-MC-Unique: -PKGcxhaOK6HKeLWUx2mrw-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: yWDaGiAxPci3fa7_nDnuIA-1 X-Riseup-User-ID: BAA1126F46C36682D00D2B81E5AAFAA04FCF9B53E82F0AAB695D6F6F8488F220 From: K Shiva <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [libvirt PATCH v3 3/8] Added Metadata change events Date: Mon, 26 Jun 2023 19:25:18 +0530 Message-ID: <20230626135523.18404-4-shiva_kr@riseup.net> In-Reply-To: <20230626135523.18404-1-shiva_kr@riseup.net> References: <20230626135523.18404-1-shiva_kr@riseup.net> MIME-Version: 1.0 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 3.1 on 10.11.54.6 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1687787771790100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Added: - Methods to handle metadata change events. Signed-off-by: K Shiva <shiva_kr@riseup.net> --- po/POTFILES | 1 + src/conf/network_event.c | 115 +++++++++++++++++++++++++++++++++++++++ src/conf/network_event.h | 11 ++++ 3 files changed, 127 insertions(+) diff --git a/po/POTFILES b/po/POTFILES index 5d6ec195b4..933a2e07a4 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -39,6 +39,7 @@ src/conf/netdev_bandwidth_conf.c src/conf/netdev_vlan_conf.c src/conf/netdev_vport_profile_conf.c src/conf/network_conf.c +src/conf/network_event.c src/conf/networkcommon_conf.c src/conf/node_device_conf.c src/conf/node_device_util.c diff --git a/src/conf/network_event.c b/src/conf/network_event.c index 6f25e43711..0e12cc2687 100644 --- a/src/conf/network_event.c +++ b/src/conf/network_event.c @@ -26,6 +26,9 @@ #include "object_event_private.h" #include "datatypes.h" #include "virlog.h" +#include "virerror.h" + +#define VIR_FROM_THIS VIR_FROM_NETWORK =20 VIR_LOG_INIT("conf.network_event"); =20 @@ -45,10 +48,21 @@ struct _virNetworkEventLifecycle { }; typedef struct _virNetworkEventLifecycle virNetworkEventLifecycle; =20 +struct _virNetworkEventMetadataChange { + virNetworkEvent parent; + + int type; + char *nsuri; +}; +typedef struct _virNetworkEventMetadataChange virNetworkEventMetadataChang= e; + static virClass *virNetworkEventClass; static virClass *virNetworkEventLifecycleClass; +static virClass *virNetworkEventMetadataChangeClass; + static void virNetworkEventDispose(void *obj); static void virNetworkEventLifecycleDispose(void *obj); +static void virNetworkEventMetadataChangeDispose(void *obj); =20 static int virNetworkEventsOnceInit(void) @@ -59,6 +73,9 @@ virNetworkEventsOnceInit(void) if (!VIR_CLASS_NEW(virNetworkEventLifecycle, virNetworkEventClass)) return -1; =20 + if (!VIR_CLASS_NEW(virNetworkEventMetadataChange, virNetworkEventClass= )) + return -1; + return 0; } =20 @@ -104,9 +121,22 @@ virNetworkEventDispatchDefaultFunc(virConnectPtr conn, return; } =20 + case VIR_NETWORK_EVENT_ID_METADATA_CHANGE: + { + virNetworkEventMetadataChange *metadataChangeEvent; + + metadataChangeEvent =3D (virNetworkEventMetadataChange *)event; + ((virConnectNetworkEventMetadataChangeCallback)cb)(conn, net, + metadataChan= geEvent->type, + metadataChan= geEvent->nsuri, + cbopaque); + return; + } + case VIR_NETWORK_EVENT_ID_LAST: break; } + VIR_WARN("Unexpected event ID %d", event->eventID); } =20 @@ -231,3 +261,88 @@ virNetworkEventLifecycleNew(const char *name, =20 return (virObjectEvent *)event; } + + +static void * +virNetworkEventNew(virClass *klass, + int eventID, + const char *name, + const unsigned char *uuid) +{ + virNetworkEvent *event; + char uuidstr[VIR_UUID_STRING_BUFLEN]; + + if (virNetworkEventsInitialize() < 0) + return NULL; + + if (!virClassIsDerivedFrom(klass, virNetworkEventClass)) { + virReportInvalidArg(klass, + _("Class %1$s must derive from virNetworkEvent= "), + virClassName(klass)); + return NULL; + } + + /* We use uuid for matching key. We ignore 'name' because + * Xen sometimes renames guests during migration, thus + * 'uuid' is the only truly reliable key we can use. */ + virUUIDFormat(uuid, uuidstr); + if (!(event =3D virObjectEventNew(klass, + virNetworkEventDispatchDefaultFunc, + eventID, + 0, name, uuid, uuidstr))) + return NULL; + + return (virObjectEvent *)event; +} + + +static void +virNetworkEventMetadataChangeDispose(void *obj) +{ + virNetworkEventMetadataChange *event =3D obj; + VIR_DEBUG("obj=3D%p", event); + + g_free(event->nsuri); +} + + +static virObjectEvent * +virNetworkEventMetadataChangeNew(const char *name, + unsigned char *uuid, + int type, + const char *nsuri) +{ + virNetworkEventMetadataChange *ev; + + if (virNetworkEventsInitialize() < 0) + return NULL; + + if (!(ev =3D virNetworkEventNew(virNetworkEventMetadataChangeClass, + VIR_NETWORK_EVENT_ID_METADATA_CHANGE, + name, uuid))) + return NULL; + + ev->type =3D type; + if (nsuri) + ev->nsuri =3D g_strdup(nsuri); + + return (virObjectEvent *)ev; +} + +virObjectEvent * +virNetworkEventMetadataChangeNewFromObj(virNetworkObj *obj, + int type, + const char *nsuri) +{ + return virNetworkEventMetadataChangeNew(obj->def->name, + obj->def->uuid, type, nsuri); +} + +virObjectEvent * +virNetworkEventMetadataChangeNewFromNet(virNetworkPtr net, + int type, + const char *nsuri) +{ + return virNetworkEventMetadataChangeNew(net->name, net->uuid, + type, nsuri); +} diff --git a/src/conf/network_event.h b/src/conf/network_event.h index 4502bfcaef..7c98a6ac92 100644 --- a/src/conf/network_event.h +++ b/src/conf/network_event.h @@ -23,6 +23,7 @@ =20 #include "internal.h" #include "object_event.h" +#include "virnetworkobj.h" =20 int virNetworkEventStateRegisterID(virConnectPtr conn, @@ -53,3 +54,13 @@ virNetworkEventLifecycleNew(const char *name, const unsigned char *uuid, int type, int detail); + +virObjectEvent * +virNetworkEventMetadataChangeNewFromObj(virNetworkObj *obj, + int type, + const char *nsuri); + +virObjectEvent * +virNetworkEventMetadataChangeNewFromNet(virNetworkPtr net, + int type, + const char *nsuri); --=20 2.41.0 From nobody Mon Feb 9 14:02:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1687787779; cv=none; d=zohomail.com; s=zohoarc; b=NC9LOPPg2bf48jlcBQ8EsXwoRCCpotE3J95UgaqbU6q3PiuFnBJOOtEEkKp35iDaPMVGO+dqRYV4X6buGEx257TxMHVCu5TK8nY+7JSEykZaAmj1QubF9bPz6XC+gToIaiGpAMLIesqo0HR0p2gPlQ3DddbSgybB+g4WP8wb7MM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687787779; 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=/h9uUNic8UFnmWP6959rEL6pt3bMPCJHQg7GaeM0bTs=; b=TdjK9kJzJyn6W0sHXVOv47j0QANPyWP3QFwhkjTJa/FAME+KWArKs4siOSS9yYqg7lDExZU7BuNYmdav5MGzTmUBmKJ8FnQb/8AgDX+KQF87FwVU5Omx7ltgAZNlv9YOTyUhTtGUoSgSg+EFDbg/5vl1n5NlA5ZH/qcR38lVdvs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1687787779837908.4045044500814; Mon, 26 Jun 2023 06:56:19 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-197-a8_OC---OUyNbXhozPuCog-1; Mon, 26 Jun 2023 09:56:14 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id C839E3811811; Mon, 26 Jun 2023 13:56:10 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id B271D40C2075; Mon, 26 Jun 2023 13:56:10 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 166361946A77; Mon, 26 Jun 2023 13:56:10 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 263071946A6A for <libvir-list@listman.corp.redhat.com>; Mon, 26 Jun 2023 13:56:01 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 2A71EC575E2; Mon, 26 Jun 2023 13:56:01 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast02.extmail.prod.ext.rdu2.redhat.com [10.11.55.18]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 20ED3C575E0 for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:01 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.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 0432D800159 for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:01 +0000 (UTC) Received: from mx0.riseup.net (mx0.riseup.net [198.252.153.6]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-107-LKqCvYAmOWywZxzGsqQI0w-1; Mon, 26 Jun 2023 09:55:58 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mail.riseup.net", Issuer "R3" (not verified)) by mx0.riseup.net (Postfix) with ESMTPS id 4QqTrr68Vrz9tFB for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:55:56 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4QqTrc49G7zFpcn; Mon, 26 Jun 2023 13:55:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1687787778; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=/h9uUNic8UFnmWP6959rEL6pt3bMPCJHQg7GaeM0bTs=; b=iYa937hGBi2HvJexIkLXUtg67FOosas1OVjiYANVOXQkFtsyoN6OFvLNEJOzUhR9KQlNNh Ez/BTLOLxWBOG0lcOc5SYjJGWMFTWKbwqJ1lqj2I8/iX2wTrhE5G5LE77HdTr1KtpL6y8o WFvaJeLRqEnewY3aYZLbj9wURMp4bQQ= X-MC-Unique: a8_OC---OUyNbXhozPuCog-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: LKqCvYAmOWywZxzGsqQI0w-1 X-Riseup-User-ID: 69A87CCD495C0EF3B87560C35C51E02EBB0C96A5B73A760F4C03CE8CAB9AB6C7 From: K Shiva <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [libvirt PATCH v3 4/8] virsh: Added Methods to print metadata changes Date: Mon, 26 Jun 2023 19:25:19 +0530 Message-ID: <20230626135523.18404-5-shiva_kr@riseup.net> In-Reply-To: <20230626135523.18404-1-shiva_kr@riseup.net> References: <20230626135523.18404-1-shiva_kr@riseup.net> MIME-Version: 1.0 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 3.1 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1687787781753100005 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: K Shiva <shiva_kr@riseup.net> --- tools/virsh-network.c | 78 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/tools/virsh-network.c b/tools/virsh-network.c index 42b7dba761..74712e29be 100644 --- a/tools/virsh-network.c +++ b/tools/virsh-network.c @@ -1206,7 +1206,8 @@ typedef struct virshNetEventData virshNetEventData; VIR_ENUM_DECL(virshNetworkEventId); VIR_ENUM_IMPL(virshNetworkEventId, VIR_NETWORK_EVENT_ID_LAST, - "lifecycle"); + "lifecycle", + "metadata-change"); =20 static void vshEventLifecyclePrint(virConnectPtr conn G_GNUC_UNUSED, @@ -1239,9 +1240,84 @@ vshEventLifecyclePrint(virConnectPtr conn G_GNUC_UNU= SED, vshEventDone(data->ctl); } =20 +static void G_GNUC_PRINTF(2, 3) +virshEventPrintf(virshNetEventData *data, + const char *fmt, + ...) +{ + va_list ap; + + if (!data->loop && data->count) + return; + + if (data->timestamp) { + char timestamp[VIR_TIME_STRING_BUFLEN] =3D ""; + + ignore_value(virTimeStringNowRaw(timestamp)); + vshPrint(data->ctl, "%s: ", timestamp); + } + + va_start(ap, fmt); + vshPrintVa(data->ctl, fmt, ap); + va_end(ap); + + (data->count)++; + if (!data->loop) + vshEventDone(data->ctl); +} + +/** + * virshEventPrint: + * + * @data: opaque data passed to all event callbacks + * @buf: string buffer describing the event + * + * Print the event description found in @buf and update virshNetEventData. + * + * This function resets @buf and frees all memory consumed by its content. + */ +static void +virshEventPrint(virshNetEventData *data, + virBuffer *buf) +{ + g_autofree char *msg =3D NULL; + + if (!(msg =3D virBufferContentAndReset(buf))) + return; + + virshEventPrintf(data, "%s", msg); +} + +#define UNKNOWNSTR(str) (str ? str : N_("unsupported value")) + +VIR_ENUM_DECL(virshNetworkEventMetadataChangeType); +VIR_ENUM_IMPL(virshNetworkEventMetadataChangeType, + VIR_NETWORK_METADATA_LAST, + N_("description"), + N_("title"), + N_("element")); + +static void +vshEventMetadataChangePrint(virConnectPtr conn G_GNUC_UNUSED, + virNetworkPtr net, + int type, + const char *nsuri, + void *opaque) +{ + g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; + + virBufferAsprintf(&buf, _("event 'metadata-change' for network '%1$s':= type %2$s, uri %3$s\n"), + virNetworkGetName(net), + UNKNOWNSTR(virshNetworkEventMetadataChangeTypeTypeTo= String(type)), + NULLSTR(nsuri)); + virshEventPrint(opaque, &buf); +} + virshNetworkEventCallback virshNetworkEventCallbacks[] =3D { { "lifecycle", VIR_NETWORK_EVENT_CALLBACK(vshEventLifecyclePrint), }, + { "metadata-change", + VIR_NETWORK_EVENT_CALLBACK(vshEventMetadataChangePrint), }, }; G_STATIC_ASSERT(VIR_NETWORK_EVENT_ID_LAST =3D=3D G_N_ELEMENTS(virshNetwork= EventCallbacks)); =20 --=20 2.41.0 From nobody Mon Feb 9 14:02:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1687787778; cv=none; d=zohomail.com; s=zohoarc; b=ly8CLcIjsVWElOSTPkZhJ1eJV0+UYziGf/PoeAoj9g/kQvbnWwRAyvDZmOkqMB1fvcb3qQygplEKWEcpZBVtFpmg9jC/dpzEUBio6IQXRlb9Hsi8iFneFJn1Nmt/u5GmEyOzk+17bJrEh79LAeMvV5XhwqjLNQ/ba4BSgYfE1rM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687787778; 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=K6ZP2+FLhdWe6Sk6Mwr1ieehhN/Km6oMdwPSnX0Cmr0=; b=XTmqR2O0DHcgzqVTLgqZPy+hsx7e0shFdmK86APOuHG/AL5Ys9qm5/j+uHqaMK09ElZC7jdcsGI7o8H85qOzUobsc9YMgrkZm8mzLPCZrjnINI8tq5GdBtkqDajhWdHYzenZQ/Hll8EvwtcHwPuEYvces8lfEuzrT3Fa+iK8Z24= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1687787778003800.8102705160991; Mon, 26 Jun 2023 06:56:18 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-509-FS62j61JOO6CoOoNJwk3ng-1; Mon, 26 Jun 2023 09:56:15 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 9898A3810D5F; Mon, 26 Jun 2023 13:56:10 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 40383207B2C3; Mon, 26 Jun 2023 13:56:10 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id C2FE61946A6B; Mon, 26 Jun 2023 13:56:09 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 24ECC1946A68 for <libvir-list@listman.corp.redhat.com>; Mon, 26 Jun 2023 13:56:01 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id CA0332014F94; Mon, 26 Jun 2023 13:56:01 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast10.extmail.prod.ext.rdu2.redhat.com [10.11.55.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C27EC200C0CD for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:01 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.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 A79851C09A44 for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:01 +0000 (UTC) Received: from mx0.riseup.net (mx0.riseup.net [198.252.153.6]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-621-xe2Z-82nN-KHbaf0uL7cCg-1; Mon, 26 Jun 2023 09:55:59 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mail.riseup.net", Issuer "R3" (not verified)) by mx0.riseup.net (Postfix) with ESMTPS id 4QqTrt41Qbz9tKH for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:55:58 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4QqTrs2PZfzFpcn; Mon, 26 Jun 2023 13:55:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1687787776; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=K6ZP2+FLhdWe6Sk6Mwr1ieehhN/Km6oMdwPSnX0Cmr0=; b=ZytLq8gBtS+yVVMQCMDLKD9E4ObpYtCDeKFCpF+7mM2tcSbslzVSCTArk0qTTt+8gnj6C3 t96Z3VBPexb2deduTc+jXJwVlFHjnaxC7PivVBp6D8k0Y4VrXasxY798bB4a59EayiFtP2 VgZKGq3ImStDgtvI2HVtmyo0h+w1PHs= X-MC-Unique: FS62j61JOO6CoOoNJwk3ng-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: xe2Z-82nN-KHbaf0uL7cCg-1 X-Riseup-User-ID: 08287BD34C2256F4A8091ACB474BA4C32ECA5620ABA8671931130C6095AC1F6F From: K Shiva <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [libvirt PATCH v3 5/8] Methods to relay metadata change callbacks Date: Mon, 26 Jun 2023 19:25:20 +0530 Message-ID: <20230626135523.18404-6-shiva_kr@riseup.net> In-Reply-To: <20230626135523.18404-1-shiva_kr@riseup.net> References: <20230626135523.18404-1-shiva_kr@riseup.net> MIME-Version: 1.0 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 3.1 on 10.11.54.4 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1687787778919100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Added: - Methods for relaying metadata change callbacks. - Enums representing the same. Signed-off-by: K Shiva <shiva_kr@riseup.net> --- src/remote/remote_daemon_dispatch.c | 39 +++++++++++++++++++++++++++++ src/remote/remote_driver.c | 32 +++++++++++++++++++++++ src/remote/remote_protocol.x | 15 ++++++++++- src/remote_protocol-structs | 6 +++++ 4 files changed, 91 insertions(+), 1 deletion(-) diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon= _dispatch.c index 7144e9e7ca..3e5eaec9e6 100644 --- a/src/remote/remote_daemon_dispatch.c +++ b/src/remote/remote_daemon_dispatch.c @@ -1420,8 +1420,47 @@ remoteRelayNetworkEventLifecycle(virConnectPtr conn, return 0; } =20 +static int +remoteRelayNetworkEventMetadataChange(virConnectPtr conn, + virNetworkPtr net, + int type, + const char *nsuri, + void *opaque) +{ + daemonClientEventCallback *callback =3D opaque; + remote_network_event_callback_metadata_change_msg data; + + if (callback->callbackID < 0 || + !remoteRelayNetworkEventCheckACL(callback->client, conn, net)) + return -1; + + VIR_DEBUG("Relaying network metadata change %s %d %s, callback %d", + net->name, type, NULLSTR(nsuri), callback->callbackID); + + /* build return data */ + memset(&data, 0, sizeof(data)); + + data.type =3D type; + if (nsuri) { + data.nsuri =3D g_new0(remote_nonnull_string, 1); + *(data.nsuri) =3D g_strdup(nsuri); + } + + make_nonnull_network(&data.net, net); + data.callbackID =3D callback->callbackID; + + remoteDispatchObjectEventSend(callback->client, callback->program, + REMOTE_PROC_NETWORK_EVENT_CALLBACK_METAD= ATA_CHANGE, + (xdrproc_t)xdr_remote_network_event_call= back_metadata_change_msg, + &data); + + return 0; +} + + static virConnectNetworkEventGenericCallback networkEventCallbacks[] =3D { VIR_NETWORK_EVENT_CALLBACK(remoteRelayNetworkEventLifecycle), + VIR_NETWORK_EVENT_CALLBACK(remoteRelayNetworkEventMetadataChange), }; =20 G_STATIC_ASSERT(G_N_ELEMENTS(networkEventCallbacks) =3D=3D VIR_NETWORK_EVE= NT_ID_LAST); diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 65ec239fb7..310f53fe5e 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -378,6 +378,12 @@ remoteNetworkBuildEventLifecycle(virNetClientProgram *= prog G_GNUC_UNUSED, virNetClient *client G_GNUC_UNUSED, void *evdata, void *opaque); =20 +static void +remoteNetworkBuildEventCallbackMetadataChange(virNetClientProgram *prog, + virNetClient *client, + void *evdata, void *opaque); + + static void remoteStoragePoolBuildEventLifecycle(virNetClientProgram *prog G_GNUC_UNUS= ED, virNetClient *client G_GNUC_UNUSED, @@ -505,6 +511,10 @@ static virNetClientProgramEvent remoteEvents[] =3D { remoteNetworkBuildEventLifecycle, sizeof(remote_network_event_lifecycle_msg), (xdrproc_t)xdr_remote_network_event_lifecycle_msg }, + { REMOTE_PROC_NETWORK_EVENT_CALLBACK_METADATA_CHANGE, + remoteNetworkBuildEventCallbackMetadataChange, + sizeof(remote_network_event_callback_metadata_change_msg), + (xdrproc_t)xdr_remote_network_event_callback_metadata_change_msg }, { REMOTE_PROC_DOMAIN_EVENT_CALLBACK_LIFECYCLE, remoteDomainBuildEventCallbackLifecycle, sizeof(remote_domain_event_callback_lifecycle_msg), @@ -4951,6 +4961,28 @@ remoteNetworkBuildEventLifecycle(virNetClientProgram= *prog G_GNUC_UNUSED, virObjectEventStateQueueRemote(priv->eventState, event, msg->callbackI= D); } =20 +static void +remoteNetworkBuildEventCallbackMetadataChange(virNetClientProgram *prog G_= GNUC_UNUSED, + virNetClient *client G_GNUC_U= NUSED, + void *evdata, void *opaque) +{ + virConnectPtr conn =3D opaque; + remote_network_event_callback_metadata_change_msg *msg =3D evdata; + struct private_data *priv =3D conn->privateData; + virNetworkPtr net; + virObjectEvent *event =3D NULL; + + if (!(net =3D get_nonnull_network(conn, msg->net))) + return; + + event =3D virNetworkEventMetadataChangeNewFromNet(net, msg->type, msg-= >nsuri ? *msg->nsuri : NULL); + + virObjectUnref(net); + + virObjectEventStateQueueRemote(priv->eventState, event, msg->callbackI= D); +} + + static void remoteStoragePoolBuildEventLifecycle(virNetClientProgram *prog G_GNUC_UNUS= ED, virNetClient *client G_GNUC_UNUSED, diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x index 5d86a51116..72aa69e580 100644 --- a/src/remote/remote_protocol.x +++ b/src/remote/remote_protocol.x @@ -3323,6 +3323,13 @@ struct remote_network_event_lifecycle_msg { int detail; }; =20 +struct remote_network_event_callback_metadata_change_msg { + int callbackID; + remote_nonnull_network net; + int type; + remote_string nsuri; +}; + struct remote_connect_storage_pool_event_register_any_args { int eventID; remote_storage_pool pool; @@ -6974,5 +6981,11 @@ enum remote_procedure { * @generate: none * @acl: domain:write */ - REMOTE_PROC_DOMAIN_FD_ASSOCIATE =3D 443 + REMOTE_PROC_DOMAIN_FD_ASSOCIATE =3D 443, + + /** + * @generate: both + * @acl: none + */ + REMOTE_PROC_NETWORK_EVENT_CALLBACK_METADATA_CHANGE =3D 444 }; diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs index 3c6c230a16..3f7256051e 100644 --- a/src/remote_protocol-structs +++ b/src/remote_protocol-structs @@ -2687,6 +2687,12 @@ struct remote_network_event_lifecycle_msg { int event; int detail; }; +struct remote_network_event_callback_metadata_change_msg { + int callbackID; + remote_nonnull_network net; + int type; + remote_string nsuri; +}; struct remote_connect_storage_pool_event_register_any_args { int eventID; remote_storage_pool pool; --=20 2.41.0 From nobody Mon Feb 9 14:02:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1687787779; cv=none; d=zohomail.com; s=zohoarc; b=hPN8+1/0Dmi9JL2UDFbIEAImSa05drEf9xW54FbK+BXAwqbH0LE4BH5/YjlmczDaoXdf+aEwqdcmnX96M3ulJ6xvPpLBCFoK237SNkRdwE3v7l2wCBcGKcLMrQXTSbGV486WfTVAYCRn78RBHi3c5YKIJeuKwUGyRzGivB/FAmk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687787779; 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=BWdpZrF73eSbY0I6JLgvxujeiCSI1VRkVsliJ+kdI9c=; b=PcmIhzp0rNwaz30tAx8e8p4u/u6c5ZAZVU9D9kNxTTpELTXQouhcIlkb28ezQn7dDsuI9Icr/WGXaEmo5aFD28KCftyNsQ3fAdbWJZCwayh1CRy1OiqQWZFtKdCdS4ZtmWavljyHSXSnztB2v0IhzBlA7OQpvH8y1W/zeHVlGI0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1687787779420758.0599804627844; Mon, 26 Jun 2023 06:56:19 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-81-ft11dySZNf6kV8KcF9x9pg-1; Mon, 26 Jun 2023 09:56:16 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 9FB8D1C09A40; Mon, 26 Jun 2023 13:56:11 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 892AD1121319; Mon, 26 Jun 2023 13:56:11 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 5BEE81946589; Mon, 26 Jun 2023 13:56:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 4282E19451C1 for <libvir-list@listman.corp.redhat.com>; Mon, 26 Jun 2023 13:56:04 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 24B811121331; Mon, 26 Jun 2023 13:56:04 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast10.extmail.prod.ext.rdu2.redhat.com [10.11.55.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1DE111121330 for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:04 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (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 04AD61C09A51 for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:04 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-664-84pP5t1yOE-xe-tx27hPew-1; Mon, 26 Jun 2023 09:56:01 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4QqTrw2FZ9zDqML for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:00 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4QqTrv0WlnzFpcn; Mon, 26 Jun 2023 13:55:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1687787778; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=BWdpZrF73eSbY0I6JLgvxujeiCSI1VRkVsliJ+kdI9c=; b=TWaY2/FgLh5Lf2pAXkvF1eHgYXaeP7QPKJpBCH+GDj3M0I/eQ+wUJf5Rq01SmRg0MDTFAi Z+nTvX4lRUOTaE9Apu3Z1G6x5d03bQut41FEFYanKyqj//t0BQQzqu6Bdn0jffwPLZWI5D O5ocn96cH34YltOJDLpSbziZ6KsF/uo= X-MC-Unique: ft11dySZNf6kV8KcF9x9pg-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: 84pP5t1yOE-xe-tx27hPew-1 X-Riseup-User-ID: E295BD55E816E84696AFF1BED7255E61FF45E5B5003DC5EE3FB2083316252DB9 From: K Shiva <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [libvirt PATCH v3 6/8] Test driver implementations Date: Mon, 26 Jun 2023 19:25:21 +0530 Message-ID: <20230626135523.18404-7-shiva_kr@riseup.net> In-Reply-To: <20230626135523.18404-1-shiva_kr@riseup.net> References: <20230626135523.18404-1-shiva_kr@riseup.net> MIME-Version: 1.0 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 3.1 on 10.11.54.3 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1687787781131100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Adds: - Get and Set Metadata functions to the test driver. Signed-off-by: K Shiva <shiva_kr@riseup.net> --- src/driver-network.h | 16 +++++++++ src/test/test_driver.c | 74 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/src/driver-network.h b/src/driver-network.h index 99efd4c8aa..1d19b013c9 100644 --- a/src/driver-network.h +++ b/src/driver-network.h @@ -161,6 +161,20 @@ typedef int virNetworkPortPtr **ports, unsigned int flags); =20 +typedef int +(*virDrvNetworkSetMetadata)(virNetworkPtr network, + int type, + const char *metadata, + const char *key, + const char *uri, + unsigned int flags); + +typedef char * +(*virDrvNetworkGetMetadata)(virNetworkPtr network, + int type, + const char *uri, + unsigned int flags); + typedef struct _virNetworkDriver virNetworkDriver; =20 /** @@ -202,4 +216,6 @@ struct _virNetworkDriver { virDrvNetworkPortGetParameters networkPortGetParameters; virDrvNetworkPortDelete networkPortDelete; virDrvNetworkListAllPorts networkListAllPorts; + virDrvNetworkSetMetadata networkSetMetadata; + virDrvNetworkGetMetadata networkGetMetadata; }; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index e7fce053b4..7294766d6e 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -633,6 +633,25 @@ static int testStoragePoolObjSetDefaults(virStoragePoo= lObj *obj); static int testNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info); static virNetworkObj *testNetworkObjFindByName(testDriver *privconn, const= char *name); =20 +static virNetworkObj * +testNetworkObjFromNetwork(virNetworkPtr network) +{ + virNetworkObj *net; + testDriver *driver =3D network->conn->privateData; + char uuidstr[VIR_UUID_STRING_BUFLEN]; + + net =3D virNetworkObjFindByUUID(driver->networks, network->uuid); + if (!net) { + virUUIDFormat(network->uuid, uuidstr); + virReportError(VIR_ERR_NO_NETWORK, + _("no network with matching uuid '%1$s' (%2$s)"), + uuidstr, network->name); + } + + return net; +} + + static virDomainObj * testDomObjFromDomain(virDomainPtr domain) { @@ -9948,6 +9967,59 @@ testConnectGetAllDomainStats(virConnectPtr conn, return ret; } =20 +static char * +testNetworkGetMetadata(virNetworkPtr net, + int type, + const char *uri, + unsigned int flags) +{ + virNetworkObj *privnet; + char *ret; + + virCheckFlags(VIR_NETWORK_UPDATE_AFFECT_LIVE | + VIR_NETWORK_UPDATE_AFFECT_CONFIG, NULL); + + if (!(privnet =3D testNetworkObjFromNetwork(net))) + return NULL; + + ret =3D virNetworkObjGetMetadata(privnet, type, uri, flags); + + virNetworkObjEndAPI(&privnet); + return ret; +} + +static int +testNetworkSetMetadata(virNetworkPtr net, + int type, + const char *metadata, + const char *key, + const char *uri, + unsigned int flags) +{ + testDriver *privconn =3D net->conn->privateData; + virNetworkObj *privnet; + int ret; + + virCheckFlags(VIR_NETWORK_UPDATE_AFFECT_LIVE | + VIR_NETWORK_UPDATE_AFFECT_CONFIG, -1); + + if (!(privnet =3D testNetworkObjFromNetwork(net))) + return -1; + + ret =3D virNetworkObjSetMetadata(privnet, type, metadata, + key, uri, NULL, + NULL, NULL, flags); + + if (ret =3D=3D 0) { + virObjectEvent *ev =3D NULL; + ev =3D virNetworkEventMetadataChangeNewFromObj(privnet, type, uri); + virObjectEventStateQueue(privconn->eventState, ev); + } + + virNetworkObjEndAPI(&privnet); + return ret; +} + /* * Test driver */ @@ -10141,6 +10213,8 @@ static virNetworkDriver testNetworkDriver =3D { .networkSetAutostart =3D testNetworkSetAutostart, /* 0.3.2 */ .networkIsActive =3D testNetworkIsActive, /* 0.7.3 */ .networkIsPersistent =3D testNetworkIsPersistent, /* 0.7.3 */ + .networkSetMetadata =3D testNetworkSetMetadata, /* 9.5.0 */ + .networkGetMetadata =3D testNetworkGetMetadata, /* 9.5.0 */ }; =20 static virInterfaceDriver testInterfaceDriver =3D { --=20 2.41.0 From nobody Mon Feb 9 14:02:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1687787781; cv=none; d=zohomail.com; s=zohoarc; b=QAZ0nzH7d4F5gjRQFWM+jIgUC8X1P9bk+B67iqUhU1PbcTnVtQGQ2GNXU3amyOSmNIiYIN7TJS16DwmYml2atCAI2RPjK12XborDv9zkrhzlhYKBEz/Y1MFPFwGDJUPX9EgBZL/4Lc0VhYDwdJk3X0ly0boDjf4Ip9lS/6nBthk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687787781; 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=JiJJ9IeggGPLotPmQCJmeT00pc0KWt5nF5Jx6L32lkQ=; b=IVCczdkwg+3HOfRsH/0eyT8/gq9wvOQMVvPA4f7jbqUJiHI5mgV4ufbodhiyuytC4Y0LxjSagXer9BtmD5OAx+e9hWhlZxxHWl9gyaKzOsFTgMq+b5NNOU3dmzpn0fKbfWQGU4+A8sH284UOsQLMorknaWE6JFQz3ZFWXSwneFw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1687787781338511.578107557767; Mon, 26 Jun 2023 06:56:21 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-297-FmaUPRXAPsuBplLYuhoQVQ-1; Mon, 26 Jun 2023 09:56:17 -0400 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BC53C185A7A8; Mon, 26 Jun 2023 13:56:13 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id A9099492B01; Mon, 26 Jun 2023 13:56:13 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 98AE11946588; Mon, 26 Jun 2023 13:56:13 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 74E5F1946589 for <libvir-list@listman.corp.redhat.com>; Mon, 26 Jun 2023 13:56:06 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 4DD20200B680; Mon, 26 Jun 2023 13:56:06 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast06.extmail.prod.ext.rdu2.redhat.com [10.11.55.22]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4659F200C0CD for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:06 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.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 2CF5F185A7A7 for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:06 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-441-1EsdnrUlOjG29qjyHsi2JQ-1; Mon, 26 Jun 2023 09:56:03 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4QqTry0L7NzDqmQ for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:02 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4QqTrw5n84zFpcn; Mon, 26 Jun 2023 13:56:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1687787780; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=JiJJ9IeggGPLotPmQCJmeT00pc0KWt5nF5Jx6L32lkQ=; b=MNDQuMg24T1A+z30nsc4B/Q1rW61UqUaoZJVxmyWLvMBkpxMQ6cTgVh5wMdKQGNp0/RZ5h /M6TiYQ0DQmQYmQOhi+Mgi/qhlkwu9Z+lrT0zE5uovRvkRPrjNiiIfkHzlf43mjCyQaHBD LkFgw5oUpUB1r8q9bCsagpDxAz2rmCQ= X-MC-Unique: FmaUPRXAPsuBplLYuhoQVQ-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: 1EsdnrUlOjG29qjyHsi2JQ-1 X-Riseup-User-ID: 978408536D9DC5A0F0C2F8780B4B526718BFD20712598FFBBA75934FAF572752 From: K Shiva <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [libvirt PATCH v3 7/8] Error code and message for NO_NETWORK_METADATA Date: Mon, 26 Jun 2023 19:25:22 +0530 Message-ID: <20230626135523.18404-8-shiva_kr@riseup.net> In-Reply-To: <20230626135523.18404-1-shiva_kr@riseup.net> References: <20230626135523.18404-1-shiva_kr@riseup.net> MIME-Version: 1.0 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 3.1 on 10.11.54.4 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1687787783173100007 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: K Shiva <shiva_kr@riseup.net> --- include/libvirt/virterror.h | 2 ++ src/util/virerror.c | 3 +++ 2 files changed, 5 insertions(+) diff --git a/include/libvirt/virterror.h b/include/libvirt/virterror.h index df13e4f11e..2910ff03da 100644 --- a/include/libvirt/virterror.h +++ b/include/libvirt/virterror.h @@ -348,6 +348,8 @@ typedef enum { VIR_ERR_NO_HOSTNAME =3D 108, /* no domain's hostname found (S= ince: 6.1.0) */ VIR_ERR_CHECKPOINT_INCONSISTENT =3D 109, /* checkpoint can't be used (= Since: 6.10.0) */ VIR_ERR_MULTIPLE_DOMAINS =3D 110, /* more than one matching domain= found (Since: 7.1.0) */ + VIR_ERR_NO_NETWORK_METADATA =3D 111, /* Network metadata is not prese= nt (Since: 9.5.0) */ + =20 # ifdef VIR_ENUM_SENTINELS VIR_ERR_NUMBER_LAST /* (Since: 5.0.0) */ diff --git a/src/util/virerror.c b/src/util/virerror.c index 453f19514e..227a182417 100644 --- a/src/util/virerror.c +++ b/src/util/virerror.c @@ -1287,6 +1287,9 @@ static const virErrorMsgTuple virErrorMsgStrings[] = =3D { [VIR_ERR_MULTIPLE_DOMAINS] =3D { N_("multiple matching domains found"), N_("multiple matching domains found: %1$s") }, + [VIR_ERR_NO_NETWORK_METADATA] =3D { + N_("metadata not found"), + N_("metadata not found: %1$s") }, }; =20 G_STATIC_ASSERT(G_N_ELEMENTS(virErrorMsgStrings) =3D=3D VIR_ERR_NUMBER_LAS= T); --=20 2.41.0 From nobody Mon Feb 9 14:02:07 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1687787780; cv=none; d=zohomail.com; s=zohoarc; b=ZxcbjXDyLbbHxNsTdaM8t1ASxnfonwwD8xfX2/m/gWptq3otXuGfZqwHjbXOCC+Tj9s9z1ObZF8w+EW+o6aUkAfwbwir7L0fvLaOmg2hd2EPnMv1epgp5qAQhDtsp5bzrXInl7AptoJkx/qOLhJsu+STt4ePPnaOZcsyfwPdVJo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687787780; 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=iy/AAzka3XMx/PgS6yx+jBhuvj3CwZI08fc4T8VPzUE=; b=Y4rsY8O1lMBhS7/obSkRDA37qrxSvdd/oC0TJv9yeVI71nP3EaaHugmXJ4BwmZ7KnhRLtYvb77jcIjsx/sN+IZinmxjbgIec4EzhcDGAz0/rXAo9cpq5aYB6PusZRsnbd1pSvteTNmikN+2TCg0SO+YmURvIhf7kiRRuIblpauU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1687787780042534.3026215443415; Mon, 26 Jun 2023 06:56:20 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-185-vFwdNhrxPiaG5x9oB2fYpg-1; Mon, 26 Jun 2023 09:56:13 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id D8733185A7A4; Mon, 26 Jun 2023 13:56:09 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id BEC1D200BA86; Mon, 26 Jun 2023 13:56:09 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 9E45E1946588; Mon, 26 Jun 2023 13:56:09 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 82B921946587 for <libvir-list@listman.corp.redhat.com>; Mon, 26 Jun 2023 13:56:08 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 64FE91121330; Mon, 26 Jun 2023 13:56:08 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast07.extmail.prod.ext.rdu2.redhat.com [10.11.55.23]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5DED3112132D for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:08 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (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 3C39B3C108C0 for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:08 +0000 (UTC) Received: from mx0.riseup.net (mx0.riseup.net [198.252.153.6]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-662-668VzA9EONGshQk0DA9jTw-1; Mon, 26 Jun 2023 09:56:05 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mail.riseup.net", Issuer "R3" (not verified)) by mx0.riseup.net (Postfix) with ESMTPS id 4QqTrz5gvbz9tGy for <libvir-list@redhat.com>; Mon, 26 Jun 2023 13:56:03 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4QqTry3vv0zFpcn; Mon, 26 Jun 2023 13:56:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1687787778; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=iy/AAzka3XMx/PgS6yx+jBhuvj3CwZI08fc4T8VPzUE=; b=jBFt72itM7zuBxNZ0EHb5jVjx7Qu+UpKyfCpGBj3Sf3qbYl8HuQIIcVSsqChh72d2z2JEh 1BshoPt9z9SaxFwWgcbJEvrPT8hRK1Kz3zitsoCGmThfsbsgViASiQ8bKGv6240g8wQ+Kk uEQDi0JnBw5U5TIKh2HVlGr2PIdj+cE= X-MC-Unique: vFwdNhrxPiaG5x9oB2fYpg-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: 668VzA9EONGshQk0DA9jTw-1 X-Riseup-User-ID: 64FA26F7BB7B4EC084FBAABED62ADF829C59386E385458F757978FE63F5B7E80 From: K Shiva <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [libvirt PATCH v3 8/8] Test program for network metadata Date: Mon, 26 Jun 2023 19:25:23 +0530 Message-ID: <20230626135523.18404-9-shiva_kr@riseup.net> In-Reply-To: <20230626135523.18404-1-shiva_kr@riseup.net> References: <20230626135523.18404-1-shiva_kr@riseup.net> MIME-Version: 1.0 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 3.1 on 10.11.54.3 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1687787781142100002 Content-Type: text/plain; charset="utf-8"; x-default="true" - Fixed a typo in libvirt-domain.h - Added test program networkmetadatatest.c Signed-off-by: K Shiva <shiva_kr@riseup.net> --- include/libvirt/libvirt-domain.h | 2 +- tests/meson.build | 1 + tests/networkmetadatatest.c | 297 +++++++++++++++++++++++++++++++ 3 files changed, 299 insertions(+), 1 deletion(-) create mode 100644 tests/networkmetadatatest.c diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-dom= ain.h index a1902546bb..ea36805aa3 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -5184,7 +5184,7 @@ typedef void (*virConnectDomainEventDeviceRemovalFail= edCallback)(virConnectPtr c * virConnectDomainEventMetadataChangeCallback: * @conn: connection object * @dom: domain on which the event occurred - * @type: a value from virDomainMetadataTypea + * @type: a value from virDomainMetadataType * @nsuri: XML namespace URI * @opaque: application specified data * diff --git a/tests/meson.build b/tests/meson.build index 0082446029..d083548c0a 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -258,6 +258,7 @@ tests +=3D [ { 'name': 'genericxml2xmltest' }, { 'name': 'interfacexml2xmltest' }, { 'name': 'metadatatest' }, + { 'name': 'networkmetadatatest' }, { 'name': 'networkxml2xmlupdatetest' }, { 'name': 'nodedevxml2xmltest' }, { 'name': 'nwfilterxml2xmltest' }, diff --git a/tests/networkmetadatatest.c b/tests/networkmetadatatest.c new file mode 100644 index 0000000000..4448472776 --- /dev/null +++ b/tests/networkmetadatatest.c @@ -0,0 +1,297 @@ +/* + * Copyright (C) 2013 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; If not, see + * <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include "testutils.h" + +#include "virerror.h" +#include "virxml.h" + +#define VIR_FROM_THIS VIR_FROM_NONE + +static const char metadata1[] =3D +"<derp xmlns:foobar=3D'http://foo.bar/'>\n" +" <bar>foobar</bar>\n" +" <foo fooish=3D'blurb'>foofoo</foo>\n" +" <foobar:baz>zomg</foobar:baz>\n" +"</derp>"; + + +static const char metadata1_ns[] =3D +"<herp:derp xmlns:foobar=3D'http://foo.bar/' xmlns:herp=3D'http://herp.der= p/'>\n" +" <herp:bar>foobar</herp:bar>\n" +" <herp:foo fooish=3D'blurb'>foofoo</herp:foo>\n" +" <foobar:baz>zomg</foobar:baz>\n" +"</herp:derp>"; + + +static const char metadata2[] =3D +"<foo>\n" +" <bar>baz</bar>\n" +"</foo>"; + + +static const char metadata2_ns[] =3D +"<blurb:foo xmlns:blurb=3D'http://herp.derp/'>\n" +" <blurb:bar>baz</blurb:bar>\n" +"</blurb:foo>"; + + +static char * +getMetadataFromXML(virNetworkPtr net) +{ + g_autoptr(xmlDoc) doc =3D NULL; + g_autoptr(xmlXPathContext) ctxt =3D NULL; + xmlNodePtr node; + + g_autofree char *xml =3D NULL; + + if (!(xml =3D virNetworkGetXMLDesc(net, 0))) + return NULL; + + if (!(doc =3D virXMLParseStringCtxt(xml, "(network_definition)", &ctxt= ))) + return NULL; + + if (!(node =3D virXPathNode("//metadata/*", ctxt))) + return NULL; + + return virXMLNodeToString(node->doc, node); +} + + +static void +metadataXMLConvertApostrophe(char *str) +{ + do { + if (*str =3D=3D '\"') + *str =3D '\''; + } while ((*++str) !=3D '\0'); +} + + +static bool +verifyMetadata(virNetworkPtr net, + const char *expectXML, + const char *expectAPI, + const char *uri) +{ + g_autofree char *metadataXML =3D NULL; + g_autofree char *metadataAPI =3D NULL; + + if (!expectAPI) { + if ((metadataAPI =3D virNetworkGetMetadata(net, + VIR_NETWORK_METADATA_ELEME= NT, + uri, 0))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "expected no metadata in API, but got:\n[%s]", + metadataAPI); + return false; + } + } else { + if (!(metadataAPI =3D virNetworkGetMetadata(net, + VIR_NETWORK_METADATA_ELEM= ENT, + uri, 0))) + return false; + + metadataXMLConvertApostrophe(metadataAPI); + + if (STRNEQ(metadataAPI, expectAPI)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "XML metadata in API doesn't match expected met= adata: " + "expected:\n[%s]\ngot:\n[%s]", + expectAPI, metadataAPI); + return false; + } + + } + + if (!expectXML) { + if ((metadataXML =3D getMetadataFromXML(net))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "expected no metadata in XML, but got:\n[%s]", + metadataXML); + return false; + } + } else { + if (!(metadataXML =3D getMetadataFromXML(net))) + return false; + + metadataXMLConvertApostrophe(metadataXML); + + if (STRNEQ(metadataXML, expectXML)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "XML in dump doesn't match expected metadata: " + "expected:\n[%s]\ngot:\n[%s]", + expectXML, metadataXML); + return false; + } + } + + return true; +} + + +struct metadataTest { + virConnectPtr conn; + virNetworkPtr net; + + const char *data; + const char *expect; + int type; + bool fail; +}; + + +static int +testAssignMetadata(const void *data) +{ + const struct metadataTest *test =3D data; + + if (virNetworkSetMetadata(test->net, VIR_NETWORK_METADATA_ELEMENT, + metadata1, "herp", "http://herp.derp/", 0) < = 0) + return -1; + + if (!verifyMetadata(test->net, metadata1_ns, metadata1, "http://herp.d= erp/")) + return -1; + + return 0; +} + +static int +testRewriteMetadata(const void *data) +{ + const struct metadataTest *test =3D data; + + if (virNetworkSetMetadata(test->net, VIR_NETWORK_METADATA_ELEMENT, + metadata2, "blurb", "http://herp.derp/", 0) <= 0) + return -1; + + if (!verifyMetadata(test->net, metadata2_ns, metadata2, "http://herp.d= erp/")) + return -1; + + return 0; +} + +static int +testEraseMetadata(const void *data) +{ + const struct metadataTest *test =3D data; + + if (virNetworkSetMetadata(test->net, VIR_NETWORK_METADATA_ELEMENT, + NULL, NULL, "http://herp.derp/", 0) < 0) + return -1; + + if (!verifyMetadata(test->net, NULL, NULL, "http://herp.derp/")) + return -1; + + return 0; +} + +static int +testTextMetadata(const void *data) +{ + const struct metadataTest *test =3D data; + g_autofree char *actual =3D NULL; + + if (virNetworkSetMetadata(test->net, test->type, test->data, NULL, NUL= L, 0) < 0) { + if (test->fail) + return 0; + return -1; + } + + actual =3D virNetworkGetMetadata(test->net, test->type, NULL, 0); + + if (STRNEQ_NULLABLE(test->expect, actual)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "expected metadata doesn't match actual: " + "expected:'%s'\ngot: '%s'", + NULLSTR(test->data), NULLSTR(actual)); + return -1; + } + + return 0; +} + +#define TEST_TEXT_METADATA(INDEX, TYPE, DATA, EXPECT, FAIL) \ + do { \ + test.type =3D VIR_NETWORK_METADATA_ ## TYPE; \ + test.data =3D DATA; \ + test.expect =3D EXPECT; \ + test.fail =3D FAIL; \ + \ + if (virTestRun("text metadata: " #TYPE " " INDEX " ", \ + testTextMetadata, &test) < 0) \ + ret =3D EXIT_FAILURE; \ + } while (0) + +#define TEST_TITLE(INDEX, DATA) \ + TEST_TEXT_METADATA(INDEX, TITLE, DATA, DATA, false) +#define TEST_TITLE_EXPECT(INDEX, DATA, EXPECT) \ + TEST_TEXT_METADATA(INDEX, TITLE, DATA, EXPECT, false) +#define TEST_TITLE_FAIL(INDEX, DATA) \ + TEST_TEXT_METADATA(INDEX, TITLE, DATA, DATA, true) +#define TEST_DESCR(INDEX, DATA) \ + TEST_TEXT_METADATA(INDEX, DESCRIPTION, DATA, DATA, false) +#define TEST_DESCR_EXPECT(INDEX, DATA, EXPECT) \ + TEST_TEXT_METADATA(INDEX, DESCRIPTION, DATA, EXPECT, false) + +static int +mymain(void) +{ + struct metadataTest test =3D { 0 }; + int ret =3D EXIT_SUCCESS; + + if (!(test.conn =3D virConnectOpen("test:///default"))) + return EXIT_FAILURE; + + if (!(test.net =3D virNetworkLookupByName(test.conn, "default"))) { + virConnectClose(test.conn); + return EXIT_FAILURE; + } + + virTestQuiesceLibvirtErrors(false); + + if (virTestRun("Assign metadata ", testAssignMetadata, &test) < 0) + ret =3D EXIT_FAILURE; + if (virTestRun("Rewrite Metadata ", testRewriteMetadata, &test) < 0) + ret =3D EXIT_FAILURE; + if (virTestRun("Erase metadata ", testEraseMetadata, &test) < 0) + ret =3D EXIT_FAILURE; + + TEST_TITLE("1", "qwert"); + TEST_TITLE("2", NULL); + TEST_TITLE("3", "blah"); + TEST_TITLE_FAIL("4", "qwe\nrt"); + TEST_TITLE_EXPECT("5", "", NULL); + TEST_TITLE_FAIL("6", "qwert\n"); + TEST_TITLE_FAIL("7", "\n"); + + TEST_DESCR("1", "qwert\nqwert"); + TEST_DESCR("2", NULL); + TEST_DESCR("3", "qwert"); + TEST_DESCR("4", "\n"); + TEST_DESCR_EXPECT("5", "", NULL); + + virNetworkFree(test.net); + virConnectClose(test.conn); + + return ret; +} + +VIR_TEST_MAIN(mymain) --=20 2.41.0