Re: [libvirt] [PATCH 1/8] Define a QEMU specific API to attach to a running QEMU process

2011-07-11 Thread Daniel P. Berrange
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

2011-07-08 Thread Eric Blake
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

2011-07-08 Thread Daniel P. Berrange
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-07-05 Thread Matthias Bolte
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

2011-07-04 Thread 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(-)

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

2011-06-20 Thread 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(-)

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