[libvirt] [PATCH 09/17] libvirt-lxc: add virDomainLxcEnterCGroup API
Daniel P. Berrange
berrange at redhat.com
Wed May 4 16:50:29 UTC 2016
On Wed, Apr 27, 2016 at 01:48:00PM -0400, John Ferlan wrote:
>
>
> On 04/14/2016 11:22 AM, Daniel P. Berrange wrote:
> > Add the virDomainLxcEnterCGroup API to the libvirt-lxc.so
> > file. This method moves the calling process into the cgroups
> > associated with the container.
> >
> > Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> > ---
> > include/libvirt/libvirt-lxc.h | 2 ++
> > src/libvirt-lxc.c | 47 +++++++++++++++++++++++++++++++++++++++++++
> > src/libvirt_lxc.syms | 5 +++++
> > 3 files changed, 54 insertions(+)
> >
> > diff --git a/include/libvirt/libvirt-lxc.h b/include/libvirt/libvirt-lxc.h
> > index 1901fce..0d16a5c 100644
> > --- a/include/libvirt/libvirt-lxc.h
> > +++ b/include/libvirt/libvirt-lxc.h
> > @@ -46,6 +46,8 @@ int virDomainLxcEnterSecurityLabel(virSecurityModelPtr model,
> > virSecurityLabelPtr label,
> > virSecurityLabelPtr oldlabel,
> > unsigned int flags);
> > +int virDomainLxcEnterCGroup(virDomainPtr domain,
> > + unsigned int flags);
> >
> > # ifdef __cplusplus
> > }
> > diff --git a/src/libvirt-lxc.c b/src/libvirt-lxc.c
> > index 8553570..16e08e9 100644
> > --- a/src/libvirt-lxc.c
> > +++ b/src/libvirt-lxc.c
> > @@ -36,6 +36,7 @@
> > #ifdef WITH_APPARMOR
> > # include <sys/apparmor.h>
> > #endif
> > +#include "vircgroup.h"
> >
> > #define VIR_FROM_THIS VIR_FROM_NONE
> >
> > @@ -269,3 +270,49 @@ virDomainLxcEnterSecurityLabel(virSecurityModelPtr model,
> > virDispatchError(NULL);
> > return -1;
> > }
> > +
> > +
> > +/**
> > + * virDomainLxcEnterCGroup:
> > + * @domain: a domain object
> > + * @flags: currently unused, pass 0
> > + *
> > + * This API is LXC specific, so it will only work with hypervisor
> > + * connections to the LXC driver.
> > + *
> > + * Attaches the process to the control cgroups associated
> > + * with the container @domain.
> > + *
> > + * Returns 0 on success, -1 on error
> > + */
> > +int virDomainLxcEnterCGroup(virDomainPtr domain,
> > + unsigned int flags)
> > +{
> > + virConnectPtr conn;
> > + virCgroupPtr cgroup = NULL;
> > +
> > + VIR_DOMAIN_DEBUG(domain, "flags=%x", flags);
> > +
> > + virResetLastError();
> > +
> > + virCheckDomainReturn(domain, -1);
> > + conn = domain->conn;
> > +
> > + virCheckReadOnlyGoto(conn->flags, error);
> > + virCheckFlagsGoto(0, error);
> > +
> > + if (virCgroupNewDetect(domain->id, -1, &cgroup) < 0)
>
> virCgroupNewDetect takes a pid as parameter 1
The domain->id is the pid of the libvirt_lxc process when using LXC
Regards,
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 :|
More information about the libvir-list
mailing list