[pox-dev] working with multiple switches

durga c.vijaya.durga at gmail.com
Fri Nov 8 12:21:19 PST 2013


Hi Ngyyen,

As of now, these
https://github.com/noxrepo/pox/blob/dart/pox/forwarding/l2_nx.py
http://openvswitch.org/support/
https://github.com/noxrepo/pox/blob/dart/pox/openflow/nicira.py

I do have few questions to ask, and would do them sometime this week ..

Cheers!
Durga



On Fri, Nov 8, 2013 at 10:16 PM, Giang Nguyen <giangnvbk at gmail.com> wrote:

> Hello Durga,
>
> What's docs you're reading for deploying VLANs? Could you share it?
>
> Thank you so much
>
> --
> Giang Nguyen
> Seoul, Korea
>
>
> On 8 November 2013 15:47, durga <c.vijaya.durga at gmail.com> wrote:
>
>> Yup! That's it!! That was the issue. below are the macaddr table entries
>> , also I can reach all other hosts.
>>
>> -----
>> Thank you so much. :)
>>
>> 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'): 1}
>> DEBUG:l2_switching_v5:1 --> [00:00:00:00:00:01>00:00:00:00:00:03 ARP]
>> {EthAddr('00:00:00:00:00:03'): 2, EthAddr('00:00:00:00:00:01'): 1}
>> DEBUG:l2_switching_v5:2 --> [00:00:00:00:00:01>00:00:00:00:00:03 ARP]
>> {EthAddr('00:00:00:00:00:03'): 3, EthAddr('00:00:00:00:00:01'): 2}
>> DEBUG:l2_switching_v5:3 --> [00:00:00:00:00:01>00:00:00:00:00:03 ARP]
>> {EthAddr('00:00:00:00:00:03'): 1, EthAddr('00:00:00:00:00:01'): 2}
>>
>>
>> Cheers!
>> Durga
>>
>>
>>
>> On Fri, Nov 8, 2013 at 5:35 PM, durga <c.vijaya.durga at gmail.com> wrote:
>>
>>> 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>
>>>>
>>>>
>>>>
>>>
>>
>
>
> --
> Giang Nguyen
> Master at School of Electronic and Telecommunication Engineering
> Soongsil University
> Seoul,South Korea
> YM:giangnguyen_bk
> Mobile:(+84) 016646.8888.4
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.noxrepo.org/pipermail/pox-dev-noxrepo.org/attachments/20131109/001947fe/attachment-0002.htm>


More information about the pox-dev mailing list