On 02/17/2011 03:55 AM, Maheswara Reddy C - ERS, HCL Tech wrote: > Thanks Rob, > > Here ABC_stack or XYZ_stack mean different vendor networking stack,
Good to know. > these two network stack want to run in one namespace as tow different process. In one _what_ namespace? Ok, imagine I'm a bartender like this guy: http://caskstrength.blogspot.com/2010/11/bitterest-pillis-sometimes-tastiest.html Imagine you're asking questions about making a drink. You come up to me and say "I have liquid, liquid, liquid, and cubes. I add liquid to liquid to make drink. Why didn't it work?" Imagine that the answer you're actually after is "it needs to be served in a chilled croupette glass". How do we get from point A to point B here? I'm _guessing_ you want two processes with the same mount namespace but different network namespaces. A mount namespace is not the same thing as a network namespace. There are also device namespaces, PID namespaces, UID namespaces... None of them is just a "namespace". You do actually have to specify which you mean. > Similarly I have to create N number of namespaces. > > > Main() > > { > int flags= CLONE_NEWNS| CLONE_NEWNET; > pid1= clone(do_clone, stack, flags ,&clone_arg) > > } > > do_clone() > { > int flags=0; > pid2= clone(do_clone2, stack, flags ,&clone_arg) > } > > Does this way both pid1 and pid2 run in the same namespace? Or in the min > itself I can run clone() with flags=0 Did you try it? Run some tests and see what happens? Perform any experiments? It's been ages since I've played with clone() directly. I think flags 0 will do what you want, but let's confirm: http://lmgtfy.com/?q=clone+example+c The first hit on that is a Linux Journal article written back when the clone() system call was added, and its second C listing is an example of how to use the clone system call. It looks like with no flags, it Another google for "clone flags fork" finds this: http://www.slidefinder.net/c/chapter_processes/16193998/p5 And slide 9 confirms that fork uses the clone system call with all clone flags cleared, so yes. If you have something against fork() and would like to replace a posix mechanism with a nonportable linux-specific one for no obvious _reason_, you can do that. So, going back to your above example: the first clone (creating pid 1) creates a new process with its own network namespace, and its own mount namespace. If you call clone again from the new PID (which starts execution in do_clone) then it shares pid1's namespaces. If you call clone again from main() it shared the namespaces main() had. It sounds like calling clone() again from do_clone() might be what you want, but I AM STILL GUESSING AT WHAT YOU ARE TRYING TO DO. "The two should be different, which one should the third use" is not a complete thought. It's also entirely possible that you want your first clone to use CLONE_NEWNET (creating a new network namespace) but not CLONE_NEWNS (creating a new mount namespace). These flags are independent, they do orthogonal things, they do not need to be used together. Rob ------------------------------------------------------------------------------ The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE: Pinpoint memory and threading errors before they happen. Find and fix more than 250 security defects in the development cycle. Locate bottlenecks in serial and parallel code that limit performance. http://p.sf.net/sfu/intel-dev2devfeb _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel