Re: [libvirt] [PATCH 1/8] Define a QEMU specific API to attach to a running QEMU process
On Fri, Jul 08, 2011 at 02:52:36PM -0600, Eric Blake wrote: > On 07/04/2011 04:28 AM, Daniel P. Berrange wrote: > > Introduce a new API in libvirt-qemu.so > > > > virDomainPtr virDomainQemuAttach(virConnectPtr domain, > > unsigned long long pid, > > We already assert elsewhere in our code base that pid_t will always fit > in int. For example, see _virDomainObj in domain_conf.h. Passing a ull > here seems like it might be overkill. Last time I posted this series there was some question whether we'd be ok with just 'unsigned int pid', so I changed to long long. I can change it back again trivially though if we think unsigned int will in face be safe. Daniel -- |: http://berrange.com -o-http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 1/8] Define a QEMU specific API to attach to a running QEMU process
On 07/04/2011 04:28 AM, Daniel P. Berrange wrote: > Introduce a new API in libvirt-qemu.so > > virDomainPtr virDomainQemuAttach(virConnectPtr domain, > unsigned long long pid, We already assert elsewhere in our code base that pid_t will always fit in int. For example, see _virDomainObj in domain_conf.h. Passing a ull here seems like it might be overkill. -- Eric Blake ebl...@redhat.com+1-801-349-2682 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 1/8] Define a QEMU specific API to attach to a running QEMU process
On Tue, Jul 05, 2011 at 12:54:32PM +0200, Matthias Bolte wrote: > 2011/7/4 Daniel P. Berrange : > > Introduce a new API in libvirt-qemu.so > > > > virDomainPtr virDomainQemuAttach(virConnectPtr domain, > > unsigned long long pid, > > unsigned int flags); > > > > This allows libvirtd to attach to an existing, externally > > launched QEMU process. This is useful for QEMU developers who > > prefer to launch QEMU themselves for debugging/devel reasons, > > but still want the benefit of libvirt based tools like > > virt-top, virt-viewer, etc > > > > * include/libvirt/libvirt-qemu.h: Define virDomainQemuAttach > > * src/driver.h, src/libvirt-qemu.c, src/libvirt_qemu.syms: > > Driver glue for virDomainQemuAttach > > --- > > include/libvirt/libvirt-qemu.h | 4 +++ > > src/driver.h | 6 + > > src/libvirt-qemu.c | 41 > > > > src/libvirt_qemu.syms | 5 > > 4 files changed, 56 insertions(+), 0 deletions(-) > > > +virDomainPtr > > +virDomainQemuAttach(virConnectPtr conn, > > + unsigned long long pid, > > + unsigned int flags) > > +{ > > + VIR_DEBUG("conn=%p, pid=%llu, flags=%u", conn, pid, flags); > > Shouldn't this function have documentation? Hm, > virDomainQemuMonitorCommand isn't documented either. > > > diff --git a/src/libvirt_qemu.syms b/src/libvirt_qemu.syms > > index 5702d36..1bb8b62 100644 > > --- a/src/libvirt_qemu.syms > > +++ b/src/libvirt_qemu.syms > > @@ -14,3 +14,8 @@ LIBVIRT_QEMU_0.8.3 { > > global: > > virDomainQemuMonitorCommand; > > }; > > + > > +LIBVIRT_QEMU_0.9.3 { > > + global: > > + virDomainQemuAttach; > > +} LIBVIRT_QEMU_0.8.3; > > 0.9.3 was released in the meantime, needs to be 0.9.4 now. Fixed this & added some docs. Daniel -- |: http://berrange.com -o-http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 1/8] Define a QEMU specific API to attach to a running QEMU process
2011/7/4 Daniel P. Berrange : > Introduce a new API in libvirt-qemu.so > > virDomainPtr virDomainQemuAttach(virConnectPtr domain, > unsigned long long pid, > unsigned int flags); > > This allows libvirtd to attach to an existing, externally > launched QEMU process. This is useful for QEMU developers who > prefer to launch QEMU themselves for debugging/devel reasons, > but still want the benefit of libvirt based tools like > virt-top, virt-viewer, etc > > * include/libvirt/libvirt-qemu.h: Define virDomainQemuAttach > * src/driver.h, src/libvirt-qemu.c, src/libvirt_qemu.syms: > Driver glue for virDomainQemuAttach > --- > include/libvirt/libvirt-qemu.h | 4 +++ > src/driver.h | 6 + > src/libvirt-qemu.c | 41 > > src/libvirt_qemu.syms | 5 > 4 files changed, 56 insertions(+), 0 deletions(-) > +virDomainPtr > +virDomainQemuAttach(virConnectPtr conn, > + unsigned long long pid, > + unsigned int flags) > +{ > + VIR_DEBUG("conn=%p, pid=%llu, flags=%u", conn, pid, flags); Shouldn't this function have documentation? Hm, virDomainQemuMonitorCommand isn't documented either. > diff --git a/src/libvirt_qemu.syms b/src/libvirt_qemu.syms > index 5702d36..1bb8b62 100644 > --- a/src/libvirt_qemu.syms > +++ b/src/libvirt_qemu.syms > @@ -14,3 +14,8 @@ LIBVIRT_QEMU_0.8.3 { > global: > virDomainQemuMonitorCommand; > }; > + > +LIBVIRT_QEMU_0.9.3 { > + global: > + virDomainQemuAttach; > +} LIBVIRT_QEMU_0.8.3; 0.9.3 was released in the meantime, needs to be 0.9.4 now. ACK. -- Matthias Bolte http://photron.blogspot.com -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 1/8] Define a QEMU specific API to attach to a running QEMU process
Introduce a new API in libvirt-qemu.so virDomainPtr virDomainQemuAttach(virConnectPtr domain, unsigned long long pid, unsigned int flags); This allows libvirtd to attach to an existing, externally launched QEMU process. This is useful for QEMU developers who prefer to launch QEMU themselves for debugging/devel reasons, but still want the benefit of libvirt based tools like virt-top, virt-viewer, etc * include/libvirt/libvirt-qemu.h: Define virDomainQemuAttach * src/driver.h, src/libvirt-qemu.c, src/libvirt_qemu.syms: Driver glue for virDomainQemuAttach --- include/libvirt/libvirt-qemu.h |4 +++ src/driver.h |6 + src/libvirt-qemu.c | 41 src/libvirt_qemu.syms |5 4 files changed, 56 insertions(+), 0 deletions(-) diff --git a/include/libvirt/libvirt-qemu.h b/include/libvirt/libvirt-qemu.h index f172eff..2f0f1c6 100644 --- a/include/libvirt/libvirt-qemu.h +++ b/include/libvirt/libvirt-qemu.h @@ -28,6 +28,10 @@ typedef enum { int virDomainQemuMonitorCommand(virDomainPtr domain, const char *cmd, char **result, unsigned int flags); +virDomainPtr virDomainQemuAttach(virConnectPtr domain, + unsigned long long pid, + unsigned int flags); + # ifdef __cplusplus } # endif diff --git a/src/driver.h b/src/driver.h index 871a4ae..fd801f4 100644 --- a/src/driver.h +++ b/src/driver.h @@ -566,6 +566,11 @@ typedef int (*virDrvDomainQemuMonitorCommand)(virDomainPtr domain, const char *cmd, char **result, unsigned int flags); +typedef virDomainPtr +(*virDrvDomainQemuAttach)(virConnectPtr conn, + unsigned long long pid, + unsigned int flags); + typedef int (*virDrvDomainOpenConsole)(virDomainPtr dom, const char *devname, @@ -786,6 +791,7 @@ struct _virDriver { virDrvDomainRevertToSnapshot domainRevertToSnapshot; virDrvDomainSnapshotDelete domainSnapshotDelete; virDrvDomainQemuMonitorCommand qemuDomainMonitorCommand; +virDrvDomainQemuAttach qemuDomainAttach; virDrvDomainOpenConsole domainOpenConsole; virDrvDomainInjectNMI domainInjectNMI; virDrvDomainMigrateBegin3 domainMigrateBegin3; diff --git a/src/libvirt-qemu.c b/src/libvirt-qemu.c index 46727c8..f0bcac1 100644 --- a/src/libvirt-qemu.c +++ b/src/libvirt-qemu.c @@ -79,3 +79,44 @@ error: virDispatchError(conn); return -1; } + + +virDomainPtr +virDomainQemuAttach(virConnectPtr conn, +unsigned long long pid, +unsigned int flags) +{ +VIR_DEBUG("conn=%p, pid=%llu, flags=%u", conn, pid, flags); + +virResetLastError(); + +if (!VIR_IS_CONNECT(conn)) { +virLibConnError(NULL, VIR_ERR_INVALID_CONN, __FUNCTION__); +virDispatchError(NULL); +return NULL; +} + +if (pid <= 1) { +virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__); +goto error; +} + +if (conn->flags & VIR_CONNECT_RO) { +virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__); +goto error; +} + +if (conn->driver->qemuDomainAttach) { +virDomainPtr ret; +ret = conn->driver->qemuDomainAttach(conn, pid, flags); +if (!ret) +goto error; +return ret; +} + +virLibConnError(conn, VIR_ERR_NO_SUPPORT, __FUNCTION__); + +error: +virDispatchError(conn); +return NULL; +} diff --git a/src/libvirt_qemu.syms b/src/libvirt_qemu.syms index 5702d36..1bb8b62 100644 --- a/src/libvirt_qemu.syms +++ b/src/libvirt_qemu.syms @@ -14,3 +14,8 @@ LIBVIRT_QEMU_0.8.3 { global: virDomainQemuMonitorCommand; }; + +LIBVIRT_QEMU_0.9.3 { +global: +virDomainQemuAttach; +} LIBVIRT_QEMU_0.8.3; -- 1.7.4.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 1/8] Define a QEMU specific API to attach to a running QEMU process
Introduce a new API in libvirt-qemu.so virDomainPtr virDomainQemuAttach(virConnectPtr domain, unsigned long long pid, unsigned int flags); This allows libvirtd to attach to an existing, externally launched QEMU process. This is useful for QEMU developers who prefer to launch QEMU themselves for debugging/devel reasons, but still want the benefit of libvirt based tools like virt-top, virt-viewer, etc * include/libvirt/libvirt-qemu.h: Define virDomainQemuAttach * src/driver.h, src/libvirt-qemu.c, src/libvirt_qemu.syms: Driver glue for virDomainQemuAttach --- include/libvirt/libvirt-qemu.h |4 +++ src/driver.h |6 + src/libvirt-qemu.c | 41 src/libvirt_qemu.syms |5 4 files changed, 56 insertions(+), 0 deletions(-) diff --git a/include/libvirt/libvirt-qemu.h b/include/libvirt/libvirt-qemu.h index f172eff..2f0f1c6 100644 --- a/include/libvirt/libvirt-qemu.h +++ b/include/libvirt/libvirt-qemu.h @@ -28,6 +28,10 @@ typedef enum { int virDomainQemuMonitorCommand(virDomainPtr domain, const char *cmd, char **result, unsigned int flags); +virDomainPtr virDomainQemuAttach(virConnectPtr domain, + unsigned long long pid, + unsigned int flags); + # ifdef __cplusplus } # endif diff --git a/src/driver.h b/src/driver.h index 62bbc1d..8e57a4e 100644 --- a/src/driver.h +++ b/src/driver.h @@ -559,6 +559,11 @@ typedef int (*virDrvDomainQemuMonitorCommand)(virDomainPtr domain, const char *cmd, char **result, unsigned int flags); +typedef virDomainPtr +(*virDrvDomainQemuAttach)(virConnectPtr conn, + unsigned long long pid, + unsigned int flags); + typedef int (*virDrvDomainOpenConsole)(virDomainPtr dom, const char *devname, @@ -796,6 +801,7 @@ struct _virDriver { virDrvDomainRevertToSnapshot domainRevertToSnapshot; virDrvDomainSnapshotDelete domainSnapshotDelete; virDrvDomainQemuMonitorCommand qemuDomainMonitorCommand; +virDrvDomainQemuAttach qemuDomainAttach; virDrvDomainOpenConsole domainOpenConsole; virDrvDomainInjectNMI domainInjectNMI; virDrvDomainMigrateBegin3 domainMigrateBegin3; diff --git a/src/libvirt-qemu.c b/src/libvirt-qemu.c index 46727c8..f0bcac1 100644 --- a/src/libvirt-qemu.c +++ b/src/libvirt-qemu.c @@ -79,3 +79,44 @@ error: virDispatchError(conn); return -1; } + + +virDomainPtr +virDomainQemuAttach(virConnectPtr conn, +unsigned long long pid, +unsigned int flags) +{ +VIR_DEBUG("conn=%p, pid=%llu, flags=%u", conn, pid, flags); + +virResetLastError(); + +if (!VIR_IS_CONNECT(conn)) { +virLibConnError(NULL, VIR_ERR_INVALID_CONN, __FUNCTION__); +virDispatchError(NULL); +return NULL; +} + +if (pid <= 1) { +virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__); +goto error; +} + +if (conn->flags & VIR_CONNECT_RO) { +virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__); +goto error; +} + +if (conn->driver->qemuDomainAttach) { +virDomainPtr ret; +ret = conn->driver->qemuDomainAttach(conn, pid, flags); +if (!ret) +goto error; +return ret; +} + +virLibConnError(conn, VIR_ERR_NO_SUPPORT, __FUNCTION__); + +error: +virDispatchError(conn); +return NULL; +} diff --git a/src/libvirt_qemu.syms b/src/libvirt_qemu.syms index 5702d36..1bb8b62 100644 --- a/src/libvirt_qemu.syms +++ b/src/libvirt_qemu.syms @@ -14,3 +14,8 @@ LIBVIRT_QEMU_0.8.3 { global: virDomainQemuMonitorCommand; }; + +LIBVIRT_QEMU_0.9.3 { +global: +virDomainQemuAttach; +} LIBVIRT_QEMU_0.8.3; -- 1.7.4.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list