diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in index e34438cda0d9236d78b6b7b1e805cb21c5d8b9ba..fcef461a1b94808618131986b4bf9c855141d866 100644 --- a/include/libvirt/libvirt.h.in +++ b/include/libvirt/libvirt.h.in @@ -1540,6 +1540,8 @@ int virDomainSetMemoryFlags (virDomainPtr domain, int virDomainGetMaxVcpus (virDomainPtr domain); int virDomainGetSecurityLabel (virDomainPtr domain, virSecurityLabelPtr seclabel); +char * virDomainGetHostname (virDomainPtr domain, + unsigned int flags); typedef enum { VIR_DOMAIN_METADATA_DESCRIPTION = 0, /* Operate on */ diff --git a/src/driver.h b/src/driver.h index b3c1740a5ec561ba850c01b8cfdc43f5d9947b15..46d98467b01ec6e0e89fc9022fb72b433883557e 100644 --- a/src/driver.h +++ b/src/driver.h @@ -142,6 +142,11 @@ typedef int unsigned int flags); typedef char * (*virDrvDomainGetOSType) (virDomainPtr domain); + +typedef char * + (*virDrvDomainGetHostname) (virDomainPtr domain, + unsigned int flags); + typedef unsigned long long (*virDrvDomainGetMaxMemory) (virDomainPtr domain); typedef int @@ -904,6 +909,7 @@ struct _virDriver { virDrvDomainDestroy domainDestroy; virDrvDomainDestroyFlags domainDestroyFlags; virDrvDomainGetOSType domainGetOSType; + virDrvDomainGetHostname domainGetHostname; virDrvDomainGetMaxMemory domainGetMaxMemory; virDrvDomainSetMaxMemory domainSetMaxMemory; virDrvDomainSetMemory domainSetMemory; diff --git a/src/libvirt.c b/src/libvirt.c index df78e8aca70413c699536f306996ace287041a4a..8315b4fca96ec8b3d9166ab447d89d9a6e2ebec2 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -18977,3 +18977,48 @@ error: virDispatchError(dom->conn); return -1; } + +/** + * virDomainGetHostname: + * @domain: a domain object + * @flags: extra flags; not used yet, so callers should always pass 0 + * + * Get the hostname for that domain. + * + * Dependent on hypervisor used, this may require a guest agent to be + * available. + * + * Returns the hostname which must be freed by the caller, or + * NULL if there was an error. + */ +char * +virDomainGetHostname(virDomainPtr domain, unsigned int flags) +{ + virConnectPtr conn; + + VIR_DOMAIN_DEBUG(domain); + + virResetLastError(); + + if (!VIR_IS_CONNECTED_DOMAIN(domain)) { + virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__); + virDispatchError(NULL); + return NULL; + } + + conn = domain->conn; + + if (conn->driver->domainGetHostname) { + char *ret; + ret = conn->driver->domainGetHostname (domain, flags); + if (!ret) + goto error; + return ret; + } + + virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__); + +error: + virDispatchError(domain->conn); + return NULL; +} diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms index 2913a819095a092c3d51561d1456a2aac380d5e8..1a8e58aed280d86005b9a4dc231c108810192a67 100644 --- a/src/libvirt_public.syms +++ b/src/libvirt_public.syms @@ -544,4 +544,9 @@ LIBVIRT_0.9.13 { virDomainSnapshotRef; } LIBVIRT_0.9.11; +LIBVIRT_0.9.14 { + global: + virDomainGetHostname; +} LIBVIRT_0.9.13; + # .... define new API here using predicted next version number ....