[pox-dev] working with multiple switches

durga c.vijaya.durga at gmail.com
Thu Nov 7 22:35:56 PST 2013


I reread the sample program and I am understanding what you meant.
As soon as the controller is launched, the _handle_ConnectionUp() handler
is calling the L2switch module, thus for every connection established , a
different instance of switch is being created

Thank you, I will work on these lines.



Cheers!
Durga



On Fri, Nov 8, 2013 at 4:55 PM, Murphy McCauley
<murphy.mccauley at gmail.com>wrote:

> From a quick glance, it looks like you're making exactly the mistake I
> tried to mention in my previous response.  It looks like you have a single
> MAC-to-port table which is shared between all the switches.  As you pointed
> out, this doesn't work since the mappings are different for different
> switches and you're just overwriting them.
>
> The solution is simply to keep a separate separate entries for each
> switch.  As I mentioned, l2_learning does this by creating a separate
> instance of LearningSwitch for each connected switch, and each instance of
> LearningSwitch has its own table.
>
> l2_pairs does it a different way.  It uses a single switch, but the keys
> in the table contain both the switch *and* the MAC address (as a tuple,
> IIRC).
>
> -- Murphy
>
> On Nov 7, 2013, at 9:48 PM, durga <c.vijaya.durga at gmail.com> wrote:
>
> can someone take the pain of going through the below code and let me know
> where i might be going wrong?
>
> I di try compring the results with samples provided, and don't quite find
> any errors (except that sample code is much cleaner ), but somehow my
> sw1<-->h1(host1) cannot reach sw3<-->h3(host3).
>
> Any insights would be wonderful as this has gotten a little exhaustive on
> me.
>
> Thank you.
>
> Cheers!
> Durga
>
>
>
> On Fri, Nov 8, 2013 at 2:37 PM, durga <c.vijaya.durga at gmail.com> wrote:
>
>> I am working on it as of now. I did use a macport table to store.Below
>> debug() shows that, (a obvious error in my code), that the port number for
>> input and outport are same, hence my ARP gets dropped. as inport ==
>> outport.
>>
>> Will keep the group posted as soon i understand where I am going wrong.
>>
>> *log.debug("%i --> %s" event.dpid,parsedpkt)*
>>
>> my swtch output:
>> DEBUG:openflow.of_01:Listening on 0.0.0.0:6633
>>
>>> INFO:openflow.of_01:[00-00-00-00-00-01 3] connected
>>> DEBUG:l2_switching_v5:connected to switch with dpid 1
>>> INFO:openflow.of_01:[00-00-00-00-00-04 1] connected
>>> DEBUG:l2_switching_v5:connected to switch with dpid 4
>>> INFO:openflow.of_01:[00-00-00-00-00-03 4] connected
>>> DEBUG:l2_switching_v5:connected to switch with dpid 3
>>> INFO:openflow.of_01:[00-00-00-00-00-02 2] connected
>>> DEBUG:l2_switching_v5:connected to switch with dpid 2
>>> DEBUG:l2_switching_v5:1 --> [00:00:00:00:00:01>ff:ff:ff:ff:ff:ff ARP]
>>> {EthAddr('00:00:00:00:00:01'): 1}
>>> DEBUG:l2_switching_v5:2 --> [00:00:00:00:00:01>ff:ff:ff:ff:ff:ff ARP]
>>> {EthAddr('00:00:00:00:00:01'): 2}
>>> DEBUG:l2_switching_v5:3 --> [00:00:00:00:00:01>ff:ff:ff:ff:ff:ff ARP]
>>> {EthAddr('00:00:00:00:00:01'): 2}
>>> DEBUG:l2_switching_v5:4 --> [00:00:00:00:00:01>ff:ff:ff:ff:ff:ff ARP]
>>> {EthAddr('00:00:00:00:00:01'): 2}
>>> DEBUG:l2_switching_v5:3 --> [00:00:00:00:00:03>00:00:00:00:00:01 ARP]
>>> {EthAddr('00:00:00:00:00:03'): 1, EthAddr('00:00:00:00:00:01'): 2}
>>> DEBUG:l2_switching_v5:2 --> [00:00:00:00:00:03>00:00:00:00:00:01 ARP]
>>> {EthAddr('00:00:00:00:00:03'): 3, EthAddr('00:00:00:00:00:01'): 2}
>>>
>>> *DEBUG:l2_switching_v5:1 --> [00:00:00:00:00:03>00:00:00:00:00:01 ARP] *
>>> *{EthAddr('00:00:00:00:00:03'): 2, EthAddr('00:00:00:00:00:01'): 2} *
>>> *dropping*
>>
>>
>>  expected:
>>
>>>
>>>
>>> *DEBUG:forwarding.l2_learning:1-->[00:00:00:00:00:01>00:00:00:00:00:03
>>> IP]**{EthAddr('00:00:00:00:00:03'): 2, EthAddr('00:00:00:00:00:01'): 1}*
>>
>>
>> Cheers!
>> Durga
>>
>>
>>
>> On Fri, Nov 8, 2013 at 1:29 PM, Murphy McCauley <
>> murphy.mccauley at gmail.com> wrote:
>>
>>> You'll see that the table is held in an instance variable
>>> (self.macToPort).  self in this case is an instance of LearningSwitch.  And
>>> the key here is that there's an instance of LearningSwitch for each switch
>>> that connects (created by a ConnectionUp handler).
>>>
>>> -- Murphy
>>>
>>> On Nov 7, 2013, at 4:32 AM, durga <c.vijaya.durga at gmail.com> wrote:
>>>
>>> While, I am reading docs to work on vlans , I was as well experimenting
>>> on using multiple switches.Without creating any complex topology, i stuck
>>> to linear topology by running the below in mininet
>>>
>>> sudo mn --topo linear ,4 --mac --switch ovsk --controller remote
>>>
>>> which creates 5 links(h1<-->s1, h2<-->s2,s1<-->c0,s2<-->c0,s1<-->s2)
>>> When I run the sample l2_learning switch module, h1 pings h2
>>> successfully.
>>> But how does the code differentiate between 2 ports if host 1 is
>>> connected to port 1 of sw1( thus event.port ==1) and h2 is connected to
>>> port1 of sw2(port == 1), then port == event.port condition might fail
>>> right? (though it doesnot).
>>>
>>>  else:
>>>         port = self.macToPort[packet.dst]
>>>         if port == event.port: # 5
>>>           # 5a
>>>           log.warning("Same port for packet from %s -> %s on %s.%s.
>>>  Drop."
>>>               % (packet.src, packet.dst, dpid_to_str(event.dpid), port))
>>>           drop(10)
>>>           return
>>>         # 6
>>>
>>>
>>> the program I wrote, is failing at this very condition.
>>>
>>> Cheers!
>>> Durga
>>>
>>>
>>>
>>
> <l2swicth.rtf>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.noxrepo.org/pipermail/pox-dev-noxrepo.org/attachments/20131108/1640d5a6/attachment-0002.htm>


More information about the pox-dev mailing list