[lxc-devel] do pid1 and pid2 run in the same network namespace

Daniel Lezcano daniel.lezcano at free.fr
Tue Feb 22 11:56:12 UTC 2011


On 02/22/2011 12:22 PM, Maheswara Reddy C - ERS, HCL Tech wrote:
>> Then it is quite easy. You just have to fork ten times the routine in the program I gave you in the previous email.
>   Hi Daniel,
>
> But I want to run two different (fork() run same copy) process/threads in each namespace, that's why I am using clone() which take function pointer of each process/thered to start.

Have fun ;)

#include<errno.h>
#include<sched.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>

#define NRNS 10

int myroutine1(void)
{
	return 0;
}

int myroutine2(void)
{
	return 0;
}

int main(int argc, char *argv[])
{

	int i;
	pid_t pid;

	for (i = 0; i<  NRNS; i++) {

		/* create a new network namespace for my childs */
		if (unshare(CLONE_NEWNET)) {
			perror("unshare");
			return 1;
		}

		pid = fork();
		if (pid<  0) {
			perror("fork");
			return 1;
		}

		if (!pid)
			exit(myroutine1());

		pid = fork();
		if (pid<  0) {
			perror("fork2");
			return 1;
		}

		if (!pid)
			exit(myroutine2());

	}

	/* create a new netns to not share with the last one
	 * At the end we have 10 netns + 1 this one
	 */
	if (unshare(CLONE_NEWNET)) {
		perror("unshare2");
		return 1;
	}

	for (;;) {

		pid = wait(NULL);
		if (pid<  0) {
			if (errno == ECHILD)
				return 0;
			if (errno == EINTR)
				continue;
			perror("wait");
			return 1;
                 }
	}

}






More information about the lxc-devel mailing list