diff --git a/AUTHORS b/AUTHORS index 410def36a4..ccca654506 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1 +1,2 @@ Daniel Veillard or +Karel Zak diff --git a/ChangeLog b/ChangeLog index 45c934da3d..61601bc1ba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,14 @@ +Fri Dec 16 01:43:18 CET 2005 Karel Zak + + * include/libvir.h.in: add missing declaration of virDomainGetXMLDesc() + * include/libvir.h.in src/libvir.c src/virsh src/libvir_sym.version: add + virDomainGetOSType() + * src/internal.h src/libvir.c src/xml.c: add internal function virDomainGetVM(), + move virDomainGetVMInfo() from src/xml.c + Thu Dec 15 17:56:27 CET 2005 Karel Zak * src/virsh.c: remove --id / --name options - * include/libvir.h: add missing declaration of virDomainGetXMLDesc() - Wed Dec 14 16:28:24 CET 2005 Daniel Veillard diff --git a/include/libvir.h.in b/include/libvir.h.in index ce1347bc7f..f560e9db35 100644 --- a/include/libvir.h.in +++ b/include/libvir.h.in @@ -180,9 +180,14 @@ int virDomainGetInfo (virDomainPtr domain, */ const char * virDomainGetName (virDomainPtr domain); unsigned int virDomainGetID (virDomainPtr domain); +char * virDomainGetOSType (virDomainPtr domain); unsigned long virDomainGetMaxMemory (virDomainPtr domain); int virDomainSetMaxMemory (virDomainPtr domain, unsigned long memory); +/* + * XML domain description + */ +char * virDomainGetXMLDesc (virDomainPtr domain, int flags); #ifdef __cplusplus } diff --git a/src/internal.h b/src/internal.h index af3963805c..a4c1d14889 100644 --- a/src/internal.h +++ b/src/internal.h @@ -84,6 +84,14 @@ struct _virDomain { int handle; /* internal handle for the dmonain ID */ }; +/* + * Internal routines + */ +char * virDomainGetVM (virDomainPtr domain); +char * virDomainGetVMInfo (virDomainPtr domain, + const char *vm, + const char *name); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/src/libvir.c b/src/libvir.c index 4e50e7e460..937468b0da 100644 --- a/src/libvir.c +++ b/src/libvir.c @@ -466,6 +466,83 @@ done: return(ret); } + +/** + * virDomainGetVM: + * @domain: a domain object + * + * Internal API extracting a xenstore vm path. + * + * Returns the new string or NULL in case of error + */ +char * +virDomainGetVM(virDomainPtr domain) +{ + struct xs_transaction_handle* t; + char *vm; + char query[200]; + unsigned int len; + + if ((domain == NULL) || (domain->magic != VIR_DOMAIN_MAGIC)) + return(NULL); + if ((domain->conn == NULL) || (domain->conn->magic != VIR_CONNECT_MAGIC)) + return(NULL); + + t = xs_transaction_start(domain->conn->xshandle); + if (t == NULL) + return(NULL); + + snprintf(query, 199, "/local/domain/%d/vm", + virDomainGetID(domain)); + query[199] = 0; + + vm = xs_read(domain->conn->xshandle, t, &query[0], &len); + + if (t != NULL) + xs_transaction_end(domain->conn->xshandle, t, 0); + + return(vm); +} + +/** + * virDomainGetVMInfo: + * @domain: a domain object + * @vm: the xenstore vm path + * @name: the value's path + * + * Internal API extracting one information the device used + * by the domain from xensttore + * + * Returns the new string or NULL in case of error + */ +char * +virDomainGetVMInfo(virDomainPtr domain, const char *vm, + const char *name) { + struct xs_transaction_handle* t; + char s[256]; + char *ret = NULL; + unsigned int len = 0; + + if ((domain == NULL) || (domain->magic != VIR_DOMAIN_MAGIC)) + return(NULL); + if ((domain->conn == NULL) || (domain->conn->magic != VIR_CONNECT_MAGIC)) + return(NULL); + + snprintf(s, 255, "%s/%s", vm, name); + s[255] = 0; + + t = xs_transaction_start(domain->conn->xshandle); + if (t == NULL) + goto done; + + ret = xs_read(domain->conn->xshandle, t, &s[0], &len); + +done: + if (t != NULL) + xs_transaction_end(domain->conn->xshandle, t, 0); + return(ret); +} + /** * virDomainLookupByID: * @conn: pointer to the hypervisor connection @@ -695,6 +772,29 @@ virDomainGetID(virDomainPtr domain) { return(domain->handle); } +/** + * virDomainGetOSType: + * @domain: a domain object + * + * Get the type of domain operation system. + * + * Returns the new string or NULL in case of error + */ +char * +virDomainGetOSType(virDomainPtr domain) { + char *vm, *str = NULL; + + if ((domain == NULL) || (domain->magic != VIR_DOMAIN_MAGIC)) + return(NULL); + + vm = virDomainGetVM(domain); + if (vm) { + str = virDomainGetVMInfo(domain, vm, "image/ostype"); + free(vm); + } + return(str); +} + /** * virDomainGetMaxMemory: * @domain: a domain object or NULL diff --git a/src/libvir_sym.version b/src/libvir_sym.version index e62bdee777..c28e4e65a1 100644 --- a/src/libvir_sym.version +++ b/src/libvir_sym.version @@ -14,12 +14,13 @@ virDomainGetInfo; virDomainGetMaxMemory; virDomainGetName; + virDomainGetOSType; + virDomainGetXMLDesc; virDomainLookupByID; virDomainLookupByName; virDomainResume; virDomainSetMaxMemory; virDomainSuspend; - virDomainGetXMLDesc; virGetVersion; local: *; }; diff --git a/src/virsh.c b/src/virsh.c index 3fa66b9ec5..bc0e038e6c 100644 --- a/src/virsh.c +++ b/src/virsh.c @@ -482,6 +482,7 @@ cmdDinfo(vshControl *ctl, vshCmd *cmd) { virDomainInfo info; virDomainPtr dom; int ret = TRUE; + char *str; if (!vshConnectionUsability(ctl, ctl->conn, TRUE)) return FALSE; @@ -489,13 +490,20 @@ cmdDinfo(vshControl *ctl, vshCmd *cmd) { if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL))) return FALSE; + vshPrint(ctl, VSH_MESG, "%-15s %d\n", "Id:", + virDomainGetID(dom)); + vshPrint(ctl, VSH_MESG, "%-15s %s\n", "Name:", + virDomainGetName(dom)); + + if ((str=virDomainGetOSType(dom))) { + vshPrint(ctl, VSH_MESG, "%-15s %s\n", "OS Type:", str); + free(str); + } + if (virDomainGetInfo(dom, &info)==0) { - vshPrint(ctl, VSH_MESG, "%-15s %d\n", "Id:", - virDomainGetID(dom)); - vshPrint(ctl, VSH_MESG, "%-15s %s\n", "Name:", - virDomainGetName(dom)); vshPrint(ctl, VSH_MESG, "%-15s %s\n", "State:", vshDomainStateToString(info.state)); + vshPrint(ctl, VSH_MESG, "%-15s %d\n", "CPU(s):", info.nrVirtCpu); diff --git a/src/xml.c b/src/xml.c index 3ec4e4e08f..e8fbc7bb73 100644 --- a/src/xml.c +++ b/src/xml.c @@ -167,39 +167,6 @@ done: return(ret); } -/** - * virDomainGetVMInfo: - * @domain: a domain object - * @vm: the xenstore vm path - * @name: the value's path - * - * Extract one information the device used by the domain from xensttore - * - * Returns the new string or NULL in case of error - */ -static char * -virDomainGetVMInfo(virDomainPtr domain, const char *vm, - const char *name) { - struct xs_transaction_handle* t; - char s[256]; - char *ret = NULL; - unsigned int len = 0; - - snprintf(s, 255, "%s/%s", vm, name); - s[255] = 0; - - t = xs_transaction_start(domain->conn->xshandle); - if (t == NULL) - goto done; - - ret = xs_read(domain->conn->xshandle, t, &s[0], &len); - -done: - if (t != NULL) - xs_transaction_end(domain->conn->xshandle, t, 0); - return(ret); -} - /** * virDomainGetXMLDevice: * @domain: a domain object @@ -419,6 +386,9 @@ done: return(ret); } + + + /** * virDomainGetXMLBoot: * @domain: a domain object @@ -430,34 +400,15 @@ done: */ static int virDomainGetXMLBoot(virDomainPtr domain, virBufferPtr buf) { - struct xs_transaction_handle* t; char *vm, *str; - char query[200]; - virConnectPtr conn; - int len; - conn = domain->conn; - - if ((conn == NULL) || (conn->magic != VIR_CONNECT_MAGIC)) + if ((domain == NULL) || (domain->magic != VIR_DOMAIN_MAGIC)) return(-1); - t = xs_transaction_start(conn->xshandle); - if (t == NULL) - return(-1); - - snprintf(query, 199, "/local/domain/%d/vm", - virDomainGetID(domain)); - query[199] = 0; - - vm = xs_read(domain->conn->xshandle, t, &query[0], &len); - - if (t != NULL) - xs_transaction_end(domain->conn->xshandle, t, 0); - + vm = virDomainGetVM(domain); if (vm == NULL) return(-1); - virBufferAdd(buf, " \n", 7); str = virDomainGetVMInfo(domain, vm, "image/ostype"); if (str != NULL) {