<div dir="ltr">Hello experts, <div><br></div><div>Gentle reminder !</div><div><br></div><div>thanks a lot for all the help !!</div><div>-imran</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 20, 2015 at 7:20 PM, Imran Khan <span dir="ltr"><<a href="mailto:ik.nitk@gmail.com" target="_blank">ik.nitk@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Have tested the code changes. here are the logs. Please review the patch sent in another mail. <br><br></div>Really appreciate the efforts to make the code very efficient. <br><br><br>test logs:<br><br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// create ../lxc/cn-02.xml <br>Domain cn02 created from ../lxc/cn-02.xml<br><br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ cat ../lxc/share_lxc.xml | grep -A 3 -B 3 share<br><type>exe</type><br></os><br><lxc:namespace><br> <lxc:sharenet type='name' value='cn02'/><br></lxc:namespace><br><vcpu>1</vcpu><br><clock offset='utc'/><br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// list <br> Id Name State<br>----------------------------------------------------<br> 6828 cn02 running<br><br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// create ../lxc/share_lxc.xml Domain cn-03 created from ../lxc/share_lxc.xml<br><br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// list <br> Id Name State<br>----------------------------------------------------<br> 6828 cn02 running<br> 8774 cn-03 running<br><br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// lxc-enter-namespace cn02 --noseclabel /sbin/ifconfig eth0<br>eth0 Link encap:Ethernet HWaddr 52:54:00:a7:e5:3d <br> inet addr:192.168.122.183 Bcast:192.168.122.255 Mask:255.255.255.0<br> inet6 addr: fe80::5054:ff:fea7:e53d/64 Scope:Link<br> UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br> RX packets:105 errors:0 dropped:2 overruns:0 frame:0<br> TX packets:58 errors:0 dropped:0 overruns:0 carrier:0<br> collisions:0 txqueuelen:1000 <br> RX bytes:14169 (14.1 KB) TX bytes:32554 (32.5 KB)<br><br><br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// lxc-enter-namespace cn-03 --noseclabel /sbin/ifconfig eth0<br>eth0 Link encap:Ethernet HWaddr 52:54:00:a7:e5:3d <br> inet addr:192.168.122.183 Bcast:192.168.122.255 Mask:255.255.255.0<br> inet6 addr: fe80::5054:ff:fea7:e53d/64 Scope:Link<br> UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br> RX packets:114 errors:0 dropped:2 overruns:0 frame:0<br> TX packets:64 errors:0 dropped:0 overruns:0 carrier:0<br> collisions:0 txqueuelen:1000 <br> RX bytes:15289 (15.2 KB) TX bytes:40891 (40.8 KB)<br><br><br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// destroy cn02<br>Domain cn02 destroyed<br><br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// lxc-enter-namespace cn-03 --noseclabel /sbin/ifconfig eth0<br>eth0: error fetching interface information: Device not found<br>error: internal error: Child process (10238) unexpected exit status 1<br><br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ip netns exec red ifconfig <br>lo Link encap:Local Loopback <br> inet addr:127.0.0.1 Mask:255.0.0.0<br> inet6 addr: ::1/128 Scope:Host<br> UP LOOPBACK RUNNING MTU:65536 Metric:1<br> RX packets:32 errors:0 dropped:0 overruns:0 frame:0<br> TX packets:32 errors:0 dropped:0 overruns:0 carrier:0<br> collisions:0 txqueuelen:0 <br> RX bytes:2528 (2.5 KB) TX bytes:2528 (2.5 KB)<br><br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// list <br> Id Name State<br>----------------------------------------------------<br> 8774 cn-03 running<br><br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// destroy cn-03<br>Domain cn-03 destroyed<br><br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ cat ../lxc/share_lxc.xml | grep -A 3 -B 3 share<br><type>exe</type><br></os><span class=""><br><lxc:namespace><br> <lxc:sharenet type='netns' value='red'/><br></span></lxc:namespace><br><vcpu>1</vcpu><br><clock offset='utc'/><br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// create ../lxc/share_lxc.xml <br>Domain cn-03 created from ../lxc/share_lxc.xml<br><br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// lxc-enter-namespace cn-03 --noseclabel /sbin/ifconfig <br>lo Link encap:Local Loopback <br> inet addr:127.0.0.1 Mask:255.0.0.0<br> inet6 addr: ::1/128 Scope:Host<br> UP LOOPBACK RUNNING MTU:65536 Metric:1<br> RX packets:48 errors:0 dropped:0 overruns:0 frame:0<br> TX packets:48 errors:0 dropped:0 overruns:0 carrier:0<br> collisions:0 txqueuelen:0 <br> RX bytes:3792 (3.7 KB) TX bytes:3792 (3.7 KB)<br><br><br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// destroy cn-03Domain cn-03 destroyed<br><br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ <br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ip netns exec red ifconfig lo Link encap:Local Loopback <br> inet addr:127.0.0.1 Mask:255.0.0.0<br> inet6 addr: ::1/128 Scope:Host<br> UP LOOPBACK RUNNING MTU:65536 Metric:1<br> RX packets:48 errors:0 dropped:0 overruns:0 frame:0<br> TX packets:48 errors:0 dropped:0 overruns:0 carrier:0<br> collisions:0 txqueuelen:0 <br> RX bytes:3792 (3.7 KB) TX bytes:3792 (3.7 KB)<br><br>imran@imran-VirtualBox:~/programming/libvirt$ cat ../lxc/share_lxc.xml | grep -A 3 -B 3 share<type>exe</type><br></os><br><lxc:namespace><br> <lxc:sharenet type='pid' value='1'/><br></lxc:namespace><br><vcpu>1</vcpu><br><clock offset='utc'/><br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// create ../lxc/share_lxc.xml Domain cn-03 created from ../lxc/share_lxc.xml<br><br>imran@imran-VirtualBox:~/programming/libvirt$ ifconfig eth0<br>eth0 Link encap:Ethernet HWaddr 08:00:27:a8:fd:bf <br> inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0<br> inet6 addr: fe80::a00:27ff:fea8:fdbf/64 Scope:Link<br> UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br> RX packets:178204 errors:13 dropped:0 overruns:0 frame:0<br> TX packets:88943 errors:0 dropped:0 overruns:0 carrier:0<br> collisions:0 txqueuelen:1000 <br> RX bytes:251962232 (251.9 MB) TX bytes:4930611 (4.9 MB)<br> Interrupt:19 Base address:0xd020 <br><br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// lxc-enter-namespace cn-03 --noseclabel /sbin/ifconfig eth0<br>eth0 Link encap:Ethernet HWaddr 08:00:27:a8:fd:bf <br> inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0<br> inet6 addr: fe80::a00:27ff:fea8:fdbf/64 Scope:Link<br> UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br> RX packets:178204 errors:13 dropped:0 overruns:0 frame:0<br> TX packets:88943 errors:0 dropped:0 overruns:0 carrier:0<br> collisions:0 txqueuelen:1000 <br> RX bytes:251962232 (251.9 MB) TX bytes:4930611 (4.9 MB)<br> Interrupt:19 Base address:0xd020 <br><br><br>imran@imran-VirtualBox:~/programming/libvirt$ sudo ./run ./tools/virsh -c lxc:/// destroy cn-03<br>Domain cn-03 destroyed<br><br>imran@imran-VirtualBox:~/programming/libvirt$ ifconfig eth0<br>eth0 Link encap:Ethernet HWaddr 08:00:27:a8:fd:bf <br> inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0<br> inet6 addr: fe80::a00:27ff:fea8:fdbf/64 Scope:Link<br> UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br> RX packets:178204 errors:13 dropped:0 overruns:0 frame:0<br> TX packets:88943 errors:0 dropped:0 overruns:0 carrier:0<br> collisions:0 txqueuelen:1000 <br> RX bytes:251962232 (251.9 MB) TX bytes:4930611 (4.9 MB)<br> Interrupt:19 Base address:0xd020 <br><br>imran@imran-VirtualBox:~/programming/libvirt$ <br><br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 20, 2015 at 4:10 PM, Imran Khan <span dir="ltr"><<a href="mailto:ik.nitk@gmail.com" target="_blank">ik.nitk@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>Thanks to Daniel for making additional changes. And Thanks Michal for review it again. <br></div>This patch has some functionality breakages. I am working on it. will send the new patch soon <br><span><font color="#888888"><br></font></span></div><span><font color="#888888">-imran<br></font></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 20, 2015 at 4:53 AM, Michal Privoznik <span dir="ltr"><<a href="mailto:mprivozn@redhat.com" target="_blank">mprivozn@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>On 14.08.2015 14:09, Daniel P. Berrange wrote:<br>
> From: Imran Khan <<a href="mailto:ik.nitk@gmail.com" target="_blank">ik.nitk@gmail.com</a>><br>
><br>
> This patch adds feature for lxc containers to inherit namespaces.<br>
> This is very similar to what lxc-tools or docker provides. Look<br>
> for "man lxc-start" and you will find that you can pass command<br>
> args as [ --share-[net|ipc|uts] name|pid ]. Or check out docker<br>
> networking option in which you can give --net=container:NAME_or_ID<br>
> as an option for sharing +namespace.<br>
><br>
>>From this patch you can add extra libvirt option to share<br>
<br>
</span>s/>//<br>
<span><br>
> namespace in following way.<br>
><br>
> <lxc:namespace><br>
> <lxc:sharenet type='netns' value='red'/><br>
> <lxc:shareipc type='pid' value='12345'/><br>
> <lxc:shareuts type='name' value='container1'/><br>
> </lxc:namespace><br>
><br>
> The netns option is specific to sharenet. It can be used to<br>
> inherit from existing network namespace.<br>
><br>
> Signed-off-by: Daniel P. Berrange <<a href="mailto:berrange@redhat.com" target="_blank">berrange@redhat.com</a>><br>
> ---<br>
> docs/<a href="http://drvlxc.html.in" rel="noreferrer" target="_blank">drvlxc.html.in</a> | 21 ++++++<br>
> docs/schemas/domaincommon.rng | 42 ++++++++++++<br>
> po/POTFILES.in | 1 +<br>
> src/Makefile.am | 6 +-<br>
> src/lxc/lxc_conf.c | 2 +-<br>
> src/lxc/lxc_container.c | 71 ++++++++++++++++++--<br>
> src/lxc/lxc_container.h | 2 +<br>
> src/lxc/lxc_controller.c | 45 ++++++++++++-<br>
> src/lxc/lxc_domain.c | 149 ++++++++++++++++++++++++++++++++++++++++++<br>
> src/lxc/lxc_domain.h | 26 ++++++++<br>
> src/lxc/lxc_process.c | 149 ++++++++++++++++++++++++++++++++++++++++++<br>
> tests/lxcxml2xmltest.c | 1 +<br>
> 12 files changed, 506 insertions(+), 9 deletions(-)<br>
><br>
<br>
</span><div><div>> diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c<br>
> index e99b039..9699377 100644<br>
> --- a/src/lxc/lxc_process.c<br>
> +++ b/src/lxc/lxc_process.c<br>
> @@ -359,6 +359,135 @@ char *virLXCProcessSetupInterfaceDirect(virConnectPtr conn,<br>
> return ret;<br>
> }<br>
><br>
> +static const char *nsInfoLocal[VIR_LXC_DOMAIN_NAMESPACE_LAST] = {<br>
> + [VIR_LXC_DOMAIN_NAMESPACE_SHARENET] = "net",<br>
> + [VIR_LXC_DOMAIN_NAMESPACE_SHAREIPC] = "ipc",<br>
> + [VIR_LXC_DOMAIN_NAMESPACE_SHAREUTS] = "uts",<br>
> +};<br>
> +<br>
> +static int virLXCProcessSetupNamespaceName(virConnectPtr conn, int ns_type, const char *name)<br>
> +{<br>
> + virLXCDriverPtr driver = conn->privateData;<br>
> + int fd = -1;<br>
> + virDomainObjPtr vm;<br>
> + char *path;<br>
> +<br>
> + vm = virDomainObjListFindByName(driver->domains, name);<br>
> + if (!vm) {<br>
> + virReportError(VIR_ERR_NO_DOMAIN,<br>
> + _("No domain with matching name '%s'"), name);<br>
> + return -1;<br>
> + }<br>
> +<br>
> + if (virAsprintf(&path, "/proc/%lld/ns/%s",<br>
> + (long long int)vm->pid,<br>
> + nsInfoLocal[ns_type]) < 0)<br>
> + goto cleanup;<br>
> +<br>
> + if ((fd = open(path, O_RDONLY)) < 0) {<br>
> + virReportSystemError(errno,<br>
> + _("failed to open ns %s"),<br>
> + virLXCDomainNamespaceTypeToString(ns_type));<br>
> + goto cleanup;<br>
> + }<br>
> +<br>
> + cleanup:<br>
> + VIR_FREE(path);<br>
> + virObjectUnlock(vm);<br>
> + virObjectUnref(vm);<br>
> + return fd;<br>
> +}<br>
> +<br>
> +<br>
> +static int virLXCProcessSetupNamespacePID(int ns_type, const char *name)<br>
> +{<br>
> + int fd;<br>
> + char *path;<br>
> +<br>
> + if (virAsprintf(&path, "/proc/%s/ns/%s",<br>
> + name,<br>
> + nsInfoLocal[ns_type]) < 0)<br>
> + return -1;<br>
> + fd = open(path, O_RDONLY);<br>
> + VIR_FREE(path);<br>
> + if (fd < 0) {<br>
> + virReportSystemError(errno,<br>
> + _("failed to open ns %s"),<br>
> + virLXCDomainNamespaceTypeToString(ns_type));<br>
> + return -1;<br>
> + }<br>
> + return fd;<br>
> +}<br>
> +<br>
> +<br>
> +static int virLXCProcessSetupNamespaceNet(int ns_type, const char *name)<br>
> +{<br>
> + char *path;<br>
> + int fd;<br>
> + if (ns_type != VIR_LXC_DOMAIN_NAMESPACE_SHARENET) {<br>
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s"<br>
<br>
</div></div>s/$/,/<br>
<span><br>
> + _("'netns' namespace source can only be "<br>
> + "used with sharenet"));<br>
> + return -1;<br>
> + }<br>
> +<br>
> + if (virAsprintf(&path, "/var/run/netns/%s", name) < 0)<br>
> + return -1;<br>
> + fd = open(path, O_RDONLY);<br>
> + VIR_FREE(path);<br>
> + if (fd < 0) {<br>
> + virReportSystemError(errno,<br>
> + _("failed to open netns %s"), name);<br>
> + return -1;<br>
> + }<br>
> + return fd;<br>
> +}<br>
> +<br>
> +<br>
<br>
<br>
</span><span>> diff --git a/tests/lxcxml2xmltest.c b/tests/lxcxml2xmltest.c<br>
> index 3e00347..8d824b9 100644<br>
> --- a/tests/lxcxml2xmltest.c<br>
> +++ b/tests/lxcxml2xmltest.c<br>
> @@ -133,6 +133,7 @@ mymain(void)<br>
> DO_TEST("filesystem-root");<br>
> DO_TEST("idmap");<br>
> DO_TEST("capabilities");<br>
> + DO_TEST("sharenet");<br>
<br>
</span>Have you forgot to git add tests/lxcxml2xmldata/lxc-sharenet.xml?<br>
I like the idea though. I'm tempted to ACK this if you fix all the small<br>
issues I've raised.<br>
<span><font color="#888888"><br>
Michal<br>
</font></span></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>