Re: How to compute the routing path between two hosts in OpenDayLight?


Hi l2switch team,

I have changed the l2switch to construct flow entries to build shortest path between hosts and also provide the routing information to other modules. I'm very happy to submit my code and I have pushed my modified l2switch on github here:

The current problem is that my modify is dummy so I need review. If any of you willing to do so, please contact me.


2015-08-10 1:57 GMT+08:00 Amit Mandke (ammandke) <ammandke@...>:

Richard and Junzhuo,

I would highly encourage you to submit your enhancements to l2switch. Please start contributing the project. Submit your proposal for Beryllium release.  


From: <yang.r.yang@...> on behalf of "Y. Richard Yang" <yry@...>
Date: Sunday, August 9, 2015 at 7:01 AM
To: Junzhuo Wang <wangjunzhuo200@...>
Cc: 陈明明 <mingmingminne@...>, Amit Mandke <ammandke@...>, Evan Zeller <evanrzeller@...>, André Martins <aanm90@...>, "Tony Tkacik -X (ttkacik - PANTHEON TECHNOLOGIES at Cisco)" <ttkacik@...>, "l2switch-dev@..." <l2switch-dev@...>, Shu Dong <dongs2011@...>, "linxiao9292@..." <linxiao9292@...>, Jensen Zhang <jingxuan.n.zhang@...>, "gaok12@..." <gaok12@...>, "alto-dev@..." <alto-dev@...>, Andreas Voellmy <andreas.voellmy@...>, Shigang Zhu <szhu@...>
Subject: Re: How to compute the routing path between two hosts in OpenDayLight?

To add a bit, according to my understanding:
- current l2switch uses flooding based on a single, shared spanning. Hence, assume a switch with k neighbors in the spanning tree, it needs only k rules in its flow table: for each incoming neighbor, flood to the other k-1 neighbors. If we use the number of links traversed as cost when computing ECS, this routing scheme is not useful, because the cost for each arc-dst pair is the same. 

- As a first step, we develop l2switch-plus, which adds higher priority flow rules: for a given src, dst MAC pairs, we find the unicast path from the tree, and add <src-Mac, dst-Mac> entries to the flow tables. Note that this may cause flow table explosion, which we can look into:
* We identify compression. 
* Another idea is that when computing ECS, we do not insert the Mac rules. They are triggered by packet-in only. 
* Yet another idea is that ECS will insert the rules but with a relatively short timeout. Hence those rules not used by app will timeout quickly.

- In the next step, we use the ip-mac binding table to convert an l2 path to an l3 path.

In the long run, the preceding is not complete. For example, what if GBP reroutes a flow through middle boxes. The preceding derivation based on l2switch routing is not correct. We need to look into the composition approach of ODL.


On Sunday, August 9, 2015, Junzhuo Wang <wangjunzhuo200@...> wrote:
Hi Mingming,

The current status is that Dijkstra algorithm is not be used in l2switch. The related code are all been annotated. And the authors of l2switch also says this module is not complete. Instead, it use STP to forward all packets to every devices in the network. So we decide to develop our own module “l2switch-plus” to enhance the ability of l2switch. As a result, we can get routing information easily.

Best regards,

Hi all,
I am sorry to come back so late. I sent email to cisco's stuff last Tuesday. He replied me as below:
Hi Mingming,
I am sure there is somewhere used the Dijkstra algorithm for this. I guess l2switch is the project involving this. You can check their wiki and eventually drop a question to their mailing list. Also you can read the topology and compute by yourself.

I don't know how it goes now(I missed sync up on Saturday). I will try to find Dijkstra algorithm in ODL. And keep on asking for help from the helper? Or it has already resolved. I should do sth else? Thank you!

Best regards,

在 2015-08-08 10:00:35,"Y. Richard Yang" <yry@...> 写道:

On Fri, Aug 7, 2015 at 8:16 PM, Amit Mandke (ammandke) <ammandke@...> wrote:
addMacToMac is not complete. Some more implementation is required to make it work. Never got a time to fix it. All contributions are welcome.

To clarify,  it is incomplete because it handles only the case of the same-switch, as implied by Junzhuo's testing? So the contribution is to handle cross-switch routing?



From: Junzhuo Wang <wangjunzhuo200@...>
Date: Friday, August 7, 2015 at 8:24 AM
To: Evan Zeller <evanrzeller@...>
Cc: André Martins <aanm90@...>, "Tony Tkacik -X (ttkacik - PANTHEON TECHNOLOGIES at Cisco)" <ttkacik@...>, "l2switch-dev@..." <l2switch-dev@...>, Amit Mandke <ammandke@...>, Shu Dong <dongs2011@...>, "linxiao9292@..." <linxiao9292@...>, Jensen Zhang <jingxuan.n.zhang@...>, 陈明明 <mingmingminne@...>, "Y. Richard Yang" <yry@...>, "gaok12@..." <gaok12@...>
Subject: Re: [L2switch-dev] How to compute the routing path between two hosts in OpenDayLight?

A further question. Is there a layer 3 routing module could make OpenFlow switcher acts like a traditional router?


Hi Evan,

It great to have your reply! I’ve seen that the method “addBidirectionalMacToMacFlows” calls “addMacToMacFlow” twice. Based on the code, I assume in this implementation, the STP eliminate loops so all packets can be forwarded to all switchers. So only two flow entries could build a path between two MAC addresses.

But in my test, the MAC to MAC flow only be built when two hosts connected to the same switcher. This phenomenon really confuses me. I’m looking forward to your reply.


The Minimum Spanning Tree is calculated to prevent loops in the network, those links that receive STP blocking status won't have flows written on them. in l2switch-main may have what you're looking for, it can create mac to mac flows, I'm not sure how robust the functionality is at the moment. 

On Thu, Aug 6, 2015 at 9:14 AM, Junzhuo Wang <wangjunzhuo200@...> wrote:
Hi André,

Thanks a lot for your reply! I’ve read the code from ( The "getPath" method doesn’t exist anymore as you said. Also I did some tests and I found that the packets not always go through the shortest path. So I believe STP may be used as the current routing algorithm. If so, I can calculate the path by my self although it’s not a clean implementation. Let’s say what the code’s author says.


Hi Junzhuo.
The code is here
but I don't know if the service is working because of
But I've send this email to the code's author to see what he says about it.
Best regards,

On 06-08-2015 07:43, Junzhuo Wang wrote:
Hi all,

I’m a member from ODL/ALTO. I’m trying to find a API to compute the routing path between two hosts. So I read the code from openflowplugin, controller. It seems openflowplugin just set the flow table to switchers. And controller seems no longer handle the routing calculation now
 (org.opendaylight.controller.sal.routing doesn’t exist now).

Finally I found this page( saids that the l2switch now provide routing service. Which module should I use and how to get the route between two hosts by existing APIs?


L2switch-dev mailing list


Join { to automatically receive all group messages.