[ovs-discuss] in-band controller in topology with loop

mehdi dolati mehdidolati at hotmail.com
Thu Nov 6 13:50:41 UTC 2014


Hi,

I'm trying to make the communication between end-hosts and controller possible in Mininet and as I searched, found out that I should use in-band controller. however when using in-band controller in topologies with loop I either should use spanning-tree or the ARP flood prevents every thing to work; but I'm working to implement a multi-path routing in such topology and using spanning tree is troublesome. 
I came up with this idea to first use spanning tree then insert appropriate rules into switches to ensure their connectivity with controller and then disable spanning tree. however when using in-band mode there is bunch of "hidden rules" which have highest priority and they handle connectivity of switch and controller in NORMAL manner which don't work in looped topology. So after disabling spanning tree I had to change working mode of switches to out-of-band to remove those hidden rules.
As soon as I change spanning tree and controller mode the switches disconnect from controller: INFO:openflow.of_01:[00-00-00-00-00-01 2] closed.
The appropriate rules that I mentioned are very simple. I just according to my knowledge of topology forward packets. For example I tried to just maintain connectivity between switch1 and controller. Controller is inside host0 and host0 is connected to switch4 which in turn connects to switch1. 
h1-----[port1]-< s1 >-[port4]-------[port2]-< s4 >-[port1]------ h0
These are my rules:

        if event.dpid == 1:
            # send things from h1 to h0
            msg = of.ofp_flow_mod()
            msg.priority = a+1
            msg.match.in_port = 1
            msg.actions.append(of.ofp_action_output(port = 4))
            event.connection.send(msg)
            # send things from h0 to h1
            msg = of.ofp_flow_mod()
            msg.priority = a+1
            msg.match.in_port = 4
            msg.actions.append(of.ofp_action_output(port = 1))
            event.connection.send(msg)
            # send switch requests to controller
            msg = of.ofp_flow_mod()
            msg.priority = a
            msg.actions.append(of.ofp_action_output(port = 4))
            event.connection.send(msg)
        if event.dpid == 4:
            # send things from h0 to h1
            msg = of.ofp_flow_mod()
            msg.priority = a+1
            msg.match.in_port = 1
            msg.actions.append(of.ofp_action_output(port = 2))
            event.connection.send(msg)
            # send things from h1 to h0
            msg = of.ofp_flow_mod()
            msg.priority = a+1
            msg.match.in_port = 2
            msg.actions.append(of.ofp_action_output(port = 1))
            event.connection.send(msg)
            # send switch requests to controller
            msg = of.ofp_flow_mod()    
            msg.priority = a
            msg.actions.append(of.ofp_action_output(port = 1))
            event.connection.send(msg)

My question is, are my rules correct (enough) or I should do more to maintain connectivity (what kind of)? For example do I need creating any kind of packet request or reply between controller and switches? Or more basically, is there any better solution for my problem?

Sorry for long problem statement I really appreciate any help. 
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://openvswitch.org/pipermail/ovs-discuss/attachments/20141106/2dae8ec8/attachment-0002.html>


More information about the discuss mailing list