Maybe you can be more clear about what you don't understand.  As far as I can 
remember, there's no magic to it at all and it's pretty straightforward Python 
code.  _install_path() creates a WaitingPath. For every switch it sends a 
flow-mod to, it also sends a barrier-request.  It adds the XIDs of the barriers 
(XIDs are basically message IDs if you aren't familiar with OpenFlow) to the 
WaitingPath.  When a barrier-reply is received, it has the XID of the 
barrier-request, which is used to notify the appropriate WaitingPath object, 
which removes it from the set of barriers it's waiting for.  When the 
WaitingPath has no more barriers left, the whole path has been installed, so it 
sends a packet-out along the new path.

-- Murphy

On Jun 3, 2014, at 12:38 AM, farshad tajedin <farshad.taje...@gmail.com> wrote:

> hi
>  
> i look at l2_multi and i dont understand how it wait for barrier replies. can 
> u guide me ?
> 
> 
> On Fri, May 30, 2014 at 8:47 AM, Murphy McCauley <murphy.mccau...@gmail.com> 
> wrote:
> This capture is somewhat difficult to follow since all captures appear to be 
> coming from the same port even though they aren't.
> 
> I think the situation you're referring to it like the repeated packet in 
> 19469 and 19487.  These packets appear to be coming from different switches.  
> I think the mystery is why the second switch is sending the packet-in, as 
> 19472 appears to be a flow-mod which on quick inspection appears that it 
> should match the ping.
> 
> One possibility is that the flow-mod hasn't taken effect yet.  You're not 
> actually guaranteed when it will.  If you send a barrier request and wait for 
> the reply, you'll know it has.  If you look at l2_multi, you'll notice it 
> sends flow-mods, waits for barrier replies, and THEN actually forwards the 
> packet.  You could probably test if this was the problem by simply waiting 
> for like... half a second or so before sending the packet-out.
> 
> Another possibility is that there's something subtly wrong with the match 
> which didn't immediately pop out at me.  You might try using 
> ofp_match.from_packet() temporarily to create the match.
> 
> -- Murphy
> 
> On May 27, 2014, at 12:26 AM, farshad tajedin <farshad.taje...@gmail.com> 
> wrote:
> 
>> P.S 
>> sorry i forgot to say that please filter this pcap to ip.addr==10.0.0.1
>> 
>> 
>> On Tue, May 27, 2014 at 11:48 AM, farshad tajedin 
>> <farshad.taje...@gmail.com> wrote:
>> its pcap link:
>> https://www.dropbox.com/s/9964xavdbqrv27n/pingSenario
>> 
>> 
>> On Tue, May 27, 2014 at 9:50 AM, Murphy McCauley <murphy.mccau...@gmail.com> 
>> wrote:
>> 
>> On May 26, 2014, at 10:18 PM, farshad tajedin <farshad.taje...@gmail.com> 
>> wrote:
>> 
>>> 
>>> 
>>> ---------- Forwarded message ----------
>>> From: farshad tajedin <farshad.taje...@gmail.com>
>>> Date: Mon, May 26, 2014 at 9:28 AM
>>> Subject: Re: [pox-dev] packet in message
>>> To: Murphy McCauley <murphy.mccau...@gmail.com>
>>> Cc: pox-dev <pox-dev@lists.noxrepo.org>
>>> 
>>> 
>>> ok , this code called when a packet received to edge switch for example 
>>> e_s1(in my scenario, h1 ping h2 and h1 connected to e_s1 ) and path 
>>> calculated between two hosts, this code first sends add flow setup msg to 
>>> switches on this path(line1,2,3,4,5) including e_s1 then sends packet out 
>>> msg to e_s1 (line 6) 
>>> 
>>> 1-core.openflow.sendToDPID(int('0002'+self.ToDPIDformat(SelectOne[1]),16),self.add_FlowEntri((SelectOne[2]%(NumOfPod/2))+(NumOfPod/2)+1,str(dstIP),0x800))
>>> 
>>> 2-core.openflow.sendToDPID(int('0001'+self.ToDPIDformat(SelectOne[2]),16),self.add_FlowEntri((SelectOne[3]/(NumOfPod/2))+1,str(dstIP),0x800))
>>> 
>>> 3-core.openflow.sendToDPID(int('0002'+self.ToDPIDformat(SelectOne[3]),16),self.add_FlowEntri((SelectOne[4]%(NumOfPod/2))+1,str(dstIP),0x800))
>>> 
>>> 4-core.openflow.sendToDPID(int('0003'+self.ToDPIDformat(SelectOne[4]),16),self.add_FlowEntri(((int(dstNo)-1)%(NumOfPod/2))+1,str(dstIP),0x800))
>>>                    
>>>  
>>> 5-self.connection.send(self.add_FlowEntri((SelectOne[1]%(NumOfPod/2))+(NumOfPod/2)+1,str(dstIP),0x800))
>>>  
>>> 6-self.connection.send(self.packetOutMsg((SelectOne[1]%(NumOfPod/2))+(NumOfPod/2)+1,of.buffer_id,of.data))
>>>   
>>> ----------------------------------------------------------------------------------------------------------------------------------------------
>>> can i attach pcap file for this senario?
>> 
>> Sure.  Or upload it somewhere and post the link.  (There's a file size 
>> limit, though it's at least a few hundred K.)
>> 
>> Ideally you'd have captures for all the interfaces on the switch and its 
>> control connection.  With synchronized timestamps or as a single capture 
>> (but done in such a way that interfaces can be differentiated).
>> 
>> -- Murphy
>> 
>>> On Mon, May 26, 2014 at 1:55 AM, Murphy McCauley 
>>> <murphy.mccau...@gmail.com> wrote:
>>> Well, I'm not able to learn anything from that code snippet.  I repeat my 
>>> advice of using Wireshark to watch the traffic on the switch which sends 
>>> the two packet-ins and try to confirm whether it actually receives the 
>>> packet twice.
>>> 
>>> -- Murphy
>>> 
>>> On May 25, 2014, at 10:51 AM, farshad tajedin <farshad.taje...@gmail.com> 
>>> wrote:
>>> 
>>>> P.S 
>>>>  when i remove last line every thing is ok
>>>> 
>>>> 
>>>> On Sun, May 25, 2014 at 10:17 PM, farshad tajedin 
>>>> <farshad.taje...@gmail.com> wrote:
>>>> sorry this hase better view
>>>> -core.openflow.sendToDPID(int('0002'+self.ToDPIDformat(SelectOne[1]),16),self.add_FlowEntri((SelectOne[2]%(NumOfPod/2))+(NumOfPod/2)+1,str(dstIP),0x800))
>>>> 
>>>> -core.openflow.sendToDPID(int('0001'+self.ToDPIDformat(SelectOne[2]),16),self.add_FlowEntri((SelectOne[3]/(NumOfPod/2))+1,str(dstIP),0x800))
>>>> 
>>>> -core.openflow.sendToDPID(int('0002'+self.ToDPIDformat(SelectOne[3]),16),self.add_FlowEntri((SelectOne[4]%(NumOfPod/2))+1,str(dstIP),0x800))
>>>> 
>>>> -core.openflow.sendToDPID(int('0003'+self.ToDPIDformat(SelectOne[4]),16),self.add_FlowEntri(((int(dstNo)-1)%(NumOfPod/2))+1,str(dstIP),0x800))
>>>>                    
>>>>  
>>>> -self.connection.send(self.add_FlowEntri((SelectOne[1]%(NumOfPod/2))+(NumOfPod/2)+1,str(dstIP),0x800))
>>>>  
>>>> -self.connection.send(self.packetOutMsg((SelectOne[1]%(NumOfPod/2))+(NumOfPod/2)+1,of.buffer_id,of.data))
>>>>    
>>>> 
>>>> 
>>>> On Sun, May 25, 2014 at 10:16 PM, farshad tajedin 
>>>> <farshad.taje...@gmail.com> wrote:
>>>> this my code section which make this problem: 
>>>> 
>>>> core.openflow.sendToDPID(int('0002'+self.ToDPIDformat(SelectOne[1]),16),self.add_FlowEntri((SelectOne[2]%(NumOfPod/2))+(NumOfPod/2)+1,str(dstIP),0x800))
>>>>           
>>>> core.openflow.sendToDPID(int('0001'+self.ToDPIDformat(SelectOne[2]),16),self.add_FlowEntri((SelectOne[3]/(NumOfPod/2))+1,str(dstIP),0x800))
>>>>                     
>>>> core.openflow.sendToDPID(int('0002'+self.ToDPIDformat(SelectOne[3]),16),self.add_FlowEntri((SelectOne[4]%(NumOfPod/2))+1,str(dstIP),0x800))
>>>>                     
>>>> core.openflow.sendToDPID(int('0003'+self.ToDPIDformat(SelectOne[4]),16),self.add_FlowEntri(((int(dstNo)-1)%(NumOfPod/2))+1,str(dstIP),0x800))
>>>>                    
>>>>  
>>>> self.connection.send(self.add_FlowEntri((SelectOne[1]%(NumOfPod/2))+(NumOfPod/2)+1,str(dstIP),0x800))
>>>>  
>>>> self.connection.send(self.packetOutMsg((SelectOne[1]%(NumOfPod/2))+(NumOfPod/2)+1,of.buffer_id,of.data))
>>>>                    
>>>> 
>>>> 
>>>> On Sun, May 25, 2014 at 11:44 AM, farshad tajedin 
>>>> <farshad.taje...@gmail.com> wrote:
>>>> yes of curse but not now because i am at my job now and haven't access to 
>>>> source code, i will do this a few hours later.
>>>> 
>>>> 
>>>> On Sun, May 25, 2014 at 10:07 AM, Murphy McCauley 
>>>> <murphy.mccau...@gmail.com> wrote:
>>>> Generally speaking, there's only ever one active connection to a switch at 
>>>> a time.
>>>> 
>>>> Can you share a minimal version of your code which demonstrates the issue?
>>>> 
>>>> -- Murphy
>>>> 
>>>> On May 24, 2014, at 10:20 PM, farshad tajedin <farshad.taje...@gmail.com> 
>>>> wrote:
>>>> 
>>>>> as i said before in my controller code i used two connection to e_s1 
>>>>> sequentially one for installing flow entry and next connection for 
>>>>> sending packet out message. if connecting to switches done by thread 
>>>>> programming so these message sending parallel, is these parallel message 
>>>>> to one switch make problem?
>>>>> 
>>>>> 
>>>>> On Sun, May 25, 2014 at 8:15 AM, Murphy McCauley 
>>>>> <murphy.mccau...@gmail.com> wrote:
>>>>> It's implemented by a recoco Task as described in the POX manual.  
>>>>> Beneath that, there's a thread, but then... isn't there always?
>>>>> 
>>>>> -- Murphy
>>>>> 
>>>>> On May 24, 2014, at 4:04 AM, farshad tajedin <farshad.taje...@gmail.com> 
>>>>> wrote:
>>>>> 
>>>>>> is connection to switch implemented by thread? 
>>>>>> 
>>>>>> 
>>>>>> On Sat, May 24, 2014 at 9:26 AM, Murphy McCauley 
>>>>>> <murphy.mccau...@gmail.com> wrote:
>>>>>> How about disabling enough links in your topology so that it doesn't 
>>>>>> have loops and then trying?  (I'm wondering if the second one has looped 
>>>>>> back to where it started somehow.)
>>>>>> 
>>>>>> Another thought would be to wireshark all the ports of the switch where 
>>>>>> you're seeing two of these packets.  Do you actually see the packet 
>>>>>> arrive twice?  Leave twice?  Etc.
>>>>>> 
>>>>>> -- Murphy
>>>>>> 
>>>>>> On May 23, 2014, at 9:51 PM, farshad tajedin <farshad.taje...@gmail.com> 
>>>>>> wrote:
>>>>>> 
>>>>>>> yes both of them are same except buffer id , i do this in mininet
>>>>>>> 
>>>>>>> 
>>>>>>> On Fri, May 23, 2014 at 2:53 PM, farshad tajedin 
>>>>>>> <farshad.taje...@gmail.com> wrote:
>>>>>>> yes both of them are same except buffer id , i do this in mininet
>>>>>>> 
>>>>>>> 
>>>>>>> On Fri, May 23, 2014 at 1:23 PM, Murphy McCauley 
>>>>>>> <murphy.mccau...@gmail.com> wrote:
>>>>>>> Are the packet-in messages and their payloads 100% identical?
>>>>>>> 
>>>>>>> Are you doing this on real hardware, or in Mininet, or... ?
>>>>>>> 
>>>>>>> -- Murphy
>>>>>>> 
>>>>>>> On May 22, 2014, at 11:13 PM, farshad tajedin 
>>>>>>> <farshad.taje...@gmail.com> wrote:
>>>>>>> 
>>>>>>>> hi murphy 
>>>>>>>> i have a path between two hosts(h1 and h2) in a data center,when i 
>>>>>>>> ping h2 from h1 since switches on this path have no flow entry for 
>>>>>>>> route icmp packet to h2 , the edge switch that h1 connected to 
>>>>>>>> it(e_s1) ,send icmp packet to controller. in controller i handle it 
>>>>>>>> and i add flow entry to each switch on this path in my controller code 
>>>>>>>> and at last send packet out msg to  e_s1 to forward this packet. 
>>>>>>>> during this action (ping h2 from h1) i capture traffic of my network 
>>>>>>>> by wireshark and i see packet in msg from e_s1 two times sends to 
>>>>>>>> controller that i expect packet in msg must send once. 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Fri, May 23, 2014 at 4:30 AM, Murphy McCauley 
>>>>>>>> <murphy.mccau...@gmail.com> wrote:
>>>>>>>> I think you'll need to provide a lot more detail.
>>>>>>>> 
>>>>>>>> Are you saying that you're trying to proactively insert all the rules 
>>>>>>>> into the switch when it connects, but you're getting packet-ins (from 
>>>>>>>> table misses) anyway and you're not expecting them?
>>>>>>>> 
>>>>>>>> How do packet-outs factor in here?
>>>>>>>> 
>>>>>>>> -- Murphy
>>>>>>>> 
>>>>>>>> On May 22, 2014, at 5:45 AM, farshad tajedin 
>>>>>>>> <farshad.taje...@gmail.com> wrote:
>>>>>>>> 
>>>>>>>>> i must say that i use 1.add flow message and 2.packet out message 
>>>>>>>>> sequensialy 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On Thu, May 22, 2014 at 3:17 PM, farshad tajedin 
>>>>>>>>> <farshad.taje...@gmail.com> wrote:
>>>>>>>>> hi all
>>>>>>>>> 
>>>>>>>>> i have a fat-tree topology, when i ping a host from another host i 
>>>>>>>>> found that first host 2 times send packet in message to controller 
>>>>>>>>> and i dont know why. can anybody help me ?
>>>>>>>>> 
>>>>>>>>> P.S  i use  core.openflow.addListenerByName("ConnectionUp", 
>>>>>>>>> start_switch) for event handling.
>>>>>>>>> 
>>>>>>>>> -- 
>>>>>>>>> Best Regards
>>>>>>>>> 
>>>>>>>>> Farshad Tajedin
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> -- 
>>>>>>>>> Best Regards
>>>>>>>>> 
>>>>>>>>> Farshad Tajedin
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> -- 
>>>>>>>> Best Regards
>>>>>>>> 
>>>>>>>> Farshad Tajedin
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> -- 
>>>>>>> Best Regards
>>>>>>> 
>>>>>>> Farshad Tajedin
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> -- 
>>>>>>> Best Regards
>>>>>>> 
>>>>>>> Farshad Tajedin
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> -- 
>>>>>> Best Regards
>>>>>> 
>>>>>> Farshad Tajedin
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> -- 
>>>>> Best Regards
>>>>> 
>>>>> Farshad Tajedin
>>>> 
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> Best Regards
>>>> 
>>>> Farshad Tajedin
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> Best Regards
>>>> 
>>>> Farshad Tajedin
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> Best Regards
>>>> 
>>>> Farshad Tajedin
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> Best Regards
>>>> 
>>>> Farshad Tajedin
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> Best Regards
>>> 
>>> Farshad Tajedin
>>> 
>>> 
>>> 
>>> -- 
>>> Best Regards
>>> 
>>> Farshad Tajedin
>> 
>> 
>> 
>> 
>> -- 
>> Best Regards
>> 
>> Farshad Tajedin
>> 
>> 
>> 
>> -- 
>> Best Regards
>> 
>> Farshad Tajedin
> 
> 
> 
> 
> -- 
> Best Regards
> 
> Farshad Tajedin

Reply via email to