[libvirt] [libvirt-php PATCH 7/7] implement NWFilter API bindings.

Dawid Zamirski dzamirski at datto.com
Thu Jun 22 19:14:07 UTC 2017


adds the following functions:

* libvirt_nwfilter_define_xml
* libvirt_nwfilter_undefine
* libvirt_nwfilter_get_xml_desc
* libvirt_nwfilter_get_name
* libvirt_nwfilter_get_uuid
* libvirt_nwfilter_get_uuid_string
* libvirt_nwfilter_lookup_by_name
* libvirt_nwfilter_lookup_by_uuid
* libvirt_nwfilter_lookup_by_uuid_string
* libvirt_list_nwfilters
* libvirt_list_all_nwfilters
---
 src/libvirt-php.c | 390 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/libvirt-php.h |  12 ++
 2 files changed, 402 insertions(+)

diff --git a/src/libvirt-php.c b/src/libvirt-php.c
index 535d321..5893742 100644
--- a/src/libvirt-php.c
+++ b/src/libvirt-php.c
@@ -645,6 +645,16 @@ static zend_function_entry libvirt_functions[] = {
     PHP_FE(libvirt_nodedev_capabilities,         arginfo_libvirt_conn)
     PHP_FE(libvirt_nodedev_get_xml_desc,         arginfo_libvirt_conn_xpath)
     PHP_FE(libvirt_nodedev_get_information,      arginfo_libvirt_conn)
+    /* NWFilter functions */
+    PHP_FE(libvirt_nwfilter_define_xml,          arginfo_libvirt_conn_xml)
+    PHP_FE(libvirt_nwfilter_undefine,            arginfo_libvirt_conn)
+    PHP_FE(libvirt_nwfilter_get_xml_desc,        arginfo_libvirt_conn_xpath)
+    PHP_FE(libvirt_nwfilter_get_uuid_string,     arginfo_libvirt_conn)
+    PHP_FE(libvirt_nwfilter_get_uuid,            arginfo_libvirt_conn)
+    PHP_FE(libvirt_nwfilter_get_name,            arginfo_libvirt_conn)
+    PHP_FE(libvirt_nwfilter_lookup_by_name,      arginfo_libvirt_conn_name)
+    PHP_FE(libvirt_nwfilter_lookup_by_uuid_string, arginfo_libvirt_conn_uuid)
+    PHP_FE(libvirt_nwfilter_lookup_by_uuid,      arginfo_libvirt_conn_uuid)
     /* List functions */
     PHP_FE(libvirt_list_domains,                 arginfo_libvirt_conn)
     PHP_FE(libvirt_list_domain_snapshots,        arginfo_libvirt_conn_optflags)
@@ -659,6 +669,8 @@ static zend_function_entry libvirt_functions[] = {
     PHP_FE(libvirt_list_active_domains,          arginfo_libvirt_conn)
     PHP_FE(libvirt_list_active_domain_ids,       arginfo_libvirt_conn)
     PHP_FE(libvirt_list_inactive_domains,        arginfo_libvirt_conn)
+    PHP_FE(libvirt_list_all_nwfilters,           arginfo_libvirt_conn)
+    PHP_FE(libvirt_list_nwfilters,               arginfo_libvirt_conn)
     /* Version information and common function */
     PHP_FE(libvirt_version,                      arginfo_libvirt_opttype)
     PHP_FE(libvirt_check_version,                arginfo_libvirt_check_version)
@@ -9074,7 +9086,93 @@ PHP_FUNCTION(libvirt_list_nodedevs)
     efree(names);
 }
 
+
+/*
+ * Function name:   libvirt_list_all_nwfilters
+ * Since version:   0.5.4
+ * Description:     Function is used to list nwfilters on the connection
+ * Arguments:       @res [resource]: libvirt connection resource
+ * Returns:         libvirt nwfilter resources array for the connection
+ */
+PHP_FUNCTION(libvirt_list_all_nwfilters)
+{
+    php_libvirt_nwfilter *res_nwfilter;
+    php_libvirt_connection *conn = NULL;
+    virNWFilterPtr *filters = NULL;
+    virNWFilterPtr nwfilter = NULL;
+    zval *zconn;
+    int count = -1;
+    size_t i = 0;
+
+    GET_CONNECTION_FROM_ARGS("r", &zconn);
+
+    /* in current libvirt version, flags are not used for this, so passing 0 */
+    if ((count = virConnectListAllNWFilters(conn->conn, &filters, 0)) < 0)
+        RETURN_FALSE;
+
+    DPRINTF("%s: Found %d nwfilters\n", PHPFUNC, count);
+
+    array_init(return_value);
+
+    for (i = 0; i < count; i++) {
+        nwfilter = filters[i];
+        res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
+        res_nwfilter->nwfilter = nwfilter;
+        res_nwfilter->conn = conn;
+
+        resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
+                                res_nwfilter->nwfilter, 1 TSRMLS_CC);
+        VIRT_REGISTER_LIST_RESOURCE(nwfilter);
+    }
+}
+
+/*
+ * Function name:   libvirt_list_nwfilters
+ * Since version:   0.5.4
+ * Description:     Function is used to list nwfilters on the connection
+ * Arguments:       @res [resource]: libvirt connection resource
+ * Returns:         libvirt nwfilter names array for the connection
+ */
+PHP_FUNCTION(libvirt_list_nwfilters)
+{
+    php_libvirt_connection *conn = NULL;
+    zval *zconn;
+    int count = -1;
+    int expectedcount = -1;
+    char **names;
+    int i, done = 0;
+
+    GET_CONNECTION_FROM_ARGS("r", &zconn);
+
+    array_init(return_value);
+
+    if ((expectedcount = virConnectNumOfNWFilters(conn->conn)) < 0)
+        RETURN_FALSE;
+
+    names = (char **) emalloc(expectedcount * sizeof(char *));
+    count = virConnectListNWFilters(conn->conn, names, expectedcount);
+
+    if (count != expectedcount || count < 0) {
+        efree(names);
+        DPRINTF("%s: virConnectListNWFilters returned %d filters, while %d was "
+                "expected\n", PHPFUNC, count, expectedcount);
+        RETURN_FALSE;
+    }
+
+    for (i = 0; i < count; i++) {
+        VIRT_ADD_NEXT_INDEX_STRING(return_value,  names[i]);
+        free(names[i]);
+    }
+
+    efree(names);
+    done++;
+
+
+    if (!done)
+        RETURN_FALSE;
+}
 /* Nodedev functions */
