[libvirt] [PATCH 6/9] Introduce an LXC specific public API & library

Eric Blake eblake at redhat.com
Tue Jan 8 16:02:37 UTC 2013


On 12/21/2012 10:08 AM, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
> 
> This patch introduces support for LXC specific public APIs. In
> common with what was done for QEMU, this creates a libvirt_lxc.so
> library and libvirt/libvirt-lxc.h header file.
> 
> The actual APIs are
> 
>   int virDomainLxcOpenNamespace(virDomainPtr domain,
>                                 int **fdlist,
>                                 unsigned int flags);
> 
>   int virDomainLxcEnterNamespace(virDomainPtr domain,
>                                  unsigned int flags);

This commit message signature...

> 
> which provide a way to use the setns() system call to move the
> calling process into the container's namespace. This is not
> practical to write in a generically applicable manner. The
> nearest that we could get to such an API would be an API which
> allows to pass a command + argv to be executed inside a
> container. Even if we had such a generic API, this LXC specific
> API is still useful, because it allows the caller to maintain
> the current process context, in particular any I/O streams they
> have open.
> 
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---

> @@ -152,7 +157,8 @@ todo:
>  	$(MAKE) todo.html
>  
>  hvsupport.html.in: $(srcdir)/hvsupport.pl $(srcdir)/../src/libvirt_public.syms \
> -	 $(srcdir)/../src/libvirt_qemu.syms $(srcdir)/../src/driver.h
> +	 $(srcdir)/../src/libvirt_qemu.syms $(srcdir)/../src/libvirt_lxc.syms \
> +	$(srcdir)/../src/driver.h

Indentation looks weird here, but that's just cosmetic.

> +++ b/include/libvirt/libvirt-lxc.h
> @@ -0,0 +1,50 @@
> +/* -*- c -*-
> + * libvirt-lxc.h: Interfaces specific for LXC driver
> + * Summary: lxc specific interfaces
> + * Description: Provides the interfaces of the libvirt library to handle
> + *              LXC specific methods
> + *
> + * Copyright (C) 2012 Red Hat, Inc.

2013.


> +int virDomainLxcEnterNamespace(virDomainPtr domain,
> +                               unsigned int nfdlist,
> +                               int *fdlist,
> +                               unsigned int *noldfdlist,
> +                               int **oldfdlist,
> +                               unsigned int flags);

...doesn't match the actual code.

> +++ b/python/libvirt-lxc-override-api.xml
> @@ -0,0 +1,19 @@
> +<?xml version="1.0"?>

Should we be sticking copyright comments in these types of files?  But
that's fine for a followup, since there are other files needing the same
cleanup.


> +++ b/python/libvirt-lxc-override.c
> @@ -0,0 +1,141 @@
> +/*
> + * libvir.c: this modules implements the main part of the glue of the
> + *           libvir library and the Python interpreter. It provides the
> + *           entry points where an automatically generated stub is
> + *           unpractical
> + *
> + * Copyright (C) 2011-2012 Red Hat, Inc.

Also 2013.


> +libvirt_lxc.def: $(srcdir)/libvirt_lxc.syms
> +	$(AM_V_GEN)rm -f -- $@-tmp $@ ; \
> +	printf 'EXPORTS\n' > $@-tmp && \
> +	sed -e '/^$$/d; /#/d; /:/d; /}/d; /\*/d; /LIBVIRT_/d; s/[	 ]*\(.*\)\;/    \1/g' $^ >> $@-tmp && \

Should we break this long line with multiple -e to fit in 80 columns?
But that's copy and paste, so it would be a separate cleanup.

> +++ b/src/driver.h
> @@ -915,6 +915,11 @@ typedef int
>                            unsigned long long minimum,
>                            unsigned int flags);
>  
> +typedef int
> +    (*virDrvDomainLxcOpenNamespace)(virDomainPtr dom,
> +                                    int **fdlist,
> +                                    unsigned int flags);
> +
>  /**
>   * _virDriver:
>   *
> @@ -1107,6 +1112,7 @@ struct _virDriver {
>      virDrvNodeGetCPUMap                 nodeGetCPUMap;
>      virDrvDomainFSTrim                  domainFSTrim;
>      virDrvDomainSendProcessSignal       domainSendProcessSignal;
> +    virDrvDomainLxcOpenNamespace        domainLxcOpenNamespace;

No EnterNamespace driver callback?

> +++ b/src/libvirt-lxc.c
> @@ -0,0 +1,165 @@
> +/*
> + * libvirt-lxc.c: Interfaces for the libvirt library to handle lxc-specific
> + *                 APIs.
> + *
> + * Copyright (C) 2012 Red Hat, Inc.

2013

> +++ b/src/lxc/lxc_driver.c
> @@ -4544,6 +4544,7 @@ static virDriver lxcDriver = {
>      .domainShutdown = lxcDomainShutdown, /* 1.0.1 */
>      .domainShutdownFlags = lxcDomainShutdownFlags, /* 1.0.1 */
>      .domainReboot = lxcDomainReboot, /* 1.0.1 */
> +    .domainLxcOpenNamespace = lxcDomainOpenNamespace, /* 1.0.2 */

Again, no EnterNamespace callback registration?

ACK with those issues fixed.  It made it nice that we already have
libvirt-qemu to copy from.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20130108/41b42321/attachment-0001.sig>


More information about the libvir-list mailing list