Introduces `virNWFilterGetMetadata()` to retrieve user defined
metadata fields, i.e `<title>`, `<description>` and `<metadata>`
Signed-off-by: K Shiva Kiran <shiva_kr@riseup.net>
---
include/libvirt/libvirt-nwfilter.h | 5 +++
src/driver-nwfilter.h | 6 +++
src/libvirt-nwfilter.c | 67 ++++++++++++++++++++++++++++++
src/libvirt_public.syms | 1 +
4 files changed, 79 insertions(+)
diff --git a/include/libvirt/libvirt-nwfilter.h b/include/libvirt/libvirt-nwfilter.h
index ecab779665..2eed685300 100644
--- a/include/libvirt/libvirt-nwfilter.h
+++ b/include/libvirt/libvirt-nwfilter.h
@@ -181,4 +181,9 @@ int virNWFilterSetMetadata(virNWFilterPtr nwfilter,
const char *uri,
unsigned int flags);
+char * virNWFilterGetMetadata(virNWFilterPtr nwfilter,
+ int type,
+ const char *uri,
+ unsigned int flags);
+
#endif /* LIBVIRT_NWFILTER_H */
diff --git a/src/driver-nwfilter.h b/src/driver-nwfilter.h
index 3426781fa0..8d38dbd23c 100644
--- a/src/driver-nwfilter.h
+++ b/src/driver-nwfilter.h
@@ -94,6 +94,11 @@ typedef int
const char *uri,
unsigned int flags);
+typedef char *
+(*virDrvNWFilterGetMetadata)(virNWFilterPtr nwfilter,
+ int type,
+ const char *uri,
+ unsigned int flags);
typedef struct _virNWFilterDriver virNWFilterDriver;
@@ -120,4 +125,5 @@ struct _virNWFilterDriver {
virDrvNWFilterBindingDelete nwfilterBindingDelete;
virDrvNWFilterBindingGetXMLDesc nwfilterBindingGetXMLDesc;
virDrvNWFilterSetMetadata nwfilterSetMetadata;
+ virDrvNWFilterGetMetadata nwfilterGetMetadata;
};
diff --git a/src/libvirt-nwfilter.c b/src/libvirt-nwfilter.c
index 0a0fbdd195..2340d87c4b 100644
--- a/src/libvirt-nwfilter.c
+++ b/src/libvirt-nwfilter.c
@@ -1007,3 +1007,70 @@ virNWFilterSetMetadata(virNWFilterPtr nwfilter,
virDispatchError(nwfilter->conn);
return -1;
}
+
+
+/**
+ * virNWFilterGetMetadata:
+ * @nwfilter: a network filter object
+ * @type: type of metadata, from virNWFilterMetadataType
+ * @uri: XML namespace identifier
+ * @flags: extra flags; not used yet, so callers should always pass 0
+ *
+ * Retrieves the appropriate network filter element given by @type.
+ * If VIR_NWFILTER_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 filter XML is not present, the resulting
+ * error will be VIR_ERR_NO_NWFILTER_METADATA. This method forms
+ * a shortcut for seeing information from virNWFilterSetMetadata()
+ * without having to go through virNWFilterGetXMLDesc().
+ *
+ * Returns the metadata string on success (caller must free),
+ * or NULL in case of failure.
+ *
+ * Since: 9.8.0
+ */
+char *
+virNWFilterGetMetadata(virNWFilterPtr nwfilter,
+ int type,
+ const char *uri,
+ unsigned int flags)
+{
+ virConnectPtr conn;
+
+ VIR_DEBUG("nwfilter=%p, type=%d, uri='%s', flags=0x%x",
+ nwfilter, type, NULLSTR(uri), flags);
+
+ virResetLastError();
+
+ virCheckNWFilterReturn(nwfilter, NULL);
+
+ switch (type) {
+ case VIR_NWFILTER_METADATA_TITLE:
+ case VIR_NWFILTER_METADATA_DESCRIPTION:
+ virCheckNullArgGoto(uri, error);
+ break;
+ case VIR_NWFILTER_METADATA_ELEMENT:
+ virCheckNonNullArgGoto(uri, error);
+ break;
+ default:
+ /* For future expansion */
+ break;
+ }
+
+ conn = nwfilter->conn;
+
+ if (conn->nwfilterDriver->nwfilterGetMetadata) {
+ char *ret;
+ if (!(ret = conn->nwfilterDriver->nwfilterGetMetadata(nwfilter, type, uri, flags)))
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(nwfilter->conn);
+ return NULL;
+}
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index 4e3b17b475..81cd9afc93 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -940,6 +940,7 @@ LIBVIRT_9.7.0 {
LIBVIRT_9.8.0 {
global:
+ virNWFilterGetMetadata;
virNWFilterSetMetadata;
} LIBVIRT_9.7.0;
--
2.42.0