Ofdissector: A way to analyze OpenFlow packets in Wireshark at Ubuntu 12.04

As you start messing around in the Software-Defined Networking area you might want to analyze OpenFlow packets in Wireshark. This post is a installation tutorial of ofdissector, a plugin to analyze OpenFlow 1.3 packets in Wireshark.
The guys from CPqD have developed a plugin called ofdissector that is capable of doing that. In this post I am going to report the troubleshooting I had to do to make it work. The main problem was to make Wireshark to be able of analyzing OF 1.3. The original installation guide is linked here.

What worked?

I started by following this tutorial and finally came up with this successful installation script :

cd  $HOME/
git clone git://github.com/mininet/mininet
mininet/util/install.sh -n3f
sudo -s
apt-get install scons
git clone https://github.com/CPqD/ofdissector
cd ofdissector/src
export WIRESHARK=/usr/include/wireshark
scons install

Troubleshooting:

The first problem I had was not being able to install ofdissector correctly. Adding the sudo -s command made things better I don’t know why exactly. But before I was having the following error:

scons: Reading SConscript files ...
### ERROR: You need to set the WIRESHARK environment variable to the
location of your wireshark include directory.
### ERROR: (such that epan/packet.h is a valid include path)

The seconde problem I had was conflicting installations of different versions of ofdissector. I installed both versions. You can avoid the problem by not installing the oldversion of ofdissector, using the following line of code instead of the wrong one:

##This is Right!!!
mininet/util/install.sh -n3f
##This is WRONG!!
mininet/util/install.sh -n3fxw
## the w option will install the wireshark plugin for OF1.0

Anyway, if you install both and fall into this problem:

 Err Duplicate protocol name "OpenFlow Protocol"! This might be caused by an inappropriate plugin or a development error.

The only thing you have to do is to remove the old openflow plugin and reinstall the new ofdissector by doing this:

sudo -s
rm -f /usr/lib/wireshark/libwireshark1/plugins/openflow.so
cd $HOME/ofdissector/src
export WIRESHARK=/usr/include/wireshark
scons install

That’s it. Feel free to report issues with the installation script.

Learning Switch tutorial on Ryu + OVS 2.0 + OF 1.3

This tutorial aims to make you get in touch with some subtleties of the OpenFlow 1.3. The requirements for this tutorial are:

  • Mininet 2.1 (If you haven’t installed it yet, follow this link)
  • Ryu (If you haven’t installed it yet, follow this link)
  • OpenVSwitch 2.0 (If you haven’t installed it yet, follow this link)
  • Openflow 1.3 (If you haven’t installed it yet, follow this link)

So this tutorial will follow these steps:

  1. Test OVS 2.0 + RYU(OF1.0)
  2. Test MN user’s switch + MN controller. ( Verify it doesn’t work.)
  3. Test OVS 2.0 +MN controller. ( Verify it works)
  4. Test MN user’s switch + RYU (OF1.0). ( Verify it doesn’t work.)
  5. Test MN user’s switch + RYU (OF1.3). ( Verify works fine.)
  6. Test OVS 2.0 (OF1.0) + RYU (OF1.3)
  7. Test OVS 2.0 (OF1.3) + RYU (OF1.3)
  8. Conclude OVS 2.0 (OF1.0+1.3) + RYU (OF1.3) rules!

SO, in this tutorial we will test several scenarios. The initial problem we faced with OF1.3 was negotiation. Basically, if controller and switch don’t match versions they won’t talk, and won’t work.
I will give you the best solution in advance, then if you want to understand a lil better you can read the article to the end. The best solution is to enable OVS 2.0 switches to work with all versions of OF AND make sure RYU is running the right code.
Start ryu with OF13. (Note in line 20 of the code that Ryu imports OF13)

cd ryu
 PYTHONPATH=. ./bin/ryu-manager ryu/app/simple_switch_13.py

Start Mininet:

sudo mn --topo linear,4 --mac --switch ovsk --controller remote
h1 ping h4

Enable OpenFlow 1.3 in the switches. ( you need to open a new terminal with xterm s1 for that)

ovs-vsctl set bridge s1 protocols=OpenFlow10,OpenFlow13
ovs-vsctl set bridge s2 protocols=OpenFlow10,OpenFlow13
ovs-vsctl set bridge s3 protocols=OpenFlow10,OpenFlow13
ovs-vsctl set bridge s4 protocols=OpenFlow10,OpenFlow13

The article is not finished haha, I will finish it ASAP.