xref: /aosp_15_r20/external/iproute2/include/namespace.h (revision de1e4e894b0c224df933550f0afdecc354b238c4)
1*de1e4e89SAndroid Build Coastguard Worker #ifndef __NAMESPACE_H__
2*de1e4e89SAndroid Build Coastguard Worker #define __NAMESPACE_H__ 1
3*de1e4e89SAndroid Build Coastguard Worker 
4*de1e4e89SAndroid Build Coastguard Worker #include <sched.h>
5*de1e4e89SAndroid Build Coastguard Worker #include <sys/mount.h>
6*de1e4e89SAndroid Build Coastguard Worker #include <unistd.h>
7*de1e4e89SAndroid Build Coastguard Worker #include <sys/syscall.h>
8*de1e4e89SAndroid Build Coastguard Worker #include <errno.h>
9*de1e4e89SAndroid Build Coastguard Worker 
10*de1e4e89SAndroid Build Coastguard Worker #ifndef NETNS_RUN_DIR
11*de1e4e89SAndroid Build Coastguard Worker #define NETNS_RUN_DIR "/var/run/netns"
12*de1e4e89SAndroid Build Coastguard Worker #endif
13*de1e4e89SAndroid Build Coastguard Worker 
14*de1e4e89SAndroid Build Coastguard Worker #ifndef NETNS_ETC_DIR
15*de1e4e89SAndroid Build Coastguard Worker #define NETNS_ETC_DIR "/etc/netns"
16*de1e4e89SAndroid Build Coastguard Worker #endif
17*de1e4e89SAndroid Build Coastguard Worker 
18*de1e4e89SAndroid Build Coastguard Worker #ifndef CLONE_NEWNET
19*de1e4e89SAndroid Build Coastguard Worker #define CLONE_NEWNET 0x40000000	/* New network namespace (lo, device, names sockets, etc) */
20*de1e4e89SAndroid Build Coastguard Worker #endif
21*de1e4e89SAndroid Build Coastguard Worker 
22*de1e4e89SAndroid Build Coastguard Worker #ifndef MNT_DETACH
23*de1e4e89SAndroid Build Coastguard Worker #define MNT_DETACH	0x00000002	/* Just detach from the tree */
24*de1e4e89SAndroid Build Coastguard Worker #endif /* MNT_DETACH */
25*de1e4e89SAndroid Build Coastguard Worker 
26*de1e4e89SAndroid Build Coastguard Worker /* sys/mount.h may be out too old to have these */
27*de1e4e89SAndroid Build Coastguard Worker #ifndef MS_REC
28*de1e4e89SAndroid Build Coastguard Worker #define MS_REC		16384
29*de1e4e89SAndroid Build Coastguard Worker #endif
30*de1e4e89SAndroid Build Coastguard Worker 
31*de1e4e89SAndroid Build Coastguard Worker #ifndef MS_SLAVE
32*de1e4e89SAndroid Build Coastguard Worker #define MS_SLAVE	(1 << 19)
33*de1e4e89SAndroid Build Coastguard Worker #endif
34*de1e4e89SAndroid Build Coastguard Worker 
35*de1e4e89SAndroid Build Coastguard Worker #ifndef MS_SHARED
36*de1e4e89SAndroid Build Coastguard Worker #define MS_SHARED	(1 << 20)
37*de1e4e89SAndroid Build Coastguard Worker #endif
38*de1e4e89SAndroid Build Coastguard Worker 
39*de1e4e89SAndroid Build Coastguard Worker #ifndef HAVE_SETNS
setns(int fd,int nstype)40*de1e4e89SAndroid Build Coastguard Worker static inline int setns(int fd, int nstype)
41*de1e4e89SAndroid Build Coastguard Worker {
42*de1e4e89SAndroid Build Coastguard Worker #ifdef __NR_setns
43*de1e4e89SAndroid Build Coastguard Worker 	return syscall(__NR_setns, fd, nstype);
44*de1e4e89SAndroid Build Coastguard Worker #else
45*de1e4e89SAndroid Build Coastguard Worker 	errno = ENOSYS;
46*de1e4e89SAndroid Build Coastguard Worker 	return -1;
47*de1e4e89SAndroid Build Coastguard Worker #endif
48*de1e4e89SAndroid Build Coastguard Worker }
49*de1e4e89SAndroid Build Coastguard Worker #endif /* HAVE_SETNS */
50*de1e4e89SAndroid Build Coastguard Worker 
51*de1e4e89SAndroid Build Coastguard Worker int netns_switch(char *netns);
52*de1e4e89SAndroid Build Coastguard Worker int netns_get_fd(const char *netns);
53*de1e4e89SAndroid Build Coastguard Worker int netns_foreach(int (*func)(char *nsname, void *arg), void *arg);
54*de1e4e89SAndroid Build Coastguard Worker 
55*de1e4e89SAndroid Build Coastguard Worker struct netns_func {
56*de1e4e89SAndroid Build Coastguard Worker 	int (*func)(char *nsname, void *arg);
57*de1e4e89SAndroid Build Coastguard Worker 	void *arg;
58*de1e4e89SAndroid Build Coastguard Worker };
59*de1e4e89SAndroid Build Coastguard Worker 
60*de1e4e89SAndroid Build Coastguard Worker #endif /* __NAMESPACE_H__ */
61