[Libct] Regarding network namespaces.
Monali Porob
Monali.Porob at huawei.com
Fri Jan 30 11:03:25 PST 2015
Hi Andrew,
Got it . Silly mistake on my end :)
Thanks for sending the sample. Its clear how to use the various APIs.
Regards,
Monali
-----Original Message-----
From: Andrew Vagin [mailto:avagin at gmail.com]
Sent: Friday, January 30, 2015 10:55 AM
To: Monali Porob
Cc: Andrew Vagin; libct at openvz.org
Subject: Re: [Libct] Regarding network namespaces.
On Thu, Jan 29, 2015 at 05:56:33PM +0000, Monali Porob wrote:
> Hi Andrew ,
>
> While trying things with network namespaces , I tried to use the
> libct_net_dev_add_ip_addr() in the test/ct_net_veth.c and found the
> callback is not getting spawned.
>
> The test program exits with main:89: FAIL: CT is not alive . How
> should I use this api . I am assuming that the api can be used to set
> the IP address for the
> veth0 inside the namespace. Correct me here if that’s not the case.
>
> I have limited background of libnl.
>
>
>
> I did try executing shell commands like ifconfig and setting up ip
> addresses on veth pairs. With this I could get the namespace
> communication set to the outside world using Routes .
>
> I was wondering if libct APIs could be used to do the same . Hence
> tried using libct_net_dev_add_ip_addr(). Please suggest .
>
>
>
> Thanks and Regards,
>
> Monali
>
>
>
> Changed ct_net_veth.c
>
> int main(int argc, char **argv)
>
> {
>
> int p[2];
>
> struct ct_arg ca;
>
> libct_session_t s;
>
> ct_handler_t ct;
>
> ct_process_desc_t pd;
>
> ct_process_t pr;
>
> struct ct_net_veth_arg va;
>
> ct_net_t nd;
>
>
>
> ca.mark = mmap(NULL, 4096, PROT_READ | PROT_WRITE,
>
> MAP_SHARED | MAP_ANON, 0, 0);
>
> pipe(p);
>
>
>
> ca.mark[0] = 0;
>
> ca.mark[1] = 0;
>
> ca.mark[2] = 0;
>
> ca.wait_pipe = p[0];
>
>
>
> va.host_name = VETH_HOST_NAME;
>
> va.ct_name = VETH_CT_NAME;
>
>
>
> s = libct_session_open_local();
>
> ct = libct_container_create(s, "test");
>
> pd = libct_process_desc_create(s);
>
> libct_container_set_nsmask(ct, CLONE_NEWNET);
>
>
>
> nd = libct_net_add(ct, CT_NET_VETH, &va);
>
> if (libct_handle_is_err(nd))
>
> return tst_err("Can't add hostnic");
>
>
>
> if (libct_net_dev_set_mac_addr(nd, "00:11:22:33:44:55"))
>
> return tst_err("Can't set mac");
>
>
>
> //Added by Monali
>
> if (libct_net_dev_add_ip_addr(nd, "VETH_CT_ADDR"))
I think here is a mistake. You need to remove double quotes arount VETH_CT_ADDR.
You need smth like this:
#define VETH_CT_ADDR "192.168.87.123/24"
...
if (libct_net_dev_add_ip_addr(nd, VETH_CT_ADDR))
Here is an example
https://github.com/avagin/libct/blob/veth-test/test/ct_net_veth.c
Thanks,
Andrew
>
> return tst_err("Can't set addr");
>
>
>
> pr = libct_container_spawn_cb(ct, pd, check_ct_net, &ca);
>
> if (libct_handle_is_err(pr))
>
> return tst_err("Can't spawn CT");
>
>
>
> …Same as in git
>
>
>
> }
>
> _______________________________________________
> Libct mailing list
> Libct at openvz.org
> https://lists.openvz.org/mailman/listinfo/libct
More information about the Libct
mailing list