Thank you
I did it in other way around
I created new dictionary.  swdpid ={}
and I put the switch MAC as keys and dpids are values
:)

Best regards,
Amer

Sent from my iPhone

On ١٩‏/١١‏/٢٠١٣, at ١٠:٣٨ م, Murphy McCauley <murphy.mccau...@gmail.com> wrote:

> On Nov 19, 2013, at 4:01 AM, Amer <amer7...@hotmail.com> wrote:
> 
>> Thank you Murphy
>> 
>> I have another question:
>> I have got the switch MAC address, i.e., 00-00-00-00-0x, how can I convert 
>> it to dpid.
>> I am working in l2_multi, while the switches array has something like [1: 
>> 00-00-00-00-01, 2: 00-00-00-00-02 ]
>> is there a way to get the dpid number from switches array or I must use a 
>> specific command to convert from MAC to dpid.
> 
> In general, there's no way to convert a MAC to a DPID.  However, everything 
> you see when printing out "switches" is already a DPID.  Look at the l2_multi 
> code:
> 44  # Switches we know of.  [dpid] -> Switch
> 45  switches = {}
> 
> So we see it's not an array.  It's a map from DPID to a Switch object.  The 
> keys are DPIDs.  The values are Switches.
> 
> When you print it out, you don't see "<Switch object at 0x12345678>", though. 
>  Hmm; why not?  Let's take a look...
> 230 class Switch (EventMixin):
> ...
> 238  def __repr__ (self):
> 239    return dpid_to_str(self.dpid)
> 
> Ah-ha.  So that's not a MAC at all.  It's also the DPID, but formatted with 
> dpid_to_str().
> 
> 
> POX treats DPIDs as numbers.  That's what the keys of the switches dictionary 
> are.  For display to humans, POX components usually format them with 
> dpid_to_str(), which (purposely) produces something which often looks a lot 
> like an Ethernet address, and that's what you're seeing as the values of the 
> switches dictionary.  One easy way to tell them apart is that Ethernet 
> addresses in POX always have the bytes separated by a colon.  DPIDs have 
> bytes separated by dashes.
> 
> Hope that helps.
> 
> -- Murphy
> 
>> Best regards,
>> Amer
>> 
>> On ١٩‏/١١‏/٢٠١٣, at ٧:٢١ ص, Murphy McCauley <murphy.mccau...@gmail.com> 
>> wrote:
>> 
>>> I think you may have to modify l2_multi a bit to get this to work with it 
>>> -- it was designed with the assumption that it's in control of all the 
>>> switches, and I think that will cause problems.
>>> 
>>> l2_learning, on the other hand, should be easy to run on individual 
>>> switches.  And l2_pairs should be pretty easy too.
>>> 
>>> I'd suggest not doing it by writing your own PacketIn handler and 
>>> demultiplexing it yourself.  Instead, just have your L2 stuff listen to 
>>> PacketIns from some switches, and your L3 stuff listen to PacketIns from 
>>> the others.  That is, you should make this decision in response to a 
>>> ConnectionUp event instead of each PacketIn.  Something like...
>>> 
>>> from pox.forwarding.l2_learning import LearningSwitch
>>> 
>>> def _handle_ConnectionUp (event):
>>> if event.dpid == 1:
>>>  LearningSwitch(event.connection, False)
>>> else:
>>>  # initialize your L3 thing, binding its events to this connection
>>> 
>>> 
>>> Hope that helps.
>>> 
>>> -- Murphy
>>> 
>>> On Nov 15, 2013, at 10:17 AM, Amer <amer7...@hotmail.com> wrote:
>>> 
>>>> Hello,
>>>> 
>>>> 
>>>> I want to create a handle packetin method, if the incoming packet is from 
>>>> specific switch run l2 if it from another run l3
>>>> What I did
>>>> 
>>>> from pox.forearding.l2_multi import *
>>>> 
>>>> def H_P (event):
>>>> p = event.parsed
>>>> If (p.dpid == "1"):
>>>>  sw= Switch()
>>>>  sw._handle_PacketIn(event)
>>>> Else:
>>>>   #. L3.learning
>>>> 
>>>> I have received this error:
>>>> NoneType object has no Len()
>>>> 
>>>> Pox.py l2l3 openflow.discovery
>>>> 
>>>> Any help is appreciated
>>>> 
>>>> Best regards,
>>>> Amer
> 
> 

Reply via email to