Added patch for 2.6.33.x kernel.
This commit is contained in:
@@ -16,13 +16,17 @@ Preliminary Mininet Installation/Configuration Notes
|
|||||||
so that 'import mininet' will work, and installs the primary mn
|
so that 'import mininet' will work, and installs the primary mn
|
||||||
script (mn) as well as its helper utility (mnexec.)
|
script (mn) as well as its helper utility (mnexec.)
|
||||||
|
|
||||||
- Mininet requires a kernel built with support for the CLONE_NETNS unshare
|
- Mininet requires a kernel built with network namespace support enabled,
|
||||||
flag by default (i.e. with CONFIG_NET_NS turned on.)
|
i.e. with CONFIG_NET_NS=Y
|
||||||
|
|
||||||
If your kernel doesn't support it, you will need to build and install a
|
If your kernel doesn't support it, you will need to build and install a
|
||||||
kernel that does! >= 2.6.33 works best, although the reference kernel
|
kernel that does! >= 2.6.33 works best, but requires a patch to
|
||||||
switch requires a small patch to compile with it (see below.)
|
ofdatapath and to tun.c (see patches [1] and [2], below.)
|
||||||
|
|
||||||
|
2.6.26 works with CONFIG_NET_NS enabled and no additional patches, but
|
||||||
|
it is much slower at removing veth interfaces, resulting in much slower
|
||||||
|
switch shutdown.
|
||||||
|
|
||||||
- Mininet should probably be run either on a machine with
|
- Mininet should probably be run either on a machine with
|
||||||
no other important processes, or on a virtual machine.
|
no other important processes, or on a virtual machine.
|
||||||
Multiple concurrent Mininet instances are not supported.
|
Multiple concurrent Mininet instances are not supported.
|
||||||
@@ -71,8 +75,13 @@ Preliminary Mininet Installation/Configuration Notes
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
patch to OpenFlow reference implementation datapath/datapath.c to compile
|
[1] OpenFlow Reference Implementation patch for Linux 2.6.33/2.6.33.1
|
||||||
under linux 2.6.33:
|
|
||||||
|
The OpenFlow kernel reference implementation does not compile out of the box
|
||||||
|
on Linux 2.6.33/2.6.33.1 with network namespaces enabled.
|
||||||
|
|
||||||
|
The following workaround modifies it to always use the root namespace, and should
|
||||||
|
enable it to work with Mininet under 2.6.33.x:
|
||||||
|
|
||||||
diff --git a/datapath/datapath.c b/datapath/datapath.c
|
diff --git a/datapath/datapath.c b/datapath/datapath.c
|
||||||
index 4a4d3a2..365aa25 100644
|
index 4a4d3a2..365aa25 100644
|
||||||
@@ -100,3 +109,26 @@ index 4a4d3a2..365aa25 100644
|
|||||||
+#endif
|
+#endif
|
||||||
: genlmsg_multicast(skb, 0, dp_mc_group(dp), GFP_ATOMIC));
|
: genlmsg_multicast(skb, 0, dp_mc_group(dp), GFP_ATOMIC));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[2] Linux kernel 2.6.33/2.6.33.1 tun driver patch
|
||||||
|
|
||||||
|
The tun driver in Linux 2.6.33/2.6.33.1 doesn't work correctly in a network
|
||||||
|
namespace. As a result, running the user datapath in a network namespace
|
||||||
|
(e.g. as is done in examples/scratchnetuser.py) will cause a kernel panic
|
||||||
|
when sysfs cannot create an entry for a tap interface, since the tun network
|
||||||
|
device has a missing parent kobj. As a workaround, the following patch
|
||||||
|
skips creating the sysfs entries when this is the case. This is an acceptable
|
||||||
|
workaround as long as sysfs entries for tap interfaces are not being actively
|
||||||
|
used (and they are not currently in Mininet.)
|
||||||
|
|
||||||
|
diff linux-2.6.33.1/drivers/net/tun-orig.c linux-2.6.33.1/drivers/net/tun.c
|
||||||
|
1009c1009,1011
|
||||||
|
< if (device_create_file(&tun->dev->dev, &dev_attr_tun_flags) ||
|
||||||
|
---
|
||||||
|
> /* BL workaround: check for null parent kobj */
|
||||||
|
> if (!tun->dev->dev.kobj.sd ||
|
||||||
|
> device_create_file(&tun->dev->dev, &dev_attr_tun_flags) ||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user