https://github.com/mininet/mininet/issues/1161
Hello,
I am having problems with certain system parameters not being accessible from within a Mininet host even though they are accessible from the host system.
After a clean install with the following:
- Ubuntu 20.04.5 LTS
- The 5.4.230.mptcp kernel
I get the following output when running sysctl -a | grep mptcp
outside Mininet:
net.mptcp.mptcp_checksum = 1
net.mptcp.mptcp_debug = 0
net.mptcp.mptcp_enabled = 1
net.mptcp.mptcp_path_manager = fullmesh
net.mptcp.mptcp_scheduler = default
net.mptcp.mptcp_syn_retries = 3
net.mptcp.mptcp_version = 0
which is correct. But when I do the same from within a Mininet host by starting Mininet with the default topology:
sudo mn
and then running the sysctl command on, for instance, the h1 node:
mininet> h1 sysctl -a | grep mptcp
I dont get any output. In other words, the system parameters can't be found by sysctl -a from within a Mininet host.
Expected/Desired Behavior:
mininet> h1 sysctl -a | grep mptcp
=>
net.mptcp.mptcp_checksum = 1
net.mptcp.mptcp_debug = 0
net.mptcp.mptcp_enabled = 1
net.mptcp.mptcp_path_manager = fullmesh
net.mptcp.mptcp_scheduler = default
net.mptcp.mptcp_syn_retries = 3
net.mptcp.mptcp_version = 0
Actual Behavior:
mininet> h1 sysctl -a | grep mptcp
=>
[No output]
Detailed Steps to Reproduce the Behavior
- Install "Ubuntu 20.04.5 LTS" and the "5.4.230.mptcp" kernel.
- Run
sudo mn
- Inside the Mininet console execute
sysctl -a | grep mptcp
- Compare output when running it outside the host
Additional Information
The following people seems to have had the same problem:
Here are some outputs from both the host system and from within a Mininet host. It seems to be the same output regardless of if sudo
or not is used in both cases.
Command | Result in Ubuntu (outside a Mininet host) | Result from within a Mininet host |
---|---|---|
ip netns identify $$ |
[No output] | [No output] |
ls /proc/net/mptcp_net/ |
mptcp snmp | mptcp snmp |
readlink /proc/self/ns/net |
net:[4026532008] | net:[4026533846] (differs between Mininet hosts) |
ls /proc/sys/net/mptcp |
mptcp_checksum mptcp_debug mptcp_enabled mptcp_path_manager mptcp_scheduler mptcp_syn_retries mptcp_version | [No output] |
I think it's relevant to note that creating hosts with inNamespace=False
:
h1 = net.addHost('h1', inNamespace=False) # don't spawn in net namespaces h2 = net.addHost('h2', inNamespace=False) # don't spawn in net namespaces r1 = net.addHost('r1', inNamespace=False) # don't spawn in net namespaces
results in me being able to see the system parameters from inside a Mininet host by running sysctl -a | grep mptcp
. While this solves the access problem it seems to result in the network parameters that you can set for each Mininet host to be ignored.
I think I somehow need to figure out how I can mount the namespace or perhaps the "/proc/sys/net/mptcp" folder. Running mount --bind /proc/sys/net/mptcp
from within a Mininet host just results it:
mount: /proc/sys/net/mptcp: mount point does not exist.