<div dir="ltr">Hey Stewart, thanks for the socket proxy idea! Will definitely give it a go.</div><div class="gmail_extra"><br><div class="gmail_quote">2017-03-10 15:18 GMT+01:00 Stewart Brodie <span dir="ltr"><<a href="mailto:sbrodie@espial.com" target="_blank">sbrodie@espial.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">Maxime Jourdan <<a href="mailto:raptorteak@gmail.com">raptorteak@gmail.com</a>> wrote:<br>
<br>
> Hello,<br>
><br>
> One of the contained processes on my system exposes its communication<br>
> interface via an abstract socket. This socket is of the AF_UNIX family,<br>
> with the particularity of being accessible via a name rather than a socket<br>
> file with a path. This socket obeys to the network namespace rules.<br>
><br>
> Problem is that I need a few other containers to be able to connect to<br>
> this socket. But at the same time, I require containers to have different<br>
> network namespaces...<br>
><br>
> Sharing regular AF_UNIX sockets was no big deal because I could just<br>
> bind-mount the socket path into the various containers. But these<br>
> abstract, pathless sockets are making it hard to share.<br>
><br>
> A temporary solution has been to "whitelist" this specific socket name<br>
> inside the kernel directly, right before the namespace equal check, but<br>
> that's an ugly workaround.<br>
><br>
> Any advice about elegantly sharing asbtract sockets between containers is<br>
> gladly welcome :).<br>
<br>
</span>The main way that I can think of that is non-invasive with respect to the<br>
kernel is to have a proxy process in the "server" container<br>
that also has a filesystem based UNIX domain socket (that you can bind<br>
mount, as usual) that your client can call to obtain a handle to the real<br>
socket.<br>
<br>
Your clients then send a request to the proxy for the socket handle.  Your<br>
proxy process can open and connect to the abstract the socket and then<br>
returns the socket handle back to the caller using ancilliary data.<br>
<br>
If you're not familiar with that, effectively, it's a way of doing a<br>
cross-process dup() on a file descriptor.  The key search terms you need<br>
are: cmsg sendmsg recvmsg SCM_RIGHTS<br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
--<br>
Stewart Brodie<br>
Senior Software Engineer<br>
Espial UK<br>
______________________________<wbr>_________________<br>
lxc-users mailing list<br>
<a href="mailto:lxc-users@lists.linuxcontainers.org">lxc-users@lists.<wbr>linuxcontainers.org</a><br>
<a href="http://lists.linuxcontainers.org/listinfo/lxc-users" rel="noreferrer" target="_blank">http://lists.linuxcontainers.<wbr>org/listinfo/lxc-users</a></font></span></blockquote></div><br></div>