From 8d13558ae6a4fb04f2cee094db63363209303f12 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Tue, 3 Mar 2009 09:14:28 +0000 Subject: [PATCH] Internal driver API for sVirt support (James Morris & Dan Walsh) --- ChangeLog | 13 +++++++++ python/generator.py | 2 ++ src/driver.h | 9 +++++++ src/libvirt.c | 64 +++++++++++++++++++++++++++++++++++++++++++++ src/lxc_driver.c | 2 ++ src/openvz_driver.c | 2 ++ src/qemu_driver.c | 2 ++ src/test.c | 2 ++ src/uml_driver.c | 2 ++ 9 files changed, 98 insertions(+) diff --git a/ChangeLog b/ChangeLog index aca3e9f92e..c30a867d7c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +Tue Mar 3 09:12:13 GMT 2009 Daniel P. Berrange + + Internal driver API for sVirt support (James Morris & Dan Walsh) + * src/driver.h: Internal typedefs for virNodeGetSecurityModel() + and virDomainGetSecurityLabel() driver entry points + * src/libvirt.c: Implement entry point for new public APIs + virNodeGetSecurityModel() and virDomainGetSecurityLabel() + * src/lxc_driver.c, src/openvz_driver.c, src/qemu_driver.c, + src/test.c, src/uml_driver.c: Update for new driver entry + points + * python/generator.py: temporarily blacklist non-generated + virNodeGetSecurityModel() and virDomainGetSecurityLabel() + Tue Mar 3 09:10:13 GMT 2009 Daniel P. Berrange Public API for sVirt support (James Morris & Dan Walsh) diff --git a/python/generator.py b/python/generator.py index 0e8cca72cc..dcad499195 100755 --- a/python/generator.py +++ b/python/generator.py @@ -342,6 +342,8 @@ skip_function = ( 'virCopyLastError', # Python API is called virGetLastError instead 'virConnectOpenAuth', # Python C code is manually written 'virDefaultErrorFunc', # Python virErrorFuncHandler impl calls this from C + 'virDomainGetSecurityLabel', # Needs investigation... + 'virNodeGetSecurityModel', # Needs investigation... 'virConnectDomainEventRegister', # overridden in virConnect.py 'virConnectDomainEventDeregister', # overridden in virConnect.py 'virSaveLastError', # We have our own python error wrapper diff --git a/src/driver.h b/src/driver.h index ffb95dc8ad..62d6fbc29b 100644 --- a/src/driver.h +++ b/src/driver.h @@ -180,6 +180,13 @@ typedef int int maplen); typedef int (*virDrvDomainGetMaxVcpus) (virDomainPtr domain); + +typedef int + (*virDrvDomainGetSecurityLabel) (virDomainPtr domain, + virSecurityLabelPtr seclabel); +typedef int + (*virDrvNodeGetSecurityModel) (virConnectPtr conn, + virSecurityModelPtr secmodel); typedef int (*virDrvDomainAttachDevice) (virDomainPtr domain, const char *xml); @@ -371,6 +378,8 @@ struct _virDriver { virDrvDomainPinVcpu domainPinVcpu; virDrvDomainGetVcpus domainGetVcpus; virDrvDomainGetMaxVcpus domainGetMaxVcpus; + virDrvDomainGetSecurityLabel domainGetSecurityLabel; + virDrvNodeGetSecurityModel nodeGetSecurityModel; virDrvDomainDumpXML domainDumpXML; virDrvListDefinedDomains listDefinedDomains; virDrvNumOfDefinedDomains numOfDefinedDomains; diff --git a/src/libvirt.c b/src/libvirt.c index bc444dd71e..a19cd89671 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -4174,6 +4174,70 @@ error: return -1; } +/** + * virDomainGetSecurityLabel: + * @domain: a domain object + * @seclabel: pointer to a virSecurityLabel structure + * + * Extract security label of an active domain. + * + * Returns 0 in case of success, -1 in case of failure, and -2 + * if the operation is not supported (caller decides if that's + * an error). + */ +int +virDomainGetSecurityLabel(virDomainPtr domain, virSecurityLabelPtr seclabel) +{ + virConnectPtr conn; + + if (!VIR_IS_CONNECTED_DOMAIN(domain)) { + virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__); + return -1; + } + + if (seclabel == NULL) { + virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__); + return -1; + } + + conn = domain->conn; + + if (conn->driver->domainGetSecurityLabel) + return conn->driver->domainGetSecurityLabel(domain, seclabel); + + virLibConnWarning(conn, VIR_ERR_NO_SUPPORT, __FUNCTION__); + return -2; +} + +/** + * virNodeGetSecurityModel: + * @conn: a connection object + * @secmodel: pointer to a virSecurityModel structure + * + * Extract the security model of a hypervisor. + * + * Returns 0 in case of success, -1 in case of failure, and -2 if the + * operation is not supported (caller decides if that's an error). + */ +int +virNodeGetSecurityModel(virConnectPtr conn, virSecurityModelPtr secmodel) +{ + if (!VIR_IS_CONNECT(conn)) { + virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); + return -1; + } + + if (secmodel == NULL) { + virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__); + return -1; + } + + if (conn->driver->nodeGetSecurityModel) + return conn->driver->nodeGetSecurityModel(conn, secmodel); + + virLibConnWarning(conn, VIR_ERR_NO_SUPPORT, __FUNCTION__); + return -2; +} /** * virDomainAttachDevice: diff --git a/src/lxc_driver.c b/src/lxc_driver.c index 28f2c6f9ee..dff05b67a1 100644 --- a/src/lxc_driver.c +++ b/src/lxc_driver.c @@ -1429,6 +1429,8 @@ static virDriver lxcDriver = { NULL, /* domainPinVcpu */ NULL, /* domainGetVcpus */ NULL, /* domainGetMaxVcpus */ + NULL, /* domainGetSecurityLabel */ + NULL, /* nodeGetSecurityModel */ lxcDomainDumpXML, /* domainDumpXML */ lxcListDefinedDomains, /* listDefinedDomains */ lxcNumDefinedDomains, /* numOfDefinedDomains */ diff --git a/src/openvz_driver.c b/src/openvz_driver.c index b4d9128607..d6c4362dc0 100644 --- a/src/openvz_driver.c +++ b/src/openvz_driver.c @@ -1299,6 +1299,8 @@ static virDriver openvzDriver = { NULL, /* domainPinVcpu */ NULL, /* domainGetVcpus */ openvzDomainGetMaxVcpus, /* domainGetMaxVcpus */ + NULL, /* domainGetSecurityLabel */ + NULL, /* nodeGetSecurityModel */ openvzDomainDumpXML, /* domainDumpXML */ openvzListDefinedDomains, /* listDomains */ openvzNumDefinedDomains, /* numOfDomains */ diff --git a/src/qemu_driver.c b/src/qemu_driver.c index 99de25353e..eed78e9285 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -4743,6 +4743,8 @@ static virDriver qemuDriver = { NULL, /* domainGetVcpus */ #endif qemudDomainGetMaxVcpus, /* domainGetMaxVcpus */ + NULL, /* domainGetSecurityLabel */ + NULL, /* nodeGetSecurityModel */ qemudDomainDumpXML, /* domainDumpXML */ qemudListDefinedDomains, /* listDomains */ qemudNumDefinedDomains, /* numOfDomains */ diff --git a/src/test.c b/src/test.c index 833faf07c5..b4d8486de4 100644 --- a/src/test.c +++ b/src/test.c @@ -3501,6 +3501,8 @@ static virDriver testDriver = { NULL, /* domainPinVcpu */ NULL, /* domainGetVcpus */ NULL, /* domainGetMaxVcpus */ + NULL, /* domainGetSecurityLabel */ + NULL, /* nodeGetSecurityModel */ testDomainDumpXML, /* domainDumpXML */ testListDefinedDomains, /* listDefinedDomains */ testNumOfDefinedDomains, /* numOfDefinedDomains */ diff --git a/src/uml_driver.c b/src/uml_driver.c index aec22ec2e8..a1fbc776b6 100644 --- a/src/uml_driver.c +++ b/src/uml_driver.c @@ -1854,6 +1854,8 @@ static virDriver umlDriver = { NULL, /* domainPinVcpu */ NULL, /* domainGetVcpus */ NULL, /* domainGetMaxVcpus */ + NULL, /* domainGetSecurityLabel */ + NULL, /* nodeGetSecurityModel */ umlDomainDumpXML, /* domainDumpXML */ umlListDefinedDomains, /* listDomains */ umlNumDefinedDomains, /* numOfDomains */