diff options
author | Dongsu Park <dongsu@kinvolk.io> | 2017-11-24 18:22:17 +0100 |
---|---|---|
committer | Iago López Galeiras <iago@kinvolk.io> | 2017-12-13 10:21:06 +0000 |
commit | d7bea6b6299677fe0b5ddc73ff313f93c3d453c7 (patch) | |
tree | 2756c012eaa6a89d5e13669b2f754f49d3a924c5 /src/basic/stat-util.c | |
parent | cb9eeb062c323391fcd98da0c30e844fa5162e90 (diff) | |
download | systemd-d7bea6b6299677fe0b5ddc73ff313f93c3d453c7.tar.gz |
nspawn: introduce an option for specifying network namespace path
Add a new option `--network-namespace-path` to systemd-nspawn to allow
users to specify an arbitrary network namespace, e.g. `/run/netns/foo`.
Then systemd-nspawn will open the netns file, pass the fd to
outer_child, and enter the namespace represented by the fd before
running inner_child.
```
$ sudo ip netns add foo
$ mount | grep /run/netns/foo
nsfs on /run/netns/foo type nsfs (rw)
...
$ sudo systemd-nspawn -D /srv/fc27 --network-namespace-path=/run/netns/foo \
/bin/readlink -f /proc/self/ns/net
/proc/1/ns/net:[4026532009]
```
Note that the option `--network-namespace-path=` cannot be used together
with other network-related options such as `--private-network` so that
the options do not conflict with each other.
Fixes https://github.com/systemd/systemd/issues/7361
Diffstat (limited to 'src/basic/stat-util.c')
-rw-r--r-- | src/basic/stat-util.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c index c6b8507e9d..96fc8b3787 100644 --- a/src/basic/stat-util.c +++ b/src/basic/stat-util.c @@ -226,6 +226,18 @@ int fd_is_temporary_fs(int fd) { return is_temporary_fs(&s); } +int fd_is_network_ns(int fd) { + int r; + + r = fd_is_fs_type(fd, NSFS_MAGIC); + if (r <= 0) + return r; + r = ioctl(fd, NS_GET_NSTYPE); + if (r < 0) + return -errno; + return r == CLONE_NEWNET; +} + int path_is_temporary_fs(const char *path) { _cleanup_close_ int fd = -1; |