--- src/Makefile.am | 3 +- src/libvirt-network.c | 587 ++++++++++++++++++++++++++++++++++++++++++++++++ src/libvirt-network.h | 73 ++++++ src/libvirt-php.c | 610 +------------------------------------------------- src/libvirt-php.h | 24 +- 5 files changed, 665 insertions(+), 632 deletions(-) create mode 100644 src/libvirt-network.c create mode 100644 src/libvirt-network.h diff --git a/src/Makefile.am b/src/Makefile.am index b8eae3a..4ae01db 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -25,7 +25,8 @@ libvirt_php_la_SOURCES = \ libvirt-connection.c libvirt-connection.h \ libvirt-node.c libvirt-node.h \ libvirt-stream.c libvirt-stream.h \ - libvirt-domain.c libvirt-domain.h + libvirt-domain.c libvirt-domain.h \ + libvirt-network.c libvirt-network.h libvirt_php_la_CFLAGS = \ $(AM_CFLAGS) \ -DCOMPILE_DL_LIBVIRT=1 diff --git a/src/libvirt-network.c b/src/libvirt-network.c new file mode 100644 index 0000000..464b060 --- /dev/null +++ b/src/libvirt-network.c @@ -0,0 +1,587 @@ +/* + * libvirt-network.c: The PHP bindings to libvirt network API + * + * See COPYING for the license of this software + */ + +#include <libvirt/libvirt.h> + +#include "libvirt-php.h" +#include "libvirt-network.h" + +DEBUG_INIT("network"); + +void +php_libvirt_network_dtor(virt_resource *rsrc TSRMLS_DC) +{ + php_libvirt_network *network = (php_libvirt_network *)rsrc->ptr; + int rv = 0; + + if (network != NULL) { + if (network->network != NULL) { + if (!check_resource_allocation(network->conn->conn, INT_RESOURCE_NETWORK, network->network TSRMLS_CC)) { + network->network = NULL; + efree(network); + return; + } + rv = virNetworkFree(network->network); + if (rv != 0) { + DPRINTF("%s: virNetworkFree(%p) returned %d (%s)\n", __FUNCTION__, network->network, rv, LIBVIRT_G(last_error)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "virStorageVolFree failed with %i on destructor: %s", rv, LIBVIRT_G(last_error)); + } else { + DPRINTF("%s: virNetworkFree(%p) completed successfully\n", __FUNCTION__, network->network); + resource_change_counter(INT_RESOURCE_NETWORK, NULL, network->network, 0 TSRMLS_CC); + } + network->network = NULL; + } + efree(network); + } +} + +/* + * Function name: libvirt_network_define_xml + * Since version: 0.4.2 + * Description: Function is used to define a new virtual network based on the XML description + * Arguments: @res [resource]: libvirt connection resource + * @xml [string]: XML string definition of network to be defined + * Returns: libvirt network resource of newly defined network + */ +PHP_FUNCTION(libvirt_network_define_xml) +{ + php_libvirt_connection *conn = NULL; + php_libvirt_network *res_net = NULL; + virNetwork *net; + zval *zconn; + char *xml = NULL; + strsize_t xml_len; + + GET_CONNECTION_FROM_ARGS("rs", &zconn, &xml, &xml_len); + + if ((net = virNetworkDefineXML(conn->conn, xml)) == NULL) { + set_error_if_unset("Cannot define a new network" TSRMLS_CC); + RETURN_FALSE; + } + + res_net = (php_libvirt_network *)emalloc(sizeof(php_libvirt_network)); + res_net->network = net; + res_net->conn = conn; + + DPRINTF("%s: returning %p\n", PHPFUNC, res_net->network); + resource_change_counter(INT_RESOURCE_NETWORK, conn->conn, res_net->network, 1 TSRMLS_CC); + + VIRT_REGISTER_RESOURCE(res_net, le_libvirt_network); +} + +/* + * Function name: libvirt_network_get_xml_desc + * Since version: 0.4.1(-1) + * Description: Function is used to get the XML description for the network + * Arguments: @res [resource]: libvirt network resource + * @xpath [string]: optional xPath expression string to get just this entry, can be NULL + * Returns: network XML string or result of xPath expression + */ +PHP_FUNCTION(libvirt_network_get_xml_desc) +{ + php_libvirt_network *network; + zval *znetwork; + char *xml = NULL; + char *xpath = NULL; + char *tmp; + strsize_t xpath_len; + int retval = -1; + + GET_NETWORK_FROM_ARGS("r|s", &znetwork, &xpath, &xpath_len); + if (xpath_len < 1) + xpath = NULL; + + xml = virNetworkGetXMLDesc(network->network, 0); + + if (xml == NULL) { + set_error_if_unset("Cannot get network 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_network_undefine + * Since version: 0.4.2 + * Description: Function is used to undefine already defined network + * Arguments: @res [resource]: libvirt network resource + * Returns: TRUE for success, FALSE on error + */ +PHP_FUNCTION(libvirt_network_undefine) +{ + php_libvirt_network *network = NULL; + zval *znetwork; + + GET_NETWORK_FROM_ARGS("r", &znetwork); + + if (virNetworkUndefine(network->network) != 0) + RETURN_FALSE; + + RETURN_TRUE; +} + +/* + * Function name: libvirt_network_get + * Since version: 0.4.1(-1) + * Description: Function is used to get the network resource from name + * Arguments: @res [resource]: libvirt connection resource + * @name [string]: network name string + * Returns: libvirt network resource + */ +PHP_FUNCTION(libvirt_network_get) +{ + php_libvirt_connection *conn = NULL; + php_libvirt_network *res_net = NULL; + virNetwork *net; + zval *zconn; + char *name; + strsize_t name_len; + + GET_CONNECTION_FROM_ARGS("rs", &zconn, &name, &name_len); + + if ((net = virNetworkLookupByName(conn->conn, name)) == NULL) { + set_error_if_unset("Cannot get find requested network" TSRMLS_CC); + RETURN_FALSE; + } + + res_net = (php_libvirt_network *)emalloc(sizeof(php_libvirt_network)); + res_net->network = net; + res_net->conn = conn; + + DPRINTF("%s: returning %p\n", PHPFUNC, res_net->network); + resource_change_counter(INT_RESOURCE_NETWORK, conn->conn, res_net->network, 1 TSRMLS_CC); + + VIRT_REGISTER_RESOURCE(res_net, le_libvirt_network); +} + +/* + * Function name: libvirt_network_get_bridge + * Since version: 0.4.1(-1) + * Description: Function is used to get the bridge associated with the network + * Arguments: @res [resource]: libvirt network resource + * Returns: bridge name string + */ +PHP_FUNCTION(libvirt_network_get_bridge) +{ + php_libvirt_network *network; + zval *znetwork; + char *name; + + GET_NETWORK_FROM_ARGS("r", &znetwork); + + name = virNetworkGetBridgeName(network->network); + + if (name == NULL) { + set_error_if_unset("Cannot get network bridge name" TSRMLS_CC); + RETURN_FALSE; + } + + VIRT_RETVAL_STRING(name); + free(name); +} + +/* + * Function name: libvirt_network_get_active + * Since version: 0.4.1(-1) + * Description: Function is used to get the activity state of the network + * Arguments: @res [resource]: libvirt network resource + * Returns: 1 when active, 0 when inactive, FALSE on error + */ +PHP_FUNCTION(libvirt_network_get_active) +{ + php_libvirt_network *network; + zval *znetwork; + int res; + + GET_NETWORK_FROM_ARGS("r", &znetwork); + + res = virNetworkIsActive(network->network); + + if (res == -1) { + set_error_if_unset("Error getting virtual network state" TSRMLS_CC); + RETURN_FALSE; + } + + RETURN_LONG(res); +} + +/* + * Function name: libvirt_network_set_active + * Since version: 0.4.1(-1) + * Description: Function is used to set the activity state of the network + * Arguments: @res [resource]: libvirt network resource + * @flags [int]: active + * Returns: TRUE if success, FALSE on error + */ +PHP_FUNCTION(libvirt_network_set_active) +{ + php_libvirt_network *network; + zval *znetwork; + zend_long act = 0; + + DPRINTF("%s: Setting network activity...\n", PHPFUNC); + + GET_NETWORK_FROM_ARGS("rl", &znetwork, &act); + + if ((act != 0) && (act != 1)) { + set_error("Invalid network activity state" TSRMLS_CC); + RETURN_FALSE; + } + + DPRINTF("%s: %sabling network...\n", PHPFUNC, (act == 1) ? "En" : "Dis"); + + if (act == 1) { + if (virNetworkCreate(network->network) == 0) { + // Network is up and running + RETURN_TRUE; + } else { + // We don't have to set error since it's caught by libvirt error handler itself + RETURN_FALSE; + } + } + + if (virNetworkDestroy(network->network) == 0) { + // Network is down + RETURN_TRUE; + } else { + // Caught by libvirt error handler too + RETURN_FALSE; + } +} + +/* + * Function name: libvirt_network_get_information + * Since version: 0.4.1(-1) + * Description: Function is used to get the network information + * Arguments: @res [resource]: libvirt network resource + * Returns: network information array + */ +PHP_FUNCTION(libvirt_network_get_information) +{ + php_libvirt_network *network = NULL; + zval *znetwork; + int retval = 0; + char *xml = NULL; + char *name = NULL; + char *ipaddr = NULL; + char *netmask = NULL; + char *mode = NULL; + char *dev = NULL; + char *dhcp_start = NULL; + char *dhcp_end = NULL; + char fixedtemp[32] = { 0 }; + + GET_NETWORK_FROM_ARGS("r", &znetwork); + + xml = virNetworkGetXMLDesc(network->network, 0); + + if (xml == NULL) { + set_error_if_unset("Cannot get network XML" TSRMLS_CC); + RETURN_FALSE; + } + + array_init(return_value); + + /* Get name */ + name = get_string_from_xpath(xml, "//network/name", NULL, &retval); + if (name == NULL) { + set_error("Invalid XPath node for network name" TSRMLS_CC); + RETURN_FALSE; + } + + if (retval < 0) { + set_error("Cannot get XPath expression result for network name" TSRMLS_CC); + RETURN_FALSE; + } + + VIRT_ADD_ASSOC_STRING(return_value, "name", name); + + /* Get gateway IP address */ + ipaddr = get_string_from_xpath(xml, "//network/ip/@address", NULL, &retval); + if (ipaddr && retval > 0) + VIRT_ADD_ASSOC_STRING(return_value, "ip", ipaddr); + + /* Get netmask */ + netmask = get_string_from_xpath(xml, "//network/ip/@netmask", NULL, &retval); + if (netmask && retval > 0) { + int subnet_bits = get_subnet_bits(netmask); + VIRT_ADD_ASSOC_STRING(return_value, "netmask", netmask); + add_assoc_long(return_value, "netmask_bits", (long) subnet_bits); + + /* Format CIDR address representation */ + ipaddr[strlen(ipaddr) - 1] = ipaddr[strlen(ipaddr) - 1] - 1; + snprintf(fixedtemp, sizeof(fixedtemp), "%s/%d", ipaddr, subnet_bits); + VIRT_ADD_ASSOC_STRING(return_value, "ip_range", fixedtemp); + } + + /* Get forwarding settings */ + mode = get_string_from_xpath(xml, "//network/forward/@mode", NULL, &retval); + if (mode && retval > 0) + VIRT_ADD_ASSOC_STRING(return_value, "forwarding", mode); + + /* Get forwarding settings */ + dev = get_string_from_xpath(xml, "//network/forward/@dev", NULL, &retval); + if (dev && retval > 0) + VIRT_ADD_ASSOC_STRING(return_value, "forward_dev", dev); + + /* Get DHCP values */ + dhcp_start = get_string_from_xpath(xml, "//network/ip/dhcp/range/@start", NULL, &retval); + dhcp_end = get_string_from_xpath(xml, "//network/ip/dhcp/range/@end", NULL, &retval); + if (dhcp_start && dhcp_end && retval > 0) { + VIRT_ADD_ASSOC_STRING(return_value, "dhcp_start", dhcp_start); + VIRT_ADD_ASSOC_STRING(return_value, "dhcp_end", dhcp_end); + } + + free(dhcp_end); + free(dhcp_start); + free(dev); + free(mode); + free(netmask); + free(ipaddr); + free(name); + free(xml); +} + +/* + * Function name: libvirt_network_get_uuid_string + * Since version: 0.5.3 + * Description: Function is used to get network's UUID in string format + * Arguments: @res [resource]: libvirt network resource + * Returns: network UUID string or FALSE on failure + */ +PHP_FUNCTION(libvirt_network_get_uuid_string) +{ + php_libvirt_network *network = NULL; + zval *znetwork; + char *uuid = NULL; + int ret = -1; + + GET_NETWORK_FROM_ARGS("r", &znetwork); + + uuid = (char *) emalloc(VIR_UUID_STRING_BUFLEN); + ret = virNetworkGetUUIDString(network->network, uuid); + + DPRINTF("%s: virNetworkGetUUIDString(%p) returned %d (%s)\n", PHPFUNC, + network->network, ret, uuid); + + if (ret != 0) + RETURN_FALSE; + + VIRT_RETURN_STRING(uuid); + efree(uuid); +} + +/* + * Function name: libvirt_network_get_uuid + * Since version: 0.5.3 + * Descirption: Function is used to get network's UUID in binary format + * Arguments: @res [resource]: libvirt netowrk resource + * Returns: network UUID in binary format or FALSE on failure + */ +PHP_FUNCTION(libvirt_network_get_uuid) +{ + php_libvirt_network *network = NULL; + zval *znetwork; + char *uuid = NULL; + int ret = -1; + + GET_NETWORK_FROM_ARGS("r", &znetwork); + + uuid = (char *) emalloc(VIR_UUID_BUFLEN); + ret = virNetworkGetUUID(network->network, (unsigned char *)uuid); + + DPRINTF("%s: virNetworkGetUUID(%p, %p) returned %d\n", PHPFUNC, + network->network, uuid, ret); + + if (ret != 0) + RETURN_FALSE; + + VIRT_RETVAL_STRING(uuid); + efree(uuid); +} + +/* + * Function name: libvirt_network_get_name + * Since version: 0.5.3 + * Description: Function is used to get network's name + * Arguments: @res [resource]: libvirt network resource + * Returns: network name string or FALSE on failure + */ +PHP_FUNCTION(libvirt_network_get_name) +{ + php_libvirt_network *network = NULL; + zval *znetwork; + const char *name = NULL; + + GET_NETWORK_FROM_ARGS("r", &znetwork); + name = virNetworkGetName(network->network); + + DPRINTF("%s: virNetworkGetName(%p) returned %s\n", PHPFUNC, + network->network, name); + + if (name == NULL) + RETURN_FALSE; + + /* name should not be freed as its lifetime is the same as network resource */ + VIRT_RETURN_STRING(name); +} + +/* + * Function name: libvirt_network_get_autostart + * Since version: 0.5.4 + * Description: Function is getting the autostart value for the network + * Arguments: @res [resource]: libvirt network resource + * Returns: autostart value or -1 on error + */ +PHP_FUNCTION(libvirt_network_get_autostart) +{ + php_libvirt_network *network = NULL; + zval *znetwork; + int autostart; + + GET_NETWORK_FROM_ARGS("r", &znetwork); + + if (virNetworkGetAutostart(network->network, &autostart) != 0) + RETURN_LONG(-1); + + RETURN_LONG((long) autostart); +} + +/* + * Function name: libvirt_network_set_autostart + * Since version: 0.5.4 + * Description: Function is setting the autostart value for the network + * Arguments: @res [resource]: libvirt network resource + * @flags [int]: flag to enable/disable autostart + * Returns: TRUE on success, FALSE on error + */ +PHP_FUNCTION(libvirt_network_set_autostart) +{ + php_libvirt_network *network = NULL; + zval *znetwork; + zend_long autostart = 0; + + GET_NETWORK_FROM_ARGS("rl", &znetwork, &autostart); + + if (virNetworkSetAutostart(network->network, autostart) < 0) + RETURN_FALSE; + + RETURN_TRUE; +} + +/* + * Function name: libvirt_list_all_networks + * Since version: 0.5.3 + * Description: Function is used to list networks on the connection + * Arguments: @res [resource]: libvirt connection resource + * @flags [int]: optional flags to filter the results for a smaller list of targetted networks (bitwise-OR VIR_CONNECT_LIST_NETWORKS_* constants) + * Returns: libvirt network resources array for the connection + */ +PHP_FUNCTION(libvirt_list_all_networks) +{ + php_libvirt_connection *conn = NULL; + zval *zconn; + zend_long flags = VIR_CONNECT_LIST_NETWORKS_ACTIVE | + VIR_CONNECT_LIST_NETWORKS_INACTIVE; + int count = -1; + size_t i = 0; + virNetworkPtr *nets = NULL; + virNetworkPtr network = NULL; + php_libvirt_network *res_network; + + GET_CONNECTION_FROM_ARGS("r|l", &zconn, &flags); + + if ((count = virConnectListAllNetworks(conn->conn, &nets, flags)) < 0) + RETURN_FALSE; + + DPRINTF("%s: Found %d networks\n", PHPFUNC, count); + + array_init(return_value); + + for (i = 0; i < count; i++) { + network = nets[i]; + res_network = (php_libvirt_network *) emalloc(sizeof(php_libvirt_network)); + res_network->network = network; + res_network->conn = conn; + + VIRT_REGISTER_LIST_RESOURCE(network); + resource_change_counter(INT_RESOURCE_NETWORK, conn->conn, + res_network->network, 1 TSRMLS_CC); + } +} + +/* + * Function name: libvirt_list_networks + * Since version: 0.4.1(-1) + * Description: Function is used to list networks on the connection + * Arguments: @res [resource]: libvirt connection resource + * @flags [int]: flags whether to list active, inactive or all networks (VIR_NETWORKS_{ACTIVE|INACTIVE|ALL} constants) + * Returns: libvirt network names array for the connection + */ +PHP_FUNCTION(libvirt_list_networks) +{ + php_libvirt_connection *conn = NULL; + zval *zconn; + zend_long flags = VIR_NETWORKS_ACTIVE | VIR_NETWORKS_INACTIVE; + int count = -1; + int expectedcount = -1; + char **names; + int i, done = 0; + + GET_CONNECTION_FROM_ARGS("r|l", &zconn, &flags); + + array_init(return_value); + if (flags & VIR_NETWORKS_ACTIVE) { + if ((expectedcount = virConnectNumOfNetworks(conn->conn)) < 0) + RETURN_FALSE; + + names = (char **)emalloc(expectedcount*sizeof(char *)); + count = virConnectListNetworks(conn->conn, names, expectedcount); + if ((count != expectedcount) || (count < 0)) { + efree(names); + RETURN_FALSE; + } + + for (i = 0; i < count; i++) { + VIRT_ADD_NEXT_INDEX_STRING(return_value, names[i]); + free(names[i]); + } + + efree(names); + done++; + } + + if (flags & VIR_NETWORKS_INACTIVE) { + if ((expectedcount = virConnectNumOfDefinedNetworks(conn->conn)) < 0) + RETURN_FALSE; + names = (char **)emalloc(expectedcount*sizeof(char *)); + count = virConnectListDefinedNetworks(conn->conn, names, expectedcount); + if ((count != expectedcount) || (count < 0)) { + efree(names); + 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; +} diff --git a/src/libvirt-network.h b/src/libvirt-network.h new file mode 100644 index 0000000..604b803 --- /dev/null +++ b/src/libvirt-network.h @@ -0,0 +1,73 @@ +/* + * libvirt-network.h: The PHP bindings to libvirt network API + * + * See COPYING for the license of this software + */ + +#ifndef __LIBVIRT_NETWORK_H__ +# define __LIBVIRT_NETWORK_H__ + +# include "libvirt-connection.h" + +# define PHP_LIBVIRT_NETWORK_RES_NAME "Libvirt virtual network" +# define INT_RESOURCE_NETWORK 0x04 + +# define GET_NETWORK_FROM_ARGS(args, ...) \ + do { \ + reset_error(TSRMLS_C); \ + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \ + args, \ + __VA_ARGS__) == FAILURE) { \ + set_error("Invalid arguments" TSRMLS_CC); \ + RETURN_FALSE; \ + } \ + \ + VIRT_FETCH_RESOURCE(network, php_libvirt_network*, &znetwork, \ + PHP_LIBVIRT_NETWORK_RES_NAME, le_libvirt_network); \ + if (network == NULL || network->network == NULL) \ + RETURN_FALSE; \ + } while (0) \ + +# define PHP_FE_LIBVIRT_NETWORK \ + PHP_FE(libvirt_network_define_xml, arginfo_libvirt_conn_xml) \ + PHP_FE(libvirt_network_get_xml_desc, arginfo_libvirt_conn_xpath) \ + PHP_FE(libvirt_network_undefine, arginfo_libvirt_conn) \ + PHP_FE(libvirt_network_get, arginfo_libvirt_conn_name) \ + PHP_FE(libvirt_network_get_active, arginfo_libvirt_conn) \ + PHP_FE(libvirt_network_set_active, arginfo_libvirt_conn_flags) \ + PHP_FE(libvirt_network_get_bridge, arginfo_libvirt_conn) \ + PHP_FE(libvirt_network_get_information, arginfo_libvirt_conn) \ + PHP_FE(libvirt_network_get_uuid_string, arginfo_libvirt_conn) \ + PHP_FE(libvirt_network_get_uuid, arginfo_libvirt_conn) \ + PHP_FE(libvirt_network_get_name, arginfo_libvirt_conn) \ + PHP_FE(libvirt_network_get_autostart, arginfo_libvirt_conn) \ + PHP_FE(libvirt_network_set_autostart, arginfo_libvirt_conn_flags) \ + PHP_FE(libvirt_list_all_networks, arginfo_libvirt_conn_optflags) \ + PHP_FE(libvirt_list_networks, arginfo_libvirt_conn_optflags) + +int le_libvirt_network; + +typedef struct _php_libvirt_network { + virNetworkPtr network; + php_libvirt_connection* conn; +} php_libvirt_network; + +void php_libvirt_network_dtor(virt_resource *rsrc TSRMLS_DC); + +PHP_FUNCTION(libvirt_network_define_xml); +PHP_FUNCTION(libvirt_network_get_xml_desc); +PHP_FUNCTION(libvirt_network_undefine); +PHP_FUNCTION(libvirt_network_get); +PHP_FUNCTION(libvirt_network_get_active); +PHP_FUNCTION(libvirt_network_set_active); +PHP_FUNCTION(libvirt_network_get_bridge); +PHP_FUNCTION(libvirt_network_get_information); +PHP_FUNCTION(libvirt_network_get_uuid_string); +PHP_FUNCTION(libvirt_network_get_uuid); +PHP_FUNCTION(libvirt_network_get_name); +PHP_FUNCTION(libvirt_network_get_autostart); +PHP_FUNCTION(libvirt_network_set_autostart); +PHP_FUNCTION(libvirt_list_all_networks); +PHP_FUNCTION(libvirt_list_networks); + +#endif diff --git a/src/libvirt-php.c b/src/libvirt-php.c index 6faf915..e3e5554 100644 --- a/src/libvirt-php.c +++ b/src/libvirt-php.c @@ -23,6 +23,7 @@ #include "libvirt-node.h" #include "libvirt-stream.h" #include "libvirt-domain.h" +#include "libvirt-network.h" DEBUG_INIT("core"); @@ -38,7 +39,6 @@ const char *features_binaries[] = { NULL }; /* ZEND thread safe per request globals definition */ int le_libvirt_storagepool; int le_libvirt_volume; -int le_libvirt_network; int le_libvirt_nodedev; int le_libvirt_snapshot; int le_libvirt_nwfilter; @@ -516,20 +516,7 @@ static zend_function_entry libvirt_functions[] = { PHP_FE(libvirt_storagepool_build, arginfo_libvirt_conn) PHP_FE(libvirt_storagepool_delete, arginfo_libvirt_conn) /* Network functions */ - PHP_FE(libvirt_network_define_xml, arginfo_libvirt_conn_xml) - PHP_FE(libvirt_network_undefine, arginfo_libvirt_conn) - PHP_FE(libvirt_network_get, arginfo_libvirt_conn_name) - PHP_FE(libvirt_network_get_xml_desc, arginfo_libvirt_conn_xpath) - PHP_FE(libvirt_network_get_bridge, arginfo_libvirt_conn) - PHP_FE(libvirt_network_get_information, arginfo_libvirt_conn) - PHP_FE(libvirt_network_get_active, arginfo_libvirt_conn) - PHP_FE(libvirt_network_set_active, arginfo_libvirt_conn_flags) - PHP_FE(libvirt_network_get_uuid_string, arginfo_libvirt_conn) - PHP_FE(libvirt_network_get_uuid, arginfo_libvirt_conn) - PHP_FE(libvirt_network_get_name, arginfo_libvirt_conn) - PHP_FE(libvirt_network_get_autostart, arginfo_libvirt_conn) - PHP_FE(libvirt_network_set_autostart, arginfo_libvirt_conn_flags) - /* Node functions */ + PHP_FE_LIBVIRT_NETWORK PHP_FE_LIBVIRT_NODE /* Nodedev functions */ PHP_FE(libvirt_nodedev_get, arginfo_libvirt_conn) @@ -549,8 +536,6 @@ static zend_function_entry libvirt_functions[] = { /* List functions */ PHP_FE(libvirt_list_domain_snapshots, arginfo_libvirt_conn_optflags) PHP_FE(libvirt_list_nodedevs, arginfo_libvirt_conn_optcap) - PHP_FE(libvirt_list_all_networks, arginfo_libvirt_conn_optflags) - PHP_FE(libvirt_list_networks, arginfo_libvirt_conn_optflags) PHP_FE(libvirt_list_storagepools, arginfo_libvirt_conn) PHP_FE(libvirt_list_active_storagepools, arginfo_libvirt_conn) PHP_FE(libvirt_list_inactive_storagepools, arginfo_libvirt_conn) @@ -570,7 +555,6 @@ static zend_function_entry libvirt_functions[] = { PHP_FE_END }; - /* Zend module basic definition */ zend_module_entry libvirt_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 @@ -1292,33 +1276,6 @@ static void php_libvirt_volume_dtor(virt_resource *rsrc TSRMLS_DC) } } -/* Destructor for network resource */ -static void php_libvirt_network_dtor(virt_resource *rsrc TSRMLS_DC) -{ - php_libvirt_network *network = (php_libvirt_network *)rsrc->ptr; - int rv = 0; - - if (network != NULL) { - if (network->network != NULL) { - if (!check_resource_allocation(network->conn->conn, INT_RESOURCE_NETWORK, network->network TSRMLS_CC)) { - network->network = NULL; - efree(network); - return; - } - rv = virNetworkFree(network->network); - if (rv != 0) { - DPRINTF("%s: virNetworkFree(%p) returned %d (%s)\n", __FUNCTION__, network->network, rv, LIBVIRT_G(last_error)); - php_error_docref(NULL TSRMLS_CC, E_WARNING, "virStorageVolFree failed with %i on destructor: %s", rv, LIBVIRT_G(last_error)); - } else { - DPRINTF("%s: virNetworkFree(%p) completed successfully\n", __FUNCTION__, network->network); - resource_change_counter(INT_RESOURCE_NETWORK, NULL, network->network, 0 TSRMLS_CC); - } - network->network = NULL; - } - efree(network); - } -} - /* Destructor for nodedev resource */ static void php_libvirt_nodedev_dtor(virt_resource *rsrc TSRMLS_DC) { @@ -1726,19 +1683,6 @@ PHP_MSHUTDOWN_FUNCTION(libvirt) } /* Macros for obtaining resources from arguments */ -#define GET_NETWORK_FROM_ARGS(args, ...) \ - do { \ - reset_error(TSRMLS_C); \ - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, args, __VA_ARGS__) == FAILURE) { \ - set_error("Invalid arguments" TSRMLS_CC); \ - RETURN_FALSE; \ - } \ - \ - VIRT_FETCH_RESOURCE(network, php_libvirt_network*, &znetwork, PHP_LIBVIRT_NETWORK_RES_NAME, le_libvirt_network);\ - if ((network == NULL) || (network->network == NULL)) \ - RETURN_FALSE; \ - } while (0) \ - #define GET_NODEDEV_FROM_ARGS(args, ...) \ do { \ reset_error(TSRMLS_C); \ @@ -4053,111 +3997,6 @@ PHP_FUNCTION(libvirt_list_inactive_storagepools) } /* - * Function name: libvirt_list_all_networks - * Since version: 0.5.3 - * Description: Function is used to list networks on the connection - * Arguments: @res [resource]: libvirt connection resource - * @flags [int]: optional flags to filter the results for a smaller list of targetted networks (bitwise-OR VIR_CONNECT_LIST_NETWORKS_* constants) - * Returns: libvirt network resources array for the connection - */ -PHP_FUNCTION(libvirt_list_all_networks) -{ - php_libvirt_connection *conn = NULL; - zval *zconn; - zend_long flags = VIR_CONNECT_LIST_NETWORKS_ACTIVE | - VIR_CONNECT_LIST_NETWORKS_INACTIVE; - int count = -1; - size_t i = 0; - virNetworkPtr *nets = NULL; - virNetworkPtr network = NULL; - php_libvirt_network *res_network; - - GET_CONNECTION_FROM_ARGS("r|l", &zconn, &flags); - - if ((count = virConnectListAllNetworks(conn->conn, &nets, flags)) < 0) - RETURN_FALSE; - - DPRINTF("%s: Found %d networks\n", PHPFUNC, count); - - array_init(return_value); - - for (i = 0; i < count; i++) { - network = nets[i]; - res_network = (php_libvirt_network *) emalloc(sizeof(php_libvirt_network)); - res_network->network = network; - res_network->conn = conn; - - VIRT_REGISTER_LIST_RESOURCE(network); - resource_change_counter(INT_RESOURCE_NETWORK, conn->conn, - res_network->network, 1 TSRMLS_CC); - } -} - -/* - * Function name: libvirt_list_networks - * Since version: 0.4.1(-1) - * Description: Function is used to list networks on the connection - * Arguments: @res [resource]: libvirt connection resource - * @flags [int]: flags whether to list active, inactive or all networks (VIR_NETWORKS_{ACTIVE|INACTIVE|ALL} constants) - * Returns: libvirt network names array for the connection - */ -PHP_FUNCTION(libvirt_list_networks) -{ - php_libvirt_connection *conn = NULL; - zval *zconn; - zend_long flags = VIR_NETWORKS_ACTIVE | VIR_NETWORKS_INACTIVE; - int count = -1; - int expectedcount = -1; - char **names; - int i, done = 0; - - GET_CONNECTION_FROM_ARGS("r|l", &zconn, &flags); - - array_init(return_value); - if (flags & VIR_NETWORKS_ACTIVE) { - if ((expectedcount = virConnectNumOfNetworks(conn->conn)) < 0) - RETURN_FALSE; - - names = (char **)emalloc(expectedcount*sizeof(char *)); - count = virConnectListNetworks(conn->conn, names, expectedcount); - if ((count != expectedcount) || (count < 0)) { - efree(names); - RETURN_FALSE; - } - - for (i = 0; i < count; i++) { - VIRT_ADD_NEXT_INDEX_STRING(return_value, names[i]); - free(names[i]); - } - - efree(names); - done++; - } - - if (flags & VIR_NETWORKS_INACTIVE) { - if ((expectedcount = virConnectNumOfDefinedNetworks(conn->conn)) < 0) - RETURN_FALSE; - names = (char **)emalloc(expectedcount*sizeof(char *)); - count = virConnectListDefinedNetworks(conn->conn, names, expectedcount); - if ((count != expectedcount) || (count < 0)) { - efree(names); - 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; -} - -/* * Function name: libvirt_list_nodedevs * Since version: 0.4.1(-1) * Description: Function is used to list node devices on the connection @@ -4545,451 +4384,6 @@ PHP_FUNCTION(libvirt_nodedev_get_information) RETURN_FALSE; } -/* Network functions */ - -/* - * Function name: libvirt_network_define_xml - * Since version: 0.4.2 - * Description: Function is used to define a new virtual network based on the XML description - * Arguments: @res [resource]: libvirt connection resource - * @xml [string]: XML string definition of network to be defined - * Returns: libvirt network resource of newly defined network - */ -PHP_FUNCTION(libvirt_network_define_xml) -{ - php_libvirt_connection *conn = NULL; - php_libvirt_network *res_net = NULL; - virNetwork *net; - zval *zconn; - char *xml = NULL; - strsize_t xml_len; - - GET_CONNECTION_FROM_ARGS("rs", &zconn, &xml, &xml_len); - - if ((net = virNetworkDefineXML(conn->conn, xml)) == NULL) { - set_error_if_unset("Cannot define a new network" TSRMLS_CC); - RETURN_FALSE; - } - - res_net = (php_libvirt_network *)emalloc(sizeof(php_libvirt_network)); - res_net->network = net; - res_net->conn = conn; - - DPRINTF("%s: returning %p\n", PHPFUNC, res_net->network); - resource_change_counter(INT_RESOURCE_NETWORK, conn->conn, res_net->network, 1 TSRMLS_CC); - - VIRT_REGISTER_RESOURCE(res_net, le_libvirt_network); -} - -/* - * Function name: libvirt_network_undefine - * Since version: 0.4.2 - * Description: Function is used to undefine already defined network - * Arguments: @res [resource]: libvirt network resource - * Returns: TRUE for success, FALSE on error - */ -PHP_FUNCTION(libvirt_network_undefine) -{ - php_libvirt_network *network = NULL; - zval *znetwork; - - GET_NETWORK_FROM_ARGS("r", &znetwork); - - if (virNetworkUndefine(network->network) != 0) - RETURN_FALSE; - - RETURN_TRUE; -} - -/* - * Function name: libvirt_network_get - * Since version: 0.4.1(-1) - * Description: Function is used to get the network resource from name - * Arguments: @res [resource]: libvirt connection resource - * @name [string]: network name string - * Returns: libvirt network resource - */ -PHP_FUNCTION(libvirt_network_get) -{ - php_libvirt_connection *conn = NULL; - php_libvirt_network *res_net = NULL; - virNetwork *net; - zval *zconn; - char *name; - strsize_t name_len; - - GET_CONNECTION_FROM_ARGS("rs", &zconn, &name, &name_len); - - if ((net = virNetworkLookupByName(conn->conn, name)) == NULL) { - set_error_if_unset("Cannot get find requested network" TSRMLS_CC); - RETURN_FALSE; - } - - res_net = (php_libvirt_network *)emalloc(sizeof(php_libvirt_network)); - res_net->network = net; - res_net->conn = conn; - - DPRINTF("%s: returning %p\n", PHPFUNC, res_net->network); - resource_change_counter(INT_RESOURCE_NETWORK, conn->conn, res_net->network, 1 TSRMLS_CC); - - VIRT_REGISTER_RESOURCE(res_net, le_libvirt_network); -} - -/* - * Function name: libvirt_network_get_bridge - * Since version: 0.4.1(-1) - * Description: Function is used to get the bridge associated with the network - * Arguments: @res [resource]: libvirt network resource - * Returns: bridge name string - */ -PHP_FUNCTION(libvirt_network_get_bridge) -{ - php_libvirt_network *network; - zval *znetwork; - char *name; - - GET_NETWORK_FROM_ARGS("r", &znetwork); - - name = virNetworkGetBridgeName(network->network); - - if (name == NULL) { - set_error_if_unset("Cannot get network bridge name" TSRMLS_CC); - RETURN_FALSE; - } - - VIRT_RETVAL_STRING(name); - free(name); -} - -/* - * Function name: libvirt_network_get_active - * Since version: 0.4.1(-1) - * Description: Function is used to get the activity state of the network - * Arguments: @res [resource]: libvirt network resource - * Returns: 1 when active, 0 when inactive, FALSE on error - */ -PHP_FUNCTION(libvirt_network_get_active) -{ - php_libvirt_network *network; - zval *znetwork; - int res; - - GET_NETWORK_FROM_ARGS("r", &znetwork); - - res = virNetworkIsActive(network->network); - - if (res == -1) { - set_error_if_unset("Error getting virtual network state" TSRMLS_CC); - RETURN_FALSE; - } - - RETURN_LONG(res); -} - -/* - * Function name: libvirt_network_get_information - * Since version: 0.4.1(-1) - * Description: Function is used to get the network information - * Arguments: @res [resource]: libvirt network resource - * Returns: network information array - */ -PHP_FUNCTION(libvirt_network_get_information) -{ - php_libvirt_network *network = NULL; - zval *znetwork; - int retval = 0; - char *xml = NULL; - char *name = NULL; - char *ipaddr = NULL; - char *netmask = NULL; - char *mode = NULL; - char *dev = NULL; - char *dhcp_start = NULL; - char *dhcp_end = NULL; - char fixedtemp[32] = { 0 }; - - GET_NETWORK_FROM_ARGS("r", &znetwork); - - xml = virNetworkGetXMLDesc(network->network, 0); - - if (xml == NULL) { - set_error_if_unset("Cannot get network XML" TSRMLS_CC); - RETURN_FALSE; - } - - array_init(return_value); - - /* Get name */ - name = get_string_from_xpath(xml, "//network/name", NULL, &retval); - if (name == NULL) { - set_error("Invalid XPath node for network name" TSRMLS_CC); - RETURN_FALSE; - } - - if (retval < 0) { - set_error("Cannot get XPath expression result for network name" TSRMLS_CC); - RETURN_FALSE; - } - - VIRT_ADD_ASSOC_STRING(return_value, "name", name); - - /* Get gateway IP address */ - ipaddr = get_string_from_xpath(xml, "//network/ip/@address", NULL, &retval); - if (ipaddr && retval > 0) - VIRT_ADD_ASSOC_STRING(return_value, "ip", ipaddr); - - /* Get netmask */ - netmask = get_string_from_xpath(xml, "//network/ip/@netmask", NULL, &retval); - if (netmask && retval > 0) { - int subnet_bits = get_subnet_bits(netmask); - VIRT_ADD_ASSOC_STRING(return_value, "netmask", netmask); - add_assoc_long(return_value, "netmask_bits", (long) subnet_bits); - - /* Format CIDR address representation */ - ipaddr[strlen(ipaddr) - 1] = ipaddr[strlen(ipaddr) - 1] - 1; - snprintf(fixedtemp, sizeof(fixedtemp), "%s/%d", ipaddr, subnet_bits); - VIRT_ADD_ASSOC_STRING(return_value, "ip_range", fixedtemp); - } - - /* Get forwarding settings */ - mode = get_string_from_xpath(xml, "//network/forward/@mode", NULL, &retval); - if (mode && retval > 0) - VIRT_ADD_ASSOC_STRING(return_value, "forwarding", mode); - - /* Get forwarding settings */ - dev = get_string_from_xpath(xml, "//network/forward/@dev", NULL, &retval); - if (dev && retval > 0) - VIRT_ADD_ASSOC_STRING(return_value, "forward_dev", dev); - - /* Get DHCP values */ - dhcp_start = get_string_from_xpath(xml, "//network/ip/dhcp/range/@start", NULL, &retval); - dhcp_end = get_string_from_xpath(xml, "//network/ip/dhcp/range/@end", NULL, &retval); - if (dhcp_start && dhcp_end && retval > 0) { - VIRT_ADD_ASSOC_STRING(return_value, "dhcp_start", dhcp_start); - VIRT_ADD_ASSOC_STRING(return_value, "dhcp_end", dhcp_end); - } - - free(dhcp_end); - free(dhcp_start); - free(dev); - free(mode); - free(netmask); - free(ipaddr); - free(name); - free(xml); -} - -/* - * Function name: libvirt_network_set_active - * Since version: 0.4.1(-1) - * Description: Function is used to set the activity state of the network - * Arguments: @res [resource]: libvirt network resource - * @flags [int]: active - * Returns: TRUE if success, FALSE on error - */ -PHP_FUNCTION(libvirt_network_set_active) -{ - php_libvirt_network *network; - zval *znetwork; - zend_long act = 0; - - DPRINTF("%s: Setting network activity...\n", PHPFUNC); - - GET_NETWORK_FROM_ARGS("rl", &znetwork, &act); - - if ((act != 0) && (act != 1)) { - set_error("Invalid network activity state" TSRMLS_CC); - RETURN_FALSE; - } - - DPRINTF("%s: %sabling network...\n", PHPFUNC, (act == 1) ? "En" : "Dis"); - - if (act == 1) { - if (virNetworkCreate(network->network) == 0) { - // Network is up and running - RETURN_TRUE; - } else { - // We don't have to set error since it's caught by libvirt error handler itself - RETURN_FALSE; - } - } - - if (virNetworkDestroy(network->network) == 0) { - // Network is down - RETURN_TRUE; - } else { - // Caught by libvirt error handler too - RETURN_FALSE; - } -} - -/* - * Function name: libvirt_network_get_xml_desc - * Since version: 0.4.1(-1) - * Description: Function is used to get the XML description for the network - * Arguments: @res [resource]: libvirt network resource - * @xpath [string]: optional xPath expression string to get just this entry, can be NULL - * Returns: network XML string or result of xPath expression - */ -PHP_FUNCTION(libvirt_network_get_xml_desc) -{ - php_libvirt_network *network; - zval *znetwork; - char *xml = NULL; - char *xpath = NULL; - char *tmp; - strsize_t xpath_len; - int retval = -1; - - GET_NETWORK_FROM_ARGS("r|s", &znetwork, &xpath, &xpath_len); - if (xpath_len < 1) - xpath = NULL; - - xml = virNetworkGetXMLDesc(network->network, 0); - - if (xml == NULL) { - set_error_if_unset("Cannot get network 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_network_get_uuid_string - * Since version: 0.5.3 - * Description: Function is used to get network's UUID in string format - * Arguments: @res [resource]: libvirt network resource - * Returns: network UUID string or FALSE on failure - */ -PHP_FUNCTION(libvirt_network_get_uuid_string) -{ - php_libvirt_network *network = NULL; - zval *znetwork; - char *uuid = NULL; - int ret = -1; - - GET_NETWORK_FROM_ARGS("r", &znetwork); - - uuid = (char *) emalloc(VIR_UUID_STRING_BUFLEN); - ret = virNetworkGetUUIDString(network->network, uuid); - - DPRINTF("%s: virNetworkGetUUIDString(%p) returned %d (%s)\n", PHPFUNC, - network->network, ret, uuid); - - if (ret != 0) - RETURN_FALSE; - - VIRT_RETURN_STRING(uuid); - efree(uuid); -} - -/* - * Function name: libvirt_network_get_uuid - * Since version: 0.5.3 - * Descirption: Function is used to get network's UUID in binary format - * Arguments: @res [resource]: libvirt netowrk resource - * Returns: network UUID in binary format or FALSE on failure - */ -PHP_FUNCTION(libvirt_network_get_uuid) -{ - php_libvirt_network *network = NULL; - zval *znetwork; - char *uuid = NULL; - int ret = -1; - - GET_NETWORK_FROM_ARGS("r", &znetwork); - - uuid = (char *) emalloc(VIR_UUID_BUFLEN); - ret = virNetworkGetUUID(network->network, (unsigned char *)uuid); - - DPRINTF("%s: virNetworkGetUUID(%p, %p) returned %d\n", PHPFUNC, - network->network, uuid, ret); - - if (ret != 0) - RETURN_FALSE; - - VIRT_RETVAL_STRING(uuid); - efree(uuid); -} - -/* - * Function name: libvirt_network_get_name - * Since version: 0.5.3 - * Description: Function is used to get network's name - * Arguments: @res [resource]: libvirt network resource - * Returns: network name string or FALSE on failure - */ -PHP_FUNCTION(libvirt_network_get_name) -{ - php_libvirt_network *network = NULL; - zval *znetwork; - const char *name = NULL; - - GET_NETWORK_FROM_ARGS("r", &znetwork); - name = virNetworkGetName(network->network); - - DPRINTF("%s: virNetworkGetName(%p) returned %s\n", PHPFUNC, - network->network, name); - - if (name == NULL) - RETURN_FALSE; - - /* name should not be freed as its lifetime is the same as network resource */ - VIRT_RETURN_STRING(name); -} - -/* - * Function name: libvirt_network_get_autostart - * Since version: 0.5.4 - * Description: Function is getting the autostart value for the network - * Arguments: @res [resource]: libvirt network resource - * Returns: autostart value or -1 on error - */ -PHP_FUNCTION(libvirt_network_get_autostart) -{ - php_libvirt_network *network = NULL; - zval *znetwork; - int autostart; - - GET_NETWORK_FROM_ARGS("r", &znetwork); - - if (virNetworkGetAutostart(network->network, &autostart) != 0) - RETURN_LONG(-1); - - RETURN_LONG((long) autostart); -} - -/* - * Function name: libvirt_network_set_autostart - * Since version: 0.5.4 - * Description: Function is setting the autostart value for the network - * Arguments: @res [resource]: libvirt network resource - * @flags [int]: flag to enable/disable autostart - * Returns: TRUE on success, FALSE on error - */ -PHP_FUNCTION(libvirt_network_set_autostart) -{ - php_libvirt_network *network = NULL; - zval *znetwork; - zend_long autostart = 0; - - GET_NETWORK_FROM_ARGS("rl", &znetwork, &autostart); - - if (virNetworkSetAutostart(network->network, autostart) < 0) - RETURN_FALSE; - - RETURN_TRUE; -} - /* NWFilter functions */ /* diff --git a/src/libvirt-php.h b/src/libvirt-php.h index 0752c6e..8b6e9e4 100644 --- a/src/libvirt-php.h +++ b/src/libvirt-php.h @@ -108,7 +108,6 @@ typedef uint64_t arch_uint; #define PHP_LIBVIRT_WORLD_EXTNAME "libvirt" /* Internal resource identifier objects */ -#define INT_RESOURCE_NETWORK 0x04 #define INT_RESOURCE_NODEDEV 0x08 #define INT_RESOURCE_STORAGEPOOL 0x10 #define INT_RESOURCE_VOLUME 0x20 @@ -152,11 +151,6 @@ typedef struct _php_libvirt_snapshot { php_libvirt_domain* domain; } php_libvirt_snapshot; -typedef struct _php_libvirt_network { - virNetworkPtr network; - php_libvirt_connection* conn; -} php_libvirt_network; - typedef struct _php_libvirt_nodedev { virNodeDevicePtr device; php_libvirt_connection* conn; @@ -227,10 +221,10 @@ int streamSink(virStreamPtr st ATTRIBUTE_UNUSED, const char *bytes, size_t nbytes, void *opaque); const char *get_feature_binary(const char *name); long get_next_free_numeric_value(virDomainPtr domain, char *xpath); +int get_subnet_bits(char *ip); #define PHP_LIBVIRT_STORAGEPOOL_RES_NAME "Libvirt storagepool" #define PHP_LIBVIRT_VOLUME_RES_NAME "Libvirt volume" -#define PHP_LIBVIRT_NETWORK_RES_NAME "Libvirt virtual network" #define PHP_LIBVIRT_NODEDEV_RES_NAME "Libvirt node device" #define PHP_LIBVIRT_SNAPSHOT_RES_NAME "Libvirt domain snapshot" #define PHP_LIBVIRT_NWFILTER_RES_NAME "Libvirt nwfilter" @@ -282,20 +276,6 @@ PHP_FUNCTION(libvirt_storagepool_set_autostart); PHP_FUNCTION(libvirt_storagepool_get_autostart); PHP_FUNCTION(libvirt_storagepool_build); PHP_FUNCTION(libvirt_storagepool_delete); -/* Network functions */ -PHP_FUNCTION(libvirt_network_define_xml); -PHP_FUNCTION(libvirt_network_undefine); -PHP_FUNCTION(libvirt_network_get); -PHP_FUNCTION(libvirt_network_get_xml_desc); -PHP_FUNCTION(libvirt_network_get_bridge); -PHP_FUNCTION(libvirt_network_get_information); -PHP_FUNCTION(libvirt_network_get_active); -PHP_FUNCTION(libvirt_network_set_active); -PHP_FUNCTION(libvirt_network_get_uuid_string); -PHP_FUNCTION(libvirt_network_get_uuid); -PHP_FUNCTION(libvirt_network_get_name); -PHP_FUNCTION(libvirt_network_get_autostart); -PHP_FUNCTION(libvirt_network_set_autostart); /* Nodedev functions */ PHP_FUNCTION(libvirt_nodedev_get); PHP_FUNCTION(libvirt_nodedev_capabilities); @@ -313,8 +293,6 @@ 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_domain_snapshots); -- 2.13.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list