+
 /*
  * Function name:   libvirt_nodedev_get
  * Since version:   0.4.1(-1)
@@ -9782,6 +9880,298 @@ PHP_FUNCTION(libvirt_network_set_autostart)
     RETURN_TRUE;
 }
 
+/* NWFilter functions */
+
+/*
+ * Function name:   libvirt_nwfilter_define_xml
+ * Since version:   0.5.4
+ * Description:     Function is used to define a new nwfilter based on the XML description
+ * Arguments:       @res [resource]: libvirt connection resource
+ *                  @xml [string]: XML string definition of nwfilter to be defined
+ * Returns:         libvirt nwfilter resource of newly defined nwfilter
+ */
+PHP_FUNCTION(libvirt_nwfilter_define_xml)
+{
+    php_libvirt_connection *conn = NULL;
+    php_libvirt_nwfilter *res_nwfilter = NULL;
+    virNWFilter *nwfilter;
+    zval *zconn;
+    char *xml = NULL;
+    strsize_t xml_len;
+
+    GET_CONNECTION_FROM_ARGS("rs", &zconn, &xml, &xml_len);
+
+    if ((nwfilter = virNWFilterDefineXML(conn->conn, xml)) == NULL) {
+        set_error_if_unset("Cannot define a new NWFilter" TSRMLS_CC);
+        RETURN_FALSE;
+    }
+
+    res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
+    res_nwfilter->nwfilter = nwfilter;
+    res_nwfilter->conn = conn;
+
+    resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
+                            res_nwfilter->nwfilter, 1 TSRMLS_CC);
+
+    VIRT_REGISTER_RESOURCE(res_nwfilter, le_libvirt_nwfilter);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_undefine
+ * Since version:   0.5.4
+ * Description:     Function is used to undefine already defined nwfilter
+ * Arguments:       @res [resource]: libvirt nwfilter resource
+ * Returns:         TRUE for success, FALSE on error
+ */
+PHP_FUNCTION(libvirt_nwfilter_undefine)
+{
+    php_libvirt_nwfilter *nwfilter = NULL;
+    zval *znwfilter;
+
+    GET_NWFILTER_FROM_ARGS("r", &znwfilter);
+
+    if (virNWFilterUndefine(nwfilter->nwfilter) != 0)
+        RETURN_FALSE;
+
+    RETURN_TRUE;
+}
+
+/*
+ * Function name:   libvirt_nwfilter_get_xml_desc
+ * Since version:   0.5.4
+ * Description:     Function is used to get the XML description for the nwfilter
+ * Arguments:       @res [resource]: libvirt nwfilter resource
+ *                  @xpath [string]: optional xPath expression string to get just this entry, can be NULL
+ * Returns:         nwfilter XML string or result of xPath expression
+ */
+PHP_FUNCTION(libvirt_nwfilter_get_xml_desc)
+{
+    php_libvirt_nwfilter *nwfilter = NULL;
+    zval *znwfilter;
+    char *xml = NULL;
+    char *xpath = NULL;
+    char *tmp;
+    strsize_t xpath_len;
+    int retval = -1;
+
+    GET_NWFILTER_FROM_ARGS("r|s", &znwfilter, &xpath, &xpath_len);
+
+    if (xpath_len < 1)
+        xpath = NULL;
+
+    xml = virNWFilterGetXMLDesc(nwfilter->nwfilter, 0);
+
+    if (xml == NULL) {
+        set_error_if_unset("Cannot get nwfilter XML" TSRMLS_CC);
+        RETURN_FALSE;
+    }
+
+    tmp = get_string_from_xpath(xml, xpath, NULL, &retval);
+
+    if (tmp == NULL || retval < 0)
+        VIRT_RETVAL_STRING(xml);
+    else
+        VIRT_RETVAL_STRING(tmp);
+
+    free(xml);
+    free(tmp);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_get_uuid_string
+ * Since version:   0.5.4
+ * Description:     Function is used to get nwfilter's UUID in string format
+ * Arguments:       @res [resource]: libvirt nwfilter resource
+ * Returns:         nwfilter UUID string or FALSE on failure
+ */
+PHP_FUNCTION(libvirt_nwfilter_get_uuid_string)
+{
+    php_libvirt_nwfilter *nwfilter = NULL;
+    zval *znwfilter;
+    char *uuid = NULL;
+    int ret = -1;
+
+    GET_NWFILTER_FROM_ARGS("r", &znwfilter);
+
+    uuid = (char *) emalloc(VIR_UUID_STRING_BUFLEN);
+    ret = virNWFilterGetUUIDString(nwfilter->nwfilter, uuid);
+
+    DPRINTF("%s: virNWFilterGetUUIDString(%p) returned %d (%s)\n", PHPFUNC,
+            nwfilter->nwfilter, ret, uuid);
+
+    if (ret != 0)
+        RETURN_FALSE;
+
+    VIRT_RETURN_STRING(uuid);
+    efree(uuid);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_get_uuid
+ * Since version:   0.5.3
+ * Descirption:     Function is used to get nwfilter's UUID in binary format
+ * Arguments:       @res [resource]: libvirt netowrk resource
+ * Returns:         nwfilter UUID in binary format or FALSE on failure
+ */
+PHP_FUNCTION(libvirt_nwfilter_get_uuid)
+{
+    php_libvirt_nwfilter *nwfilter = NULL;
+    zval *znwfilter;
+    char *uuid = NULL;
+    int ret = -1;
+
+    GET_NWFILTER_FROM_ARGS("r", &znwfilter);
+
+    uuid = (char *) emalloc(VIR_UUID_BUFLEN);
+    ret = virNWFilterGetUUID(nwfilter->nwfilter, (unsigned char *) uuid);
+
+    DPRINTF("%s: virNWFilterUUID(%p, %p) returned %d\n", PHPFUNC,
+            nwfilter->nwfilter, uuid, ret);
+
+    if (ret != 0)
+        RETURN_FALSE;
+
+    VIRT_RETVAL_STRING(uuid);
+    efree(uuid);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_get_name
+ * Since version:   0.5.4
+ * Description:     Function is used to get nwfilter's name
+ * Arguments:       @res [resource]: libvirt nwfilter resource
+ * Returns:         nwfilter name string or FALSE on failure
+ */
+PHP_FUNCTION(libvirt_nwfilter_get_name)
+{
+    php_libvirt_nwfilter *nwfilter = NULL;
+    zval *znwfilter;
+    const char *name = NULL;
+
+    GET_NWFILTER_FROM_ARGS("r", &znwfilter);
+    name = virNWFilterGetName(nwfilter->nwfilter);
+
+    DPRINTF("%s: virNWFilterGetName(%p) returned %s\n", PHPFUNC,
+            nwfilter->nwfilter, name);
+
+    if (name == NULL)
+        RETURN_FALSE;
+
+    /* name should not be freed as its lifetime is the same as nwfilter resource */
+    VIRT_RETURN_STRING(name);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_lookup_by_name
+ * Since version:   0.5.4
+ * Description:     This functions is used to lookup for the nwfilter by it's name
+ * Arguments:       @res [resource]: libvirt connection resource
+ *                  @name [string]: name of the nwfilter to get the resource
+ * Returns:         libvirt nwfilter resource
+ */
+PHP_FUNCTION(libvirt_nwfilter_lookup_by_name)
+{
+    php_libvirt_nwfilter *res_nwfilter = NULL;
+    php_libvirt_connection *conn = NULL;
+    virNWFilterPtr nwfilter = NULL;
+    zval *zconn;
+    strsize_t name_len;
+    char *name = NULL;
+
+    GET_CONNECTION_FROM_ARGS("rs", &zconn, &name, &name_len);
+
+    if (name == NULL || name_len < 1)
+        RETURN_FALSE;
+
+    nwfilter = virNWFilterLookupByName(conn->conn, name);
+
+    if (nwfilter == NULL)
+        RETURN_FALSE;
+
+    res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
+    res_nwfilter->conn = conn;
+    res_nwfilter->nwfilter = nwfilter;
+
+    resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
+                            res_nwfilter->nwfilter, 1 TSRMLS_CC);
+
+    VIRT_REGISTER_RESOURCE(res_nwfilter, le_libvirt_nwfilter);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_lookup_by_uuid_string
+ * Since version:   0.5.4
+ * Description:     Function is used to lookup for nwfilter identified by UUID string
+ * Arguments:       @res [resource]: libvirt connection resource
+ *                  @uuid [string]: UUID string to look for nwfilter
+ * Returns:         libvirt nwfilter resource
+ */
+PHP_FUNCTION(libvirt_nwfilter_lookup_by_uuid_string)
+{
+    php_libvirt_nwfilter *res_nwfilter = NULL;
+    php_libvirt_connection *conn = NULL;
+    virNWFilterPtr nwfilter = NULL;
+    zval *zconn;
+    char *uuid = NULL;
+    strsize_t uuid_len;
+
+    GET_CONNECTION_FROM_ARGS("rs", &zconn, &uuid, &uuid_len);
+
+    if (uuid == NULL || uuid_len < 1)
+        RETURN_FALSE;
+
+    nwfilter = virNWFilterLookupByUUIDString(conn->conn, uuid);
+
+    if (nwfilter == NULL)
+        RETURN_FALSE;
+
+    res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
+    res_nwfilter->conn = conn;
+    res_nwfilter->nwfilter = nwfilter;
+
+    resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
+                            res_nwfilter->nwfilter, 1 TSRMLS_CC);
+
+    VIRT_REGISTER_RESOURCE(res_nwfilter, le_libvirt_nwfilter);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_lookup_by_uuid
+ * Since version:   0.5.4
+ * Description:     Function is used to lookup for nwfilter by it's UUID in the binary format
+ * Arguments:       @res [resource]: libvirt connection resource from libvirt_connect()
+ *                  @uuid [string]: binary defined UUID to look for
+ * Returns:         libvirt nwfilter resource
+ */
+PHP_FUNCTION(libvirt_nwfilter_lookup_by_uuid)
+{
+    php_libvirt_nwfilter *res_nwfilter = NULL;
+    php_libvirt_connection *conn = NULL;
+    virNWFilterPtr nwfilter = NULL;
+    zval *zconn;
+    strsize_t uuid_len;
+    unsigned char *uuid = NULL;
+
+    GET_CONNECTION_FROM_ARGS("rs", &zconn, &uuid, &uuid_len);
+
+    if ((uuid == NULL) || (uuid_len < 1))
+        RETURN_FALSE;
+
+    nwfilter = virNWFilterLookupByUUID(conn->conn, uuid);
+
+    if (nwfilter == NULL)
+        RETURN_FALSE;
+
+    res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
+    res_nwfilter->conn = conn;
+    res_nwfilter->nwfilter = nwfilter;
+
+    resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
+                            res_nwfilter->nwfilter, 1 TSRMLS_CC);
+
+    VIRT_REGISTER_RESOURCE(res_nwfilter, le_libvirt_nwfilter);
+}
+
 /*
  * Function name:   libvirt_version
  * Since version:   0.4.1(-1)
diff --git a/src/libvirt-php.h b/src/libvirt-php.h
index 2e7a3ca..7962e33 100644
--- a/src/libvirt-php.h
+++ b/src/libvirt-php.h
@@ -558,10 +558,22 @@ PHP_FUNCTION(libvirt_nodedev_get);
 PHP_FUNCTION(libvirt_nodedev_capabilities);
 PHP_FUNCTION(libvirt_nodedev_get_xml_desc);
 PHP_FUNCTION(libvirt_nodedev_get_information);
+/* NWFilter functions */
+PHP_FUNCTION(libvirt_nwfilter_define_xml);
+PHP_FUNCTION(libvirt_nwfilter_undefine);
+PHP_FUNCTION(libvirt_nwfilter_get_xml_desc);
+PHP_FUNCTION(libvirt_nwfilter_get_name);
+PHP_FUNCTION(libvirt_nwfilter_get_uuid_string);
+PHP_FUNCTION(libvirt_nwfilter_get_uuid);
+PHP_FUNCTION(libvirt_nwfilter_lookup_by_name);
+PHP_FUNCTION(libvirt_nwfilter_lookup_by_uuid_string);
+PHP_FUNCTION(libvirt_nwfilter_lookup_by_uuid);
 /* Listing functions */
 PHP_FUNCTION(libvirt_list_nodedevs);
 PHP_FUNCTION(libvirt_list_all_networks);
 PHP_FUNCTION(libvirt_list_networks);
+PHP_FUNCTION(libvirt_list_all_nwfilters);
+PHP_FUNCTION(libvirt_list_nwfilters);
 PHP_FUNCTION(libvirt_list_domains);
 PHP_FUNCTION(libvirt_list_domain_snapshots);
 PHP_FUNCTION(libvirt_list_domain_resources);
-- 
2.13.0




More information about the libvir-list mailing list