carlosmscabral | f40ecd1 | 2013-02-01 18:15:58 -0200 | [diff] [blame] | 1 | |
| 2 | Mininet: Rapid Prototyping for Software Defined Networks |
| 3 | ======================================================== |
| 4 | |
| 5 | *The best way to emulate almost any network on your laptop!* |
| 6 | |
| 7 | Version 2.0.0 |
| 8 | |
| 9 | ### What is Mininet? |
| 10 | |
| 11 | Mininet emulates a complete network of hosts, links, and switches |
| 12 | on a single machine. To create a sample two-host, one-switch network, |
| 13 | just run: |
| 14 | |
| 15 | `sudo mn` |
| 16 | |
| 17 | Mininet is useful for interactive development, testing, and demos, |
| 18 | especially those using OpenFlow and SDN. OpenFlow-based network |
| 19 | controllers prototyped in Mininet can usually be transferred to |
| 20 | hardware with minimal changes for full line-rate execution. |
| 21 | |
| 22 | ### How does it work? |
| 23 | |
| 24 | Mininet creates virtual networks using process-based virtualization |
| 25 | and network namespaces - features that are available in recent Linux |
| 26 | kernels. In Mininet, hosts are emulated as `bash` processes running in |
| 27 | a network namespace, so any code that would normally run on a Linux |
| 28 | server (like a web server or client program) should run just fine |
| 29 | within a Mininet "Host". The Mininet "Host" will have its own private |
| 30 | network interface and can only see its own processes. Switches in |
| 31 | Mininet are software-based switches like Open vSwitch or the OpenFlow |
| 32 | reference switch. Links are virtual ethernet pairs, which live in the |
| 33 | Linux kernel and connect our emulated switches to emulated hosts |
| 34 | (processes). |
| 35 | |
| 36 | ### Features |
| 37 | |
| 38 | Mininet includes: |
| 39 | |
| 40 | * A command-line launcher (`mn`) to instantiate networks. |
| 41 | |
| 42 | * A handy Python API for creating networks of varying sizes and |
| 43 | topologies. |
| 44 | |
| 45 | * Examples (in the `examples/` directory) to help you get started. |
| 46 | |
| 47 | * Full API documentation via Python `help()` docstrings, as well as |
| 48 | the ability to generate PDF/HTML documentation with `make doc`. |
| 49 | |
| 50 | * Parametrized topologies (`Topo` subclasses) using the Mininet |
| 51 | object. For example, a tree network may be created with the |
| 52 | command: |
| 53 | |
| 54 | `mn --topo tree,depth=2,fanout=3` |
| 55 | |
| 56 | * A command-line interface (`CLI` class) which provides useful |
| 57 | diagnostic commands (like `iperf` and `ping`), as well as the |
| 58 | ability to run a command to a node. For example, |
| 59 | |
| 60 | `mininet> h11 ifconfig -a` |
| 61 | |
| 62 | tells host h11 to run the command `ifconfig -a` |
| 63 | |
| 64 | * A "cleanup" command to get rid of junk (interfaces, processes, files |
| 65 | in /tmp, etc.) which might be left around by Mininet or Linux. Try |
| 66 | this if things stop working! |
| 67 | |
| 68 | `mn -c` |
| 69 | |
| 70 | ### New features in 2.0.0 |
| 71 | |
| 72 | Mininet 2.0.0 is a major upgrade and provides |
| 73 | a number of enhancements and new features, including: |
| 74 | |
| 75 | * "Mininet-HiFi" functionality: |
| 76 | |
| 77 | * Link bandwidth limits using `tc` (`TCIntf` and `TCLink` classes) |
| 78 | |
| 79 | * CPU isolation and bandwidth limits (`CPULimitedHost` class) |
| 80 | |
| 81 | * Support for Open vSwitch 1.4+ (including Ubuntu OVS packages) |
| 82 | |
| 83 | * Debian packaging (and `apt-get install mininet` in Ubuntu 12.10) |
| 84 | |
| 85 | * First-class Interface (`Intf`) and Link (`Link`) classes for easier |
| 86 | extensibility |
| 87 | |
| 88 | * An upgraded Topology (`Topo`) class which supports node and link |
| 89 | customization |
| 90 | |
| 91 | * Man pages for the `mn` and `mnexec` utilities. |
| 92 | |
| 93 | [Since the API (most notably the topology) has changed, existing code |
| 94 | that runs in Mininet 1.0 will need to be changed to run with Mininet |
| 95 | 2.0. This is the primary reason for the major version number change.] |
| 96 | |
| 97 | ### Installation |
| 98 | |
| 99 | See `INSTALL` for installation instructions and details. |
| 100 | |
| 101 | ### Documentation |
| 102 | |
| 103 | In addition to the API documentation (`make doc`), much useful |
| 104 | information, including a Mininet walkthrough and an introduction |
| 105 | to the Python API, is available on the |
| 106 | [Mininet Web Site](http://openflow.org/mininet). |
| 107 | There is also a wiki which you are encouraged to read and to |
| 108 | contribute to, particularly the Frequently Asked Questions (FAQ.) |
| 109 | |
| 110 | ### Support |
| 111 | |
| 112 | Mininet is community-supported. We encourage you to join the |
| 113 | Mininet mailing list, `mininet-discuss` at: |
| 114 | |
| 115 | <https://mailman.stanford.edu/mailman/listinfo/mininet-discuss> |
| 116 | |
| 117 | ### Contributing |
| 118 | |
| 119 | Mininet is an open-source project and is currently hosted at |
| 120 | <https://github.com/mininet>. You are encouraged to download the code, |
| 121 | examine it, modify it, and submit bug reports, bug fixes, feature |
| 122 | requests, and enhancements! |
| 123 | |
| 124 | Best wishes, and we look forward to seeing what you can do with |
| 125 | Mininet to change the networking world! |
| 126 | |
| 127 | ### Credits |
| 128 | |
| 129 | The Mininet Team: |
| 130 | |
| 131 | * Bob Lantz |
| 132 | * Brandon Heller |
| 133 | * Nikhil Handigol |
| 134 | * Vimal Jeyakumar |