From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> Systemd has a concept of socket activation whereby systemd will listen on a TCP socket in the host. When a client arrives on the socket, systemd will run a service, passing it the pre-opened TCP server socket. The service can then accept the client connection. This patch series adds the ability to pass pre-opened file descriptors into LXC guests. The file descriptors will be made available to the 'init' process in the container, starting from STDERR_FILENO + 1. For example, assuming you have pre-opened a file descriptors in your shell # exec 10>/tmp/foo # exec 20>/tmp/bar # exec 30>/tmp/wizz You can then start a container with: # virsh -c lxc:/// start --pass-fds 10,20,30 demo Inside that container the FDs will appear as 3, 4, 5: # virsh -c lxc:/// console demo Connected to domain demo Escape character is ^] sh-4.2# lsof -p 1 | grep /tmp sh 1 root 3w REG 0,32 0 90226444 /tmp/foo sh 1 root 4w REG 0,32 0 90238163 /tmp/bar sh 1 root 5w REG 0,32 0 90238164 /tmp/wizz Finally, if you run systemd inside the container, it can then use these pre-opened file descriptors, passing them along when launching services inside the container. So you have end-to-end socket activation between the host & guest systemd instances. Daniel P. Berrange (6): Introduce new domain create APIs to pass pre-opened FDs to LXC Introduce remote protocol support for virDomainCreate{XML}WithFiles Fix impl of virDomainCreateWithFlags remote client helper LXC: Wire up the virDomainCreate{XML}WithFiles methods Enable FD passing when starting guests with virsh Merge virCommandPreserveFD / virCommandTransferFD daemon/remote.c | 104 ++++++++++++++++++++++ include/libvirt/libvirt.h.in | 10 +++ python/generator.py | 3 + python/libvirt-override-virConnect.py | 30 +++++++ python/libvirt-override-virDomain.py | 38 ++++++++ python/libvirt-override.c | 89 +++++++++++++++++++ src/driver.h | 13 +++ src/fdstream.c | 3 +- src/libvirt.c | 154 ++++++++++++++++++++++++++++++++ src/libvirt_private.syms | 3 +- src/libvirt_public.syms | 6 ++ src/lxc/lxc_container.c | 136 ++++++++++++++++++++++------- src/lxc/lxc_container.h | 6 +- src/lxc/lxc_controller.c | 36 +++++++- src/lxc/lxc_driver.c | 45 ++++++++-- src/lxc/lxc_process.c | 20 ++++- src/lxc/lxc_process.h | 1 + src/qemu/qemu_command.c | 16 ++-- src/remote/remote_driver.c | 91 +++++++++++++++---- src/remote/remote_protocol.x | 32 ++++++- src/remote_protocol-structs | 16 ++++ src/uml/uml_conf.c | 3 +- src/util/vircommand.c | 159 ++++++++++++++++------------------ src/util/vircommand.h | 13 +-- tests/commandtest.c | 5 +- tools/virsh-domain.c | 82 +++++++++++++++++- tools/virsh.pod | 13 ++- 27 files changed, 960 insertions(+), 167 deletions(-) -- 1.8.1.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list