23 Commits
Author SHA1 Message Date
lantz 0cefa0b8de Add fallback to old mnexec -c method (#1183)
If opendir("/proc/self/fd") fails, fall back to the old
method of closing all file decriptors from 3-1024 (getdtablesize()).
2023-05-02 16:17:49 -07:00
lantz 1b4c7d706d Use /proc/self/fd for open fd list (#1182)
mnexec -c attempts to close all open files except for
standard in/out/error.

Previously we just closed every fd>2, but this seems to take
a long time on docker. So now we read /proc/self/fd to see which
file descriptors are actually in use.
2023-05-02 15:27:27 -07:00
Tomasz Buchert 96ea5367db mnexec: properly setup the mount namespace
Systemd's default is to mark the root mount as shared and it is
inherited as such by the new mount namespace. This means that any
mounts performed inthe new namespace will be visible by the rest of
the system, breaking privateDirs.

To restore a more sane behaviour, we explicitly mark all mounts
recursively as private, meaning that we will no longer see new mounts
from the root namespace, and our mounts will also not propagate to the
rest of the system.

Fixes #565
2015-11-18 11:47:50 -08:00
Bob Lantz 9b5fa1d7ed Always chdir() to current working directory. 2014-11-10 16:57:12 -08:00
Bob Lantz b85943dc0a chdir() to correct path after calling chroot()
Since chroot() doesn't chdir() by default, we are left in
an unreachable directory in node.pexec() (and in xterms.)

fixes #370
2014-09-04 02:22:13 -07:00
Bob Lantz bfdbb7089a Fall back to chroot() if setns() fails for mnt namespace
fixes #347
2014-08-26 14:09:40 -07:00
Cody Burkard 9c3ecfe338 conforming to mininet style 2014-07-02 10:53:41 -07:00
Cody Burkard 6a81b6dfb3 added persistence option to HostWithPrivateDirs. also attached mount namespaces when mnexec -a is specified 2014-06-19 15:08:26 -07:00
Rich Lane 5461565945 mnexec: mount sysfs in each container
The sysfs filesystem is [tagged][1] with a set of namespaces when mounted, taken
from the mounting process. Among other things, this controls which network
devices will show up in /sys/class/net and /sys/class/net/bonding_masters.

Without this change, mininet will not mount sysfs in a node. Attempting to
configure a bond interface in a node will only affect the parent namespace.

This change mounts a new sysfs filesystem in each node. To prevent this mount
from affecting the parent namespace the mount namespace is also unshared.

[1]: https://www.kernel.org/doc/Documentation/filesystems/sysfs-tagging.txt
2013-11-18 17:05:09 -08:00
Jose Pedro Oliveira 8f80f875b5 Change cgroup() return type from int to void (avoids a gcc warning) 2013-09-28 01:42:05 +01:00
Jose Pedro Oliveira 2941bbae2d Defines _GNU_SOURCE (required by the unshare syscall) 2013-09-28 01:37:51 +01:00
Jose Pedro Oliveira f5737aa3cc The header file limits.h was being included twice 2013-09-28 01:34:01 +01:00
Jose Pedro Oliveira b8fd3d2d8e Fixes compiler warning: control reaches end of non-void function 2013-09-19 15:26:26 +01:00
Jose Pedro Oliveira 387250cd83 Fixes compiler warning: implicit declaration of function 'isalnum' 2013-09-19 15:25:22 +01:00
Zi Shen Lim cae7be1a60 mnexec: getopt bugfix
getopt returns an 'int', so use change datatype of 'c' to match it.
Otherwise, 'c' may hold a value of 255 (0xff), and fail the comparison
with -1 (0xffffffff): while ((c = getopt(...)) != -1)

This bug was uncovered on Ubuntu 13.04 running on ARM, using
arm-linux-gnueabihf-gcc4.7.
2013-09-18 10:33:15 -07:00
Vitaliy Ivanov 36bf8ac911 mnexec.c: substituting tabs with spaces. 2013-07-15 13:17:56 +03:00
Bob Lantz 33c7e46492 Use __NR_setns so that setns has the right syscall # in 32-bit mode
fixes #127
2013-04-09 19:38:36 -07:00
Bob Lantz d85a58feeb Autogenerate man page for mnexec. 2012-07-06 23:18:24 -07:00
Bob Lantz df600200a7 CPULimiteHost.popen(): set cgroup and (optionally) RT priority 2012-04-13 15:50:45 -07:00
Bob Lantz e78e8fb56a Add support for attaching to network namespace using setns(2) 2012-04-13 15:50:45 -07:00
Bob Lantz 51a1482407 Removed unused variable. 2010-03-14 00:03:54 -08:00
Bob Lantz bcacfc0510 Support for control-C. Finally.
I've changed the way things work a bit:

1. netns is replaced by mnexec, a general-purpose mininet helper.

2. For interactive commands, we now use mnexec -p, which prints out
   the pid, so we can kill it when someone hits control-C!

3. We close file descriptors for subshells. This might save memory,
   but who knows.

4. We detach our subshells from the tty using mnexec -s; thus
   control-C should not terminate everything.

5. Given 4, mn -c is now necessary if you kill mininet.
2010-03-13 18:23:07 -08:00
Bob Lantz c4ae423238 Support for control-C. Finally.
I've changed the way things work a bit:

1. netns is replaced by mnexec, a general-purpose mininet helper.

2. For interactive commands, we now use mnexec -p, which prints out
   the pid, so we can kill it when someone hits control-C!

3. We close file descriptors for subshells. This might save memory,
   but who knows.

4. We detach our subshells from the tty using mnexec -s; thus
   control-C should not terminate everything.

5. Given 4, mn -c is now necessary if you kill mininet.
2010-03-13 18:19:23 -08:00