<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.nsnam.org/mediawiki/index.php?action=history&amp;feed=atom&amp;title=GSOC2010OpenFlow%2FMidTermReport</id>
	<title>GSOC2010OpenFlow/MidTermReport - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.nsnam.org/mediawiki/index.php?action=history&amp;feed=atom&amp;title=GSOC2010OpenFlow%2FMidTermReport"/>
	<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2010OpenFlow/MidTermReport&amp;action=history"/>
	<updated>2026-05-05T14:17:31Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2010OpenFlow/MidTermReport&amp;diff=7294&amp;oldid=prev</id>
		<title>Vedranm: Remove manual links and replace them with wiki links</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2010OpenFlow/MidTermReport&amp;diff=7294&amp;oldid=prev"/>
		<updated>2013-02-10T16:52:59Z</updated>

		<summary type="html">&lt;p&gt;Remove manual links and replace them with wiki links&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:52, 10 February 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;My approach and deliverables are described in the project's&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;My approach and deliverables are described in the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[GSOC2010OpenFlow|&lt;/ins&gt;project's wiki page&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/ins&gt;].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;wiki page &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[http://www.nsnam.org/wiki/index.php/GSOC2010OpenFlow&lt;/del&gt;].&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The code I've produced so far is available in the ns-3 mercurial repository&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The code I've produced so far is available in the ns-3 mercurial repository&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Vedranm</name></author>
	</entry>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=GSOC2010OpenFlow/MidTermReport&amp;diff=4578&amp;oldid=prev</id>
		<title>Bhurd: Created page with 'My approach and deliverables are described in the project's wiki page [http://www.nsnam.org/wiki/index.php/GSOC2010OpenFlow].  The code I've produced so far is available in the n…'</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=GSOC2010OpenFlow/MidTermReport&amp;diff=4578&amp;oldid=prev"/>
		<updated>2010-07-09T17:09:34Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;#039;My approach and deliverables are described in the project&amp;#039;s wiki page [http://www.nsnam.org/wiki/index.php/GSOC2010OpenFlow].  The code I&amp;#039;ve produced so far is available in the n…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;My approach and deliverables are described in the project's&lt;br /&gt;
wiki page [http://www.nsnam.org/wiki/index.php/GSOC2010OpenFlow].&lt;br /&gt;
&lt;br /&gt;
The code I've produced so far is available in the ns-3 mercurial repository&lt;br /&gt;
[http://code.nsnam.org/bhurd/ns-3-openflow].&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
This project will enable ns-3 simulations to use OpenFlow switches (McKeown&lt;br /&gt;
et al.), widely used in research. OpenFlow switches are configurable via the&lt;br /&gt;
OpenFlow API, and also have an MPLS extension for quality-of-service and&lt;br /&gt;
service-level-agreement support. By extending these capabilities to ns-3 for&lt;br /&gt;
a simulated OpenFlow switch that is both configurable and can use the MPLS&lt;br /&gt;
extension, ns-3 simulations can accurately simulate many different switches.&lt;br /&gt;
&lt;br /&gt;
The Switch module presents a SwitchNetDevice and a SwitchHelper for&lt;br /&gt;
installing it on nodes. Like the Bridge module, it takes a collection of&lt;br /&gt;
NetDevices to set up as ports, and it acts as the intermediary between them,&lt;br /&gt;
receiving a packet on one port and forwarding it on another, or all but the&lt;br /&gt;
received port when flooding. Like an OpenFlow switch, it maintains a&lt;br /&gt;
configurable flow table that can match packets by their headers and do&lt;br /&gt;
different actions with the packet based on how it matches. The module's&lt;br /&gt;
understanding of OpenFlow configuration messages are kept the same format as&lt;br /&gt;
a real OpenFlow-compatible switch, so users testing Controllers via ns-3&lt;br /&gt;
won't have to rewrite their Controller to work on real OpenFlow-compatible&lt;br /&gt;
switches.&lt;br /&gt;
&lt;br /&gt;
== Achievements ==&lt;br /&gt;
&lt;br /&gt;
The Switch module's basic design is finished, although there's a possibility&lt;br /&gt;
SwitchChannel will be removed before the project concludes (it's currently&lt;br /&gt;
superfluous). SwitchNetDevice has a working flow table and utilizes&lt;br /&gt;
openflow-interface.h{.cc} to integrate the OFSID code. It can receive&lt;br /&gt;
Packets from ns3 over its NetDevice ports, translate them into an OpenFlow&lt;br /&gt;
buffer to run through the flow table, then translate them back into Packets&lt;br /&gt;
and output via one or more (if flooding) ports.&lt;br /&gt;
&lt;br /&gt;
There's a test/demo (located in scratch/csma-switch.cc when downloading the&lt;br /&gt;
code) that sets up a simple SwitchNetDevice with 4 ports that each connect&lt;br /&gt;
to one node. Packets are then sent from node 0 to node 3 and from node 3 to&lt;br /&gt;
node 0 over 10 seconds. It is set to log all information messages from&lt;br /&gt;
SwitchNetDevice, which detail receiving a packet on a port and constructing&lt;br /&gt;
a flow for it. It currently has three modes (change the DeviceAttribute&lt;br /&gt;
&amp;quot;DemoType&amp;quot; to NONE, DROP, or LEARNING). The DROP and LEARNING modes make the&lt;br /&gt;
SwitchNetDevice configure its flow table to demonstrate the flow table's&lt;br /&gt;
usability. The DROP mode builds a flow for a received packet that just drops&lt;br /&gt;
the packet, so logging messages will show that two flows are created, one&lt;br /&gt;
for packets received from node 0, and one for packets received from node 3.&lt;br /&gt;
The first packet from these nodes create the flow that matches it, and the&lt;br /&gt;
packets that follow will match to the flow and be dropped accordingly. The&lt;br /&gt;
LEARNING mode builds a flow for a received packet that floods it amongst the&lt;br /&gt;
ports until its destination is matched to a port when another packet sourced&lt;br /&gt;
to the destination is received by the SwitchNetDevice.&lt;br /&gt;
&lt;br /&gt;
For details on how I've gotten here, check the Wiki's Progress section which&lt;br /&gt;
chronicles my week-to-week.&lt;br /&gt;
&lt;br /&gt;
== Future Goals ==&lt;br /&gt;
&lt;br /&gt;
*Once the csma-switch demo for showing OpenFlow functionality is done, create a second test for showing OpenFlow MPLS functionality.&lt;br /&gt;
*Incorporate ns-3 simulation clock.&lt;br /&gt;
*Incorporate ns-3-configurable parameters into the switch code.&lt;br /&gt;
*Explore ways of allowing controllers to access the ns-3 OpenFlow switches. If an rconn is created on a port, ethernet device, or tap, then you can run a separate controller program (a sample is in the OFSI code) to push IP packets with an OpenFlow message over the rconn. I haven't yet explored the best way to create and manage this rconn.&lt;br /&gt;
*Explore the OFSI STP (spanning tree protocol) implementation for possible use.&lt;br /&gt;
&lt;br /&gt;
== Current Issues ==&lt;br /&gt;
&lt;br /&gt;
Currently the test/demo LEARNING mode doesn't work. I'm still learning how&lt;br /&gt;
to tweak the OFSI flow table implementation; there's some work to be done on&lt;br /&gt;
creating flows with an output action. The learning algorithm itself also&lt;br /&gt;
needs to be designed (matching a received packet to see if it's source is&lt;br /&gt;
the destination of a flow and thus should constrain to one port).&lt;br /&gt;
&lt;br /&gt;
Manipulating the flow table is difficult for end users under the current&lt;br /&gt;
limitations. AddFlow and ModFlow are available, but creating and filling the&lt;br /&gt;
ofp_flow_mod struct that is needed is more complicated than it needs to be.&lt;br /&gt;
Currently, AddFlow and ModFlow only expect to be called when a specific&lt;br /&gt;
packet is received from the Controller, so to use them, ofp_flow_mod has to&lt;br /&gt;
be filled with some fake packet information (as if it were sent from the&lt;br /&gt;
Controller). In the future, an interface will be added to make manipulation&lt;br /&gt;
easier. Furthermore, when Controllers can connect to the SwitchNetDevice and&lt;br /&gt;
vice versa, the normal way of manipulating the flow table will be available&lt;br /&gt;
as well.&lt;/div&gt;</summary>
		<author><name>Bhurd</name></author>
	</entry>
</feed>