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


Y. Richard Yang
 

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.

Richard

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,
Junzhuo


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.


Regards,
"
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,
Mingming





在 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?

Thanks.

Richard


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?

Thanks!
Junzhuo


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.

Thanks!
Junzhuo


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. FlowWriterServiceImpl.java 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 (https://github.com/opendaylight/l2switch/blob/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology/NetworkGraphImpl.java#L123). 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.

Junzhuo


Hi Junzhuo.
The code is here https://github.com/opendaylight/l2switch/tree/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology
but I don't know if the service is working because of https://github.com/opendaylight/l2switch/blob/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology/NetworkGraphService.java#L41
But I've send this email to the code's author to see what he says about it.
Best regards,
--André


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(https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:L2_Switch) 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?

Thanks,
Junzhuo



_______________________________________________
L2switch-dev mailing list
L2switch-dev@...https://lists.opendaylight.org/mailman/listinfo/l2switch-dev





--
Richard


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.  

-Amit


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.

Richard

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,
Junzhuo


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.


Regards,
"
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,
Mingming





在 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?

Thanks.

Richard


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?

Thanks!
Junzhuo


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.

Thanks!
Junzhuo


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. FlowWriterServiceImpl.java 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 (https://github.com/opendaylight/l2switch/blob/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology/NetworkGraphImpl.java#L123). 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.

Junzhuo


Hi Junzhuo.
The code is here https://github.com/opendaylight/l2switch/tree/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology
but I don't know if the service is working because of https://github.com/opendaylight/l2switch/blob/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology/NetworkGraphService.java#L41
But I've send this email to the code's author to see what he says about it.
Best regards,
--André


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(https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:L2_Switch) 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?

Thanks,
Junzhuo



_______________________________________________
L2switch-dev mailing list
L2switch-dev@...https://lists.opendaylight.org/mailman/listinfo/l2switch-dev





--
Richard


Austin
 

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: https://github.com/cs512/l2switch.

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

Regards,
Junzhuo

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.  

-Amit


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.

Richard

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,
Junzhuo


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.


Regards,
"
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,
Mingming





在 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?

Thanks.

Richard


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?

Thanks!
Junzhuo


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.

Thanks!
Junzhuo


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. FlowWriterServiceImpl.java 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 (https://github.com/opendaylight/l2switch/blob/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology/NetworkGraphImpl.java#L123). 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.

Junzhuo


Hi Junzhuo.
The code is here https://github.com/opendaylight/l2switch/tree/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology
but I don't know if the service is working because of https://github.com/opendaylight/l2switch/blob/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology/NetworkGraphService.java#L41
But I've send this email to the code's author to see what he says about it.
Best regards,
--André


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(https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:L2_Switch) 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?

Thanks,
Junzhuo



_______________________________________________
L2switch-dev mailing list
L2switch-dev@...https://lists.opendaylight.org/mailman/listinfo/l2switch-dev





--
Richard


Amit Mandke (ammandke) <ammandke@...>
 

That sounds great. 

It is hard to follow code change in different repository. Please submit your patches to ODL repo. I would recommend incremental smaller(working) patches than one big change if possible.


Thanks,
-Amit


From: Junzhuo Wang <wangjunzhuo200@...>
Date: Saturday, September 26, 2015 at 2:14 AM
To: Amit Mandke <ammandke@...>
Cc: "Y. Richard Yang" <yry@...>, 陈明明 <mingmingminne@...>, 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?

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: https://github.com/cs512/l2switch.

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

Regards,
Junzhuo

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.  

-Amit


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.

Richard

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,
Junzhuo


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.


Regards,
"
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,
Mingming





在 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?

Thanks.

Richard


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?

Thanks!
Junzhuo


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.

Thanks!
Junzhuo


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. FlowWriterServiceImpl.java 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 (https://github.com/opendaylight/l2switch/blob/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology/NetworkGraphImpl.java#L123). 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.

Junzhuo


Hi Junzhuo.
The code is here https://github.com/opendaylight/l2switch/tree/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology
but I don't know if the service is working because of https://github.com/opendaylight/l2switch/blob/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology/NetworkGraphService.java#L41
But I've send this email to the code's author to see what he says about it.
Best regards,
--André


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(https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:L2_Switch) 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?

Thanks,
Junzhuo



_______________________________________________
L2switch-dev mailing list
L2switch-dev@...https://lists.opendaylight.org/mailman/listinfo/l2switch-dev





--
Richard


Austin
 

Hi Amit

I will submit the patch soon to ODL repo.

Regards,
Junzhuo

2015-09-28 2:21 GMT+08:00 Amit Mandke (ammandke) <ammandke@...>:

That sounds great. 

It is hard to follow code change in different repository. Please submit your patches to ODL repo. I would recommend incremental smaller(working) patches than one big change if possible.


Thanks,
-Amit


From: Junzhuo Wang <wangjunzhuo200@...>
Date: Saturday, September 26, 2015 at 2:14 AM
To: Amit Mandke <ammandke@...>
Cc: "Y. Richard Yang" <yry@...>, 陈明明 <mingmingminne@...>, 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?

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: https://github.com/cs512/l2switch.

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

Regards,
Junzhuo

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.  

-Amit


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.

Richard

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,
Junzhuo


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.


Regards,
"
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,
Mingming





在 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?

Thanks.

Richard


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?

Thanks!
Junzhuo


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.

Thanks!
Junzhuo


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. FlowWriterServiceImpl.java 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 (https://github.com/opendaylight/l2switch/blob/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology/NetworkGraphImpl.java#L123). 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.

Junzhuo


Hi Junzhuo.
The code is here https://github.com/opendaylight/l2switch/tree/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology
but I don't know if the service is working because of https://github.com/opendaylight/l2switch/blob/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology/NetworkGraphService.java#L41
But I've send this email to the code's author to see what he says about it.
Best regards,
--André


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(https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:L2_Switch) 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?

Thanks,
Junzhuo



_______________________________________________
L2switch-dev mailing list
L2switch-dev@...https://lists.opendaylight.org/mailman/listinfo/l2switch-dev





--
Richard



Austin
 

Hi Amit

I’m trying to merge my code to master branch by hand (refactor my code as well) but the master branch seems not working at all. My modification based on stable/lithium tag. So I can’t test my code on master branch if l2switch not working. Any suggestions? 

Thanks,
Junzhuo

On Sep 28, 2015, at 2:21 AM, Amit Mandke (ammandke) <ammandke@...> wrote:

That sounds great. 

It is hard to follow code change in different repository. Please submit your patches to ODL repo. I would recommend incremental smaller(working) patches than one big change if possible.


Thanks,
-Amit


From: Junzhuo Wang <wangjunzhuo200@...>
Date: Saturday, September 26, 2015 at 2:14 AM
To: Amit Mandke <ammandke@...>
Cc: "Y. Richard Yang" <yry@...>, 陈明明 <mingmingminne@...>, 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?

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: https://github.com/cs512/l2switch.

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

Regards,
Junzhuo

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.  

-Amit


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.

Richard

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,
Junzhuo


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.


Regards,
"
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,
Mingming





在 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?

Thanks.

Richard


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?

Thanks!
Junzhuo


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.

Thanks!
Junzhuo


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. FlowWriterServiceImpl.java 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 (https://github.com/opendaylight/l2switch/blob/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology/NetworkGraphImpl.java#L123). 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.

Junzhuo


Hi Junzhuo.
The code is here https://github.com/opendaylight/l2switch/tree/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology
but I don't know if the service is working because of https://github.com/opendaylight/l2switch/blob/master/loopremover/implementation/src/main/java/org/opendaylight/l2switch/loopremover/topology/NetworkGraphService.java#L41
But I've send this email to the code's author to see what he says about it.
Best regards,
--André


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(https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:L2_Switch) 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?

Thanks,
Junzhuo



_______________________________________________
L2switch-dev mailing list
L2switch-dev@...https://lists.opendaylight.org/mailman/listinfo/l2switch-dev





--
Richard