<div dir="ltr"><div><pre style="white-space:pre-wrap"><font face="arial, helvetica, sans-serif">Hi everyone,</font></pre><pre style="white-space:pre-wrap"><font face="arial, helvetica, sans-serif">I've built a mininet network composed of 20 switches in a full mesh (or tree) with multiple hosts attached to each of switches. When I use only one pox controller then all hosts can communicate each other without any problems. However, I need two controllers. I successfully created the scenario with two controllers (c0 and c1). Every switch with a probability equal to 0.5 is assigned to either c0 or c1 (please see my partial code below). </font></pre>
<pre style="white-space:pre-wrap"><font face="arial, helvetica, sans-serif">Here is my problem: when I run two pox controllers, some hosts can't communicate each other. I also put some logs from controllers at the end. It's clearly a problem with </font><span style="font-family:arial,helvetica,sans-serif">openflow.discovery openflow.spanning_tree (I tried to run my scenario with a loop free tree topology and without above mentioned openflow components and it worked fine), but I need them to provide connectivity in topologies with loops (e.g. full mesh).</span></pre>
<pre style="white-space:pre-wrap"><span style="font-family:arial,helvetica,sans-serif">Thank you very much for your help,</span></pre><pre style="white-space:pre-wrap"><span style="font-family:arial,helvetica,sans-serif">Maciej</span></pre>
<pre style="white-space:pre-wrap"><span style="font-family:arial,helvetica,sans-serif"><br></span></pre><pre style="white-space:pre-wrap"><font face="arial, helvetica, sans-serif">/.................................................................................................................................................................................</font></pre>
<pre style="white-space:pre-wrap"><font face="arial, helvetica, sans-serif">./pox.py forwarding.l2_learning </font><span style="font-family:arial,helvetica,sans-serif">openflow.of_01 --port=6633 </span><span style="font-family:arial,helvetica,sans-serif">openflow.discovery openflow.spanning_tree --no-flood</span><span style="font-family:arial,helvetica,sans-serif;color:rgb(51,51,51);line-height:20px;white-space:normal"> </span><span style="font-family:arial,helvetica,sans-serif;color:rgb(51,51,51);line-height:20px;white-space:normal">--hold-down</span></pre>
</div><div><div><pre style="white-space:pre-wrap"><font face="arial, helvetica, sans-serif">./pox.py forwarding.l2_learning </font><span style="font-family:arial,helvetica,sans-serif">openflow.of_01 --port=6644 </span><span style="font-family:arial,helvetica,sans-serif">openflow.discovery openflow.spanning_tree --no-flood</span><span style="font-family:arial,helvetica,sans-serif;color:rgb(51,51,51);line-height:20px;white-space:normal"> </span><span style="font-family:arial,helvetica,sans-serif;color:rgb(51,51,51);line-height:20px;white-space:normal">--hold-down</span></pre>
</div></div><div><pre style="white-space:pre-wrap"><font face="arial, helvetica, sans-serif">/.................................................................................................................................................................................</font></pre>
</div><div><br></div><div>if __name__ == '__main__':</div><div>    lg.setLogLevel( 'info' )</div><div>    info( "*** Initializing Mininet and kernel modules\n" )</div><div>    OVSKernelSwitch.setup()</div>
<div>    info( "*** Creating network\n" )</div><div><br></div><div>    #********************* TOPOLOGY **********************</div><div>    #maximal number of connected hosts</div><div>    b = 20</div><div>    a = 20</div>
<div>    topology = Treepro(a,b) # Mesh7pro(a,b,1)</div><div><br></div><div>    #********************* CONTROLLERS **********************</div><div><br></div><div>    # our controller</div><div>    c0 = RemoteController( 'c0', ip='127.0.0.1', port=6633)</div>
<div>    # dump controller (simple switching)</div><div>    c1 = RemoteController( 'c1', ip='127.0.0.1', port=6644)</div><div><br></div><div>    prob = 0.5<br></div><div>    cmap = {}</div><div><br></div><div>
    for i in range(0,a):</div><div><span class="" style="white-space:pre">        </span>if (random.random() < prob):</div><div><span class="" style="white-space:pre">            </span>cmap['s%s' % (i+1)] = c1</div><div><span class="" style="white-space:pre">   </span>else:</div>
<div><span class="" style="white-space:pre">            </span>cmap['s%s' % (i+1)] = c0</div><div><br></div><div>    class MultiSwitch( OVSKernelSwitch ):</div><div>    <span class="" style="white-space:pre">      </span>def start( self, controllers ):</div>
<div>        <span class="" style="white-space:pre">    </span>return OVSKernelSwitch.start( self, [ cmap[ <a href="http://self.name">self.name</a> ] ] )</div><div><br></div><div><br></div><div>    #********************* BUILD NETWORK **********************</div>
<div>    # network = Mininet( topo=topology, controller=lambda name: RemoteController( name, defaultIP='127.0.0.1' ), listenPort=6632 , switch=OVSKernelSwitch)</div><div><br></div><div>    network = Mininet( topo=topology, switch=MultiSwitch, build=False )</div>
<div>    network.controllers = [ c0, c1 ]</div><div>    network.build()</div><div><br></div><div>    info( "*** Starting network\n" )</div><div>    network.start()</div><div><br></div><div><br></div><div>   #********** NETWORK MAINTENANCE AND ATTACK ****************</div>
<div><br></div><div>    sleep(20) # spaning tree</div><div>    info( "*** Running ping test\n" )</div><div><br></div><div>    pingNet(network)</div><div>    info( "*** Sleeping, soon finishing\n")</div>
<div>    sleep(5)</div><div><br></div><div>    info( "*** Stopping network\n" )</div><div>    network.stop()</div><div><br></div><div><div><pre style="white-space:pre-wrap"><font face="arial, helvetica, sans-serif">/.................................................................................................................................................................................</font></pre>
</div></div><div><br></div><div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:openflow.discovery:Received LLDP packet from unknown switch</div><div>INFO:openflow.discovery:Received LLDP packet from unknown switch</div>
<div>INFO:openflow.discovery:Received LLDP packet from unknown switch</div><div>INFO:openflow.discovery:Received LLDP packet from unknown switch</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div>
<div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div>
<div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div>
<div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div>
<div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:openflow.discovery:Received LLDP packet from unknown switch</div>
<div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div>
<div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div>
<div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div>
<div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div>
<div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86</div><div>INFO:openflow.discovery:Received LLDP packet from unknown switch</div>
</div><div><br></div><div><br></div><div><br></div><div><br></div></div>