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