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


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to