A straight-forward 1:1 mapping to the C API. Returns array in the
following format:
array (
0 =>
array (
'name' => 'vnet0',
'hwaddr' => '52:54:00:3a:cd:94',
'naddrs' => 1,
'addrs' =>
array (
'addr' => '192.168.254.224',
'prefix' => 24,
'type' => 0,
),
),
)
---
src/libvirt-domain.c | 55 ++++++++++++++++++++++++++++++++++++++++++++
src/libvirt-domain.h | 2 ++
src/libvirt-php.c | 9 ++++++++
3 files changed, 66 insertions(+)
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index 8b8bb45..877d311 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -1948,6 +1948,61 @@ PHP_FUNCTION(libvirt_domain_block_job_set_speed)
RETURN_TRUE;
}
+/*
+ * Function name: libvirt_domain_interface_addresses
+ * Since version: 0.5.5
+ * Description: Function is used to get network interface addresses for the domain
+ * Arguments: @domain [resource]: libvirt domain resource, e.g. from
libvirt_domain_lookup_by_*()
+ * @source [int]: one of the VIR_DOMAIN_ADDRESSES_SRC_* flags.
+ * Returns: interface array of a domain holding information about addresses
resembling the virDomainInterface structure, false on error
+ */
+PHP_FUNCTION(libvirt_domain_interface_addresses)
+{
+ php_libvirt_domain *domain = NULL;
+ zval *zdomain;
+ zend_long source = 0;
+
+ virDomainInterfacePtr *ifaces = NULL;
+ int count = 0;
+ size_t i, j;
+
+ GET_DOMAIN_FROM_ARGS("rl", &zdomain, &source);
+
+ if ((count = virDomainInterfaceAddresses(domain->domain, &ifaces, source, 0))
< 0) {
+ RETURN_FALSE
+ goto cleanup;
+ }
+
+ array_init(return_value);
+
+ for (i = 0; i < count; i++) {
+ zval *iface;
+ VIRT_ARRAY_INIT(iface);
+ VIRT_ADD_ASSOC_STRING(iface, "name", ifaces[i]->name);
+ VIRT_ADD_ASSOC_STRING(iface, "hwaddr", ifaces[i]->hwaddr);
+ add_assoc_long(iface, "naddrs", ifaces[i]->naddrs);
+
+ for (j = 0; j < ifaces[i]->naddrs; j++) {
+ zval *ifaddr;
+ VIRT_ARRAY_INIT(ifaddr);
+ VIRT_ADD_ASSOC_STRING(ifaddr, "addr",
ifaces[i]->addrs[j].addr);
+ add_assoc_long(ifaddr, "prefix", ifaces[i]->addrs[j].prefix);
+ add_assoc_long(ifaddr, "type", ifaces[i]->addrs[j].type);
+
+ add_assoc_zval(iface, "addrs", ifaddr);
+ }
+
+ add_index_zval(return_value, i, iface);
+ }
+
+ cleanup:
+ if (ifaces && count > 0) {
+ for (i = 0; i < count; i++)
+ virDomainInterfaceFree(ifaces[i]);
+ }
+ VIR_FREE(ifaces);
+}
+
/*
* Function name: libvirt_domain_interface_stats
* Since version: 0.4.1(-1)
diff --git a/src/libvirt-domain.h b/src/libvirt-domain.h
index dc0ab46..f15237f 100644
--- a/src/libvirt-domain.h
+++ b/src/libvirt-domain.h
@@ -89,6 +89,7 @@
PHP_FE(libvirt_domain_block_job_info, arginfo_libvirt_domain_block_job_info)
\
PHP_FE(libvirt_domain_block_job_abort, arginfo_libvirt_domain_block_job_abort)
\
PHP_FE(libvirt_domain_block_job_set_speed,
arginfo_libvirt_domain_block_job_set_speed) \
+ PHP_FE(libvirt_domain_interface_addresses,
arginfo_libvirt_domain_interface_addresses) \
PHP_FE(libvirt_domain_interface_stats, arginfo_libvirt_conn_path)
\
PHP_FE(libvirt_domain_get_connect, arginfo_libvirt_conn)
\
PHP_FE(libvirt_domain_migrate, arginfo_libvirt_domain_migrate)
\
@@ -179,6 +180,7 @@ PHP_FUNCTION(libvirt_domain_block_resize);
PHP_FUNCTION(libvirt_domain_block_job_info);
PHP_FUNCTION(libvirt_domain_block_job_abort);
PHP_FUNCTION(libvirt_domain_block_job_set_speed);
+PHP_FUNCTION(libvirt_domain_interface_addresses);
PHP_FUNCTION(libvirt_domain_interface_stats);
PHP_FUNCTION(libvirt_domain_get_connect);
PHP_FUNCTION(libvirt_domain_migrate);
diff --git a/src/libvirt-php.c b/src/libvirt-php.c
index cf8fd7f..04b7c07 100644
--- a/src/libvirt-php.c
+++ b/src/libvirt-php.c
@@ -248,6 +248,11 @@ ZEND_ARG_INFO(0, bandwidth)
ZEND_ARG_INFO(0, flags)
ZEND_END_ARG_INFO()
+ZEND_BEGIN_ARG_INFO_EX(arginfo_libvirt_domain_interface_addresses, 0, 0, 2)
+ZEND_ARG_INFO(0, domain)
+ZEND_ARG_INFO(0, source)
+ZEND_END_ARG_INFO()
+
ZEND_BEGIN_ARG_INFO_EX(arginfo_libvirt_domain_block_job_info, 0, 0, 2)
ZEND_ARG_INFO(0, dom)
ZEND_ARG_INFO(0, disk)
@@ -1476,6 +1481,10 @@ PHP_MINIT_FUNCTION(libvirt)
REGISTER_LONG_CONSTANT("VIR_DOMAIN_MEM_LIVE", VIR_DOMAIN_MEM_LIVE,
CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("VIR_DOMAIN_MEM_MAXIMUM", VIR_DOMAIN_MEM_MAXIMUM,
CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_LEASE",
VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_LEASE, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT",
VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_ARP",
VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_LEASE, CONST_CS | CONST_PERSISTENT);
+
/* Connect flags */
REGISTER_LONG_CONSTANT("VIR_CONNECT_FLAG_SOUNDHW_GET_NAMES",
CONNECT_FLAG_SOUNDHW_GET_NAMES, CONST_CS | CONST_PERSISTENT);
--
2.21.0