It seems to me like a bad idea, in general, to use round robin load
balancing to send packets to controllers because that is likely to
reorder packets.  I think that it would probably be a better idea to
balance packets across controllers on a flow-by-flow basis.  I think
that you could use an OpenFlow "select" group for that, by using a
bucket for each controller.  That would not require any change to OVS.

On Sun, Nov 19, 2017 at 01:47:01PM -0800, Brian Perry wrote:
> Summary: OvS last commit 52f793b
> I am trying to modify the switch's code to use a round robin scheduler for
> sending asynchronous messages (especially PACKET_IN messages) to one of the
> controllers within a multiple controller SDN setup. After traversing the
> code I think I found where I need to insert this round robin scheduler,
> line 4766 and 6225 of ofproto-dpif-xlate.c.
> 
> I plan on modifying this part of the code and testing it to see if I was
> correct but it would be great to have some feedback from the community on
> this.
> 1) Am I on the right path, do I only need to modify the code around line
> 4766? Or do I need to modify another part of the code?
> 2) What is OFPACT_CONTROLLER case for? From what I can gather macro
> OFPACT_FOR_EACH uses a macro that goes through a list that deal with table
> entry actions but it could call the execute_controller_action() function
> and I don't know why it would.
> 3) What does emit_continuation() function do? It looked like it had to do
> with table lookups instead of sending asynchronous messages to the
> controller. If it only does table lookups why would it call the
> execute_controller_action() function.
> 
> 
> Details:
> I setup a simple Mininet topology with a single switch, 3 user computers,
> and 2 controllers, where everything is connected to the switch. Currently
> when the switch receives a packet with no corresponding forwarding rule it
> sends a request to both controllers. I would like it so that it sends the
> forwarding rule request in a round robin method. So the first forwarding
> rule request will be sent to only controller 1, then the next forwarding
> rule request will be sent to only controller 2, then the next one to only
> controller 1, then the next one only to controller 2, etc.
> 
> Along side other documents I've read a description of the Open vSwitch
> architecture (https://www.slideshare.net/rajdeep/openvswitch-deep-dive) and
> pages 25-28 of Pavel's master thesis (https://mail.openvswitch.org/
> pipermail/ovs-discuss/2017-February/043763.html) to get a better
> understanding of the internals of OvS. This information paired with the
> following post (https://mail.openvswitch.org/pipermail/ovs-discuss/2016-
> March/040236.html) informed me that the source code I am looking for is
> used within the Userspace and located within the ofproto directory. I
> started looking in the ofproto directory for the handle_openflow()
> function. This eventually lead me to look at the structure and usage of
> ofconn which lead me to line 1741 of connmgr.c where I found the structure
> ofproto_async_msg and function connmgr_send_async_msg. After following the
> function I noticed that ofproto_async_msg.controller_id is assigned in only
> 2 different places; within the execute_controller_action() and
> emit_continuation() functions. I continued following the
> execute_controller_action() function and noticed that it's called in only 5
> different locations all within the file ofproto-dpif-xlate.c. Within those
> 5 locations only lines 4766 and 6225 use some sort of loop to craft and
> send asynchronous messages to multiple controllers.
> 
> So my questions become:
> 1) Am I on the right path, do I only need to modify the code around line
> 4766? Or do I need to modify another part of the code?
> 2) What is OFPACT_CONTROLLER case for? From what I can gather macro
> OFPACT_FOR_EACH uses a macro that goes through a list that deal with table
> entry actions but it could call the execute_controller_action() function
> and I don't know why it would.
> 3) What does emit_continuation() function do? It looked like it had to do
> with table lookups instead of sending asynchronous messages to the
> controller. If it only does table lookups why would it call the
> execute_controller_action() function.

> _______________________________________________
> discuss mailing list
> disc...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

_______________________________________________
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

Reply via email to