OpenFlow ALL Vs FLOOD Action

There has been always a confusion in my mind regarding the difference between OpenFlow ALL and FLOOD action. If you are one of them, go on!

Technically, the spec definition says:

FLOOD: Flood the packet along the minimum spanning tree, not including the incoming interface.

ALL: Send the packet out all interfaces, not including the incoming interface.

So, what’s the difference?

ALL action is pretty much clear in what it says. What is implied by saying “along the minimum spanning tree” is that flood the packet on all the ports where STP is disabled.

Now if we take a case of Juniper Junos OS with OpenFlow which do not support STP, in that case all the ports will have STP disabled due to lack of feature and both ALL & FLOOD actions will behave in the same way.

Hope it helps!


Example message exchange sequence between OpenFlow & SDN Controller

Further to understanding the OpenFlow messages that are exchanged between hardware and a SDN Controller in Understanding OpenFlow Communication Channel, I thought it will be nice to know the sequence in which these messages are exchanged.

Based on my understanding using wireshark, a OpenFlow switch and OpenDaylight, below is a visual sequence diagram explaining major message exchanges I could see.

OF Message Exchange Sequence


Understanding Openflow Communication Channel

The OpenFlow protocol (1.0.0) describes message exchanges that take place between an OpenFlow controller and an OpenFlow device. Typically, the protocol is implemented on top of SSL or Transport Layer Security (TLS), providing a secure OpenFlow channel.

The OpenFlow protocol enables the controller to perform add, update, and delete actions to the flow entries in the flow tables. It supports three types of messages:

  1. Controller-to-Device: These messages are initiated by the controller and, in some cases, require a response from the device.
  2. Asynchronous: These types of messages are sent without solicitation from the controller.
  3. Symmetric: These messages are sent without solicitation from either the controller or the device. They are simple yet helpful.

Below is the list of complete OpenFlow messages that any implementation needs to support.

OF Communication Messages

Debugging OpenDaylight Controller In Eclipse

Once you have installed OpenDaylight successfully and imported the code into eclipse you should get a clean workspace without any errors.

If you are facing any errors & you think we can help, please post below & I will see if I can.

So now you want to run the controller from eclipse & make changes & debug it? Let’s do that with a example change.

Goal (Cooked up): Change OpenDaylight Title to "SDN{Geeks}".

So for this, we will need to do the following:

1. Change the web component of OpenDaylight for title in eclipse.

Navigate to the web component of OpenDaylight & change/save main.jsp.


2. Build web component (independently) via eclipse.

Right click on the web component & say “Run Configurations”. Create a maven job for the web project like below. Click Apply & Run.


3. Build controller main component (independently, building the whole thing is somehow not smart) via eclipse.

Distribution project within OpenDaylight is the main project which holds the configurations for the controller startup etc. Once above step is done, we want that jar to be included for the run & hence need to build the master component.

Right click on the distribution component & say “Run Configurations”. Create a maven job for the distribution project like below. Click Apply & Run.



4. Run the controller in Run/Debug mode from eclipse.

Now to run the controller from eclipse, navigate to below file. Right click and say “Run As” or “Debug As” “OpenDaylight Application”.

<Workspace> controller/opendaylight/distribution/opendaylight/opendaylight-application.launch

This will start the OpenDaylight controller in run/debug mode with your changes applied.



Goal Complete

You can repeat this for any component and it should be straight forward. If you find any issues with this, let me know below.