forked from mininet/mininet.github.com
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
268 lines (211 loc) · 17.1 KB
/
Copy pathatom.xml
File metadata and controls
268 lines (211 loc) · 17.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[Mininet]]></title>
<link href="http://mininet.github.com/atom.xml" rel="self"/>
<link href="http://mininet.github.com/"/>
<updated>2013-07-15T13:55:07-07:00</updated>
<id>http://mininet.github.com/</id>
<author>
<name><![CDATA[Mininet Team]]></name>
</author>
<generator uri="http://octopress.org/">Octopress</generator>
<entry>
<title type="html"><![CDATA[Nick Feamster's SDN Course]]></title>
<link href="http://mininet.github.com/blog/2013/07/11/sdn-course/"/>
<updated>2013-07-11T17:53:00-07:00</updated>
<id>http://mininet.github.com/blog/2013/07/11/sdn-course</id>
<content type="html"><![CDATA[<p>I just want to put in a recommendation for Nick Feamster’s excellent Software Defined Networking course. It’s free on Coursera, and not only does he do a great job of clearly explaining SDN, network virtualization, and related topics, he has also created some excellent videos explaining the usage, design, and rationale for the Mininet system, which is also being used for programming assignments and labs in the course. </p>
<p>There are also interesting interviews with notable people like Martin Casado, David Clark, and Teemu Koponen. It’s quite excellent, very approachable for anyone who has a basic networking background, and highly recommended:</p>
<p><a href="https://www.coursera.org/course/sdn">https://www.coursera.org/course/sdn</a></p>
<p>The course has already started, but as of today (Thursday July 11th) you can still sign up for it.</p>
<p>-Bob</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Automating Controller Startup]]></title>
<link href="http://mininet.github.com/blog/2013/06/03/automating-controller-startup/"/>
<updated>2013-06-03T15:50:00-07:00</updated>
<id>http://mininet.github.com/blog/2013/06/03/automating-controller-startup</id>
<content type="html"><![CDATA[<p>One of Mininet’s key features is that it makes it very easy to create
a complete virtual network including hosts, switches, links and
OpenFlow controllers. By default, Mininet runs Open vSwitch
in OpenFlow mode, which requires an OpenFlow controller.</p>
<p>As you probably know, Mininet comes with built-in Controller() classes to
support several controllers, including the OpenFlow reference controller
(<code>controller</code>), Open vSwitch’s <code>ovs-controller</code>,
and the now-deprecated NOX Classic.</p>
<p>You can easily choose which one you want when you invoke the <code>mn</code> command:</p>
<pre><code>sudo mn --controller ref
sudo mn --controller ovsc
sudo mn --controller NOX,pyswitch
</code></pre>
<p>Each of the above examples uses a controller which turns your OVS switches
into Ethernet bridges (aka learning switches.)</p>
<p>Note that <code>ovsc</code> is easy to install but only supports 16 switches.
You can install the reference controller (patched to support many switches)
using <code>install.sh -f</code>. (As of this writing, you can also install NOX
Classic using <code>install.sh -x</code>.)</p>
<h2 id="the-manual-way-using-remote-controllers">The manual way: using remote controllers</h2>
<p>But what do you do if you want another controller like POX? Well, one
way is to start up POX (or Beacon, Floodlight, etc.) in another terminal
window and then use <code>--controller remote</code>:</p>
<pre><code>sudo mn --controller remote,ip=127.0.0.1
</code></pre>
<p>If your controller is running locally, you can just use</p>
<pre><code>sudo mn --controller remote
</code></pre>
<p>You might be asking: is there a way for Mininet to automatically start
up my controller so that I don’t have to do it manually? The answer is,
of course, yes!</p>
<h2 id="the-automatic-way-1-using-the-command-line">The automatic way #1: using the command line</h2>
<p>The latest Mininet <code>master</code> branch allows you to change the command and
arguments for <code>--controller ref</code> to invoke another controller as
desired. For example, here’s how you could invoke POX:</p>
<pre><code>sudo mn --controller ref,command='python pox.py',cdir=$HOME/pox,cargs='openflow.of_01 --port=%s forwarding.l2_learning'
</code></pre>
<p>Note the following options:</p>
<p><code>cdir</code>: the directory to change to before invoking the controller</p>
<p><code>command</code>: the command to start your controller</p>
<p><code>cargs</code>: the controller’s arguments (including <code>%s</code> for wherever the controller’s listening port should go)</p>
<h2 id="the-super-automatic-way-2-creating-a-custom-controller-subclass">The super automatic way #2: creating a custom <code>Controller()</code> subclass</h2>
<p>This is much easier than it sounds, and it has worked in Mininet since
version 1.0!</p>
<p>Here is a custom class for POX’s l2_learning:</p>
<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
</pre></td><td class="code"><pre><code class="python"><span class="line"><span class="kn">from</span> <span class="nn">mininet.node</span> <span class="kn">import</span> <span class="n">Controller</span>
</span><span class="line"><span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">environ</span>
</span><span class="line">
</span><span class="line"><span class="n">POXDIR</span> <span class="o">=</span> <span class="n">environ</span><span class="p">[</span> <span class="s">'HOME'</span> <span class="p">]</span> <span class="o">+</span> <span class="s">'/pox'</span>
</span><span class="line">
</span><span class="line"><span class="k">class</span> <span class="nc">POX</span><span class="p">(</span> <span class="n">Controller</span> <span class="p">):</span>
</span><span class="line"> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span> <span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">cdir</span><span class="o">=</span><span class="n">POXDIR</span><span class="p">,</span>
</span><span class="line"> <span class="n">command</span><span class="o">=</span><span class="s">'python pox.py'</span><span class="p">,</span>
</span><span class="line"> <span class="n">cargs</span><span class="o">=</span><span class="p">(</span> <span class="s">'openflow.of_01 --port=</span><span class="si">%s</span><span class="s"> '</span>
</span><span class="line"> <span class="s">'forwarding.l2_learning'</span> <span class="p">),</span>
</span><span class="line"> <span class="o">**</span><span class="n">kwargs</span> <span class="p">):</span>
</span><span class="line"> <span class="n">Controller</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span> <span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">cdir</span><span class="o">=</span><span class="n">cdir</span><span class="p">,</span>
</span><span class="line"> <span class="n">command</span><span class="o">=</span><span class="n">command</span><span class="p">,</span>
</span><span class="line"> <span class="n">cargs</span><span class="o">=</span><span class="n">cargs</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span> <span class="p">)</span>
</span><span class="line">
</span><span class="line"><span class="n">controllers</span><span class="o">=</span><span class="p">{</span> <span class="s">'pox'</span><span class="p">:</span> <span class="n">POX</span> <span class="p">}</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>With this class saved into <code>pox.py</code>, you can now do the following:</p>
<pre><code>sudo mn --custom pox.py --controller pox
</code></pre>
<p>Additionally you can use the custom class in your Mininet scripts</p>
<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
</pre></td><td class="code"><pre><code class="python"><span class="line"><span class="c">#!/usr/bin/python</span>
</span><span class="line">
</span><span class="line"><span class="kn">from</span> <span class="nn">mininet.log</span> <span class="kn">import</span> <span class="n">setLogLevel</span>
</span><span class="line"><span class="kn">from</span> <span class="nn">mininet.net</span> <span class="kn">import</span> <span class="n">Mininet</span>
</span><span class="line"><span class="kn">from</span> <span class="nn">mininet.topolib</span> <span class="kn">import</span> <span class="n">TreeTopo</span>
</span><span class="line"><span class="kn">from</span> <span class="nn">mininet.cli</span> <span class="kn">import</span> <span class="n">CLI</span>
</span><span class="line">
</span><span class="line"><span class="c"># We assume you are in the same directory as pox.py</span>
</span><span class="line"><span class="c"># or that it is loadable via PYTHONPATH</span>
</span><span class="line"><span class="kn">from</span> <span class="nn">pox</span> <span class="kn">import</span> <span class="n">POX</span>
</span><span class="line">
</span><span class="line"><span class="n">setLogLevel</span><span class="p">(</span> <span class="s">'info'</span> <span class="p">)</span>
</span><span class="line">
</span><span class="line"><span class="n">net</span> <span class="o">=</span> <span class="n">Mininet</span><span class="p">(</span> <span class="n">topo</span><span class="o">=</span><span class="n">TreeTopo</span><span class="p">(</span> <span class="n">depth</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">fanout</span><span class="o">=</span><span class="mi">2</span> <span class="p">),</span>
</span><span class="line"> <span class="n">controller</span><span class="o">=</span><span class="n">POX</span> <span class="p">)</span>
</span><span class="line">
</span><span class="line"><span class="n">net</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
</span><span class="line"><span class="n">CLI</span><span class="p">(</span> <span class="n">net</span> <span class="p">)</span>
</span><span class="line"><span class="n">net</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>
<p>Note that in this custom class we’ve simply changed
<code>__init__</code>, but in a more complicated example you might
wish to change the <code>start()</code> and <code>stop()</code> methods as
well.</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Mininet at CoNEXT 2012]]></title>
<link href="http://mininet.github.com/blog/2012/12/06/mininet-at-conext-2012/"/>
<updated>2012-12-06T15:20:00-08:00</updated>
<id>http://mininet.github.com/blog/2012/12/06/mininet-at-conext-2012</id>
<content type="html"><![CDATA[<p>We’re going to France. No, really!</p>
<p>Join us next week, December 10th to 13th at
the <a href="http://conferences.sigcomm.org/co-next/2012/program.html">ACM Conference on Network EXperiments and Technologies, CoNEXT 2012</a>,
where Brandon will be presenting our “runnable” paper on Mininet 2.0 “HiFi”:</p>
<p><a href="http://conferences.sigcomm.org/co-next/2012/eproceedings/conext/p253.pdf"><em>Reproducible Network Experiments using Container-Based Emulation</em></a></p>
<p>We look forward to meeting many current, new, and future Mininet users,
developers, researchers and contributors!</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Announcing Mininet 2.0.0]]></title>
<link href="http://mininet.github.com/blog/2012/11/27/announcing-mininet-2-dot-0-0/"/>
<updated>2012-11-27T17:41:00-08:00</updated>
<id>http://mininet.github.com/blog/2012/11/27/announcing-mininet-2-dot-0-0</id>
<content type="html"><![CDATA[<p>We are pleased to announce the availability of <a href="http://mininet.github.com/download">Mininet 2.0.0</a>!</p>
<p>In the last few years, the Mininet community has grown from a few users at Stanford to an active mailing list with over 500 members in academia, startups, and industry.</p>
<p>Version 2 (“HiFi”) is a major upgrade that expands Mininet’s scope from functional testing (“does my network control plane work?”) to performance testing (“how well does my custom congestion control perform with 10 Mb/s links?”). New APIs now allow you to create links with specified bandwidths, latencies and loss rates, and to limit the CPU usage of virtual hosts. Using these new features, 37 students in Stanford University’s Advanced Topics in Networking course (CS244) replicated 16 published research experiments; you’re encouraged to browse their stories at <a href="http://reproducingnetworkresearch.wordpress.com/">The Reproducing Network Research Blog</a>.</p>
<p>Other new features of Mininet 2.0.0 include:</p>
<ul>
<li>An all-new website, <a href="http://mininet.github.com">http://mininet.github.com</a>, with <a href="http://mininet.github.com/api">online doxypy documentation</a> for all classes.</li>
<li>More flexible <code>mn</code> command line options, including the ability to specify NOX (and, in the future, POX) modules from the <code>mn</code> command line, and the ability to set link and CPU bandwidth limits</li>
<li>Dynamic link reconnection in OVS (supports migration and mobility emulation)</li>
<li>First-class abstractions/classes for link (<code>Link</code>) and interface (<code>Intf</code>) objects</li>
<li>Interface/link bandwidth limiting support using <code>tc</code>, via <code>TCIntf</code> and <code>TCLink</code> classes</li>
<li>CPU bandwidth limiting supporting both CFS bandwidth limiting and POSIX real-time scheduling, via the CPULimitedHost class</li>
<li>Easier task execution on virtual hosts via the <code>Host.Popen()</code> interface, implemented in <code>mnexec</code> using the <code>setns</code> system call</li>
<li>Easier and faster native installations that can use the latest Open vSwitch packages.</li>
</ul>
<p>Note that the <code>Topo</code> object has changed somewhat to enable more flexible topology params, and as a result, your old code may need a few changes.</p>
<p>Download and installation instructions are available at <a href="http://mininet.github.com/download">http://mininet.github.com/download</a> and Mininet source code may be found at <a href="https://github.com/mininet/mininet">https://github.com/mininet/mininet</a>. We welcome new feature implementations, bug fixes, bug reports, FAQ additions and other contributions, and we look forward to high-quality discussions on <a href="https://mailman.stanford.edu/mailman/listinfo/mininet-discuss"><code>mininet-discuss</code></a>.</p>
<p>Thanks to all the code contributors, bug reporters, and active users who helped make this release possible!</p>
<p>The Mininet Team</p>
<ul>
<li>Bob Lantz</li>
<li>Brandon Heller</li>
<li>Nikhil Handigol</li>
<li>Vimalkumar Jeyakumar</li>
</ul>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Website Updated]]></title>
<link href="http://mininet.github.com/blog/2012/08/23/website-updated/"/>
<updated>2012-08-23T18:08:00-07:00</updated>
<id>http://mininet.github.com/blog/2012/08/23/website-updated</id>
<content type="html"><![CDATA[<p>The old website had an obscure, needed-Google-to-find-it address, and was generated server-side, so it could be a bit slow. The new page you’re seeing was built with Octopress and is hosted on GitHub Pages. Since it’s all statically generated pages now, it should load super-quick, and it’ll be easier to add blog entries and do page customization. </p>
<p>Try it out, and let us know what you think!</p>
<p>-The Mininet Team</p>
]]></content>
</entry>
</feed>