Your first call to install_datapath_flow() in the code below is wrong.  The 
last argument you're passing is priority.  But the parameter at that position 
is buffer_id.  So what you're actually doing is telling the switch to use 
buffer_id 5 over and over.

Either insert a "None" between actions and priority, or make the last argument 
use a keyword argument ("priority=priority").

Hope that helps.

-- Murphy

On Dec 1, 2011, at 1:52 AM, Giorgio Mazza wrote:

> Hello,
> I have a problem in the communication between an OpenFlow switch (I use 
> OpenVswitch) and my NOX controller, connected out-of-band.
> The two machines connects, but, after I install the first flow, I get the 
> following error message:
> *openflow-event|ERR:received Openflow error packet from dpid=XXXXXX:
> type=1, code=7, 24 bytes of data*
> 
> and the "*ovs-openflowd*" terminal showed following error
> 
> *"attempt to reuse the buffer"*
> 
> While discussing on ovs-discuss mailing list they suggest that "Send a given 
> buffer_id only in a single OpenFlow request".
> I have also seen that there was a guy who wrote here an email as he had the 
> same problem, so maybe you already solved this.
> 
> In my controller I want to install flows after a miss in the flow table. Here 
> is a part of the code.
> 
>         def packet_in_callback(self, dp_id, inport, ofp_reason, 
> total_frame_len, buffer_id, packet):
>         ethr_pkt = packet.find('ethernet')
> 
>                 if (ofp_reason == openflow.OFPR_NO_MATCH) :
>                         print "!!!!!!!!!!!!!!!!!!!  W A R N I N G 
> !!!!!!!!!!!!!!!!!!!!"
>                         print "No matching rule in the flow table."
> 
>                         if(ethr_pkt.type == ethernet.ARP_TYPE):
>                         m_arp = ethr_pkt.find('arp')
>                         src_ip = ip_to_str(m_arp.protosrc)
>                         dst_ip = ip_to_str(m_arp.protodst)
>                         print "Received an ARP packet with", "\n src_ip: ", 
> src_ip, "dst_ip: ", dst_ip
>                         arp_type = m_arp.opcode
>                         if (arp_type == 1):                         
>                             print "This is an ARP REQUEST coming from port", 
> inport
>                         elif (arp_type == 2):
>                             print "This is an ARP REPLY coming from port", 
> inport
>                         attr = {}
>                         attr [core.IN_PORT] = inport
>                         attr [core.DL_TYPE] = ethr_pkt.type
>                         idle_timeout = openflow.OFP_FLOW_PERMANENT
>                         hard_timeout = openflow.OFP_FLOW_PERMANENT
>                         priority = 5
>                         if inport == 25:
>                             outport = 26
>                         elif inport == 26:
>                             outport = 25
>                         actions = [[openflow.OFPAT_OUTPUT, [0,outport]]]
>                         self.install_datapath_flow(dp_id,
>                                                                    attr,
>                                                                    
> idle_timeout,
>                                                                    
> hard_timeout,
>                                                                    actions,
>                                                                    priority)
> 
>             
>             elif(ethr_pkt.type == 0x0800):
>                         ip_pkt = packet.find('ipv4')
>                         src_ip = ip_to_str(ip_pkt.srcip)
>                         dst_ip = ip_to_str(ip_pkt.dstip)
>                         tos = ip_pkt.tos
>                         nw_proto = ip_pkt.protocol                            
>                                                        
>                         print "The incoming packet has the following 
> structure: ", "\n L3 Protocol: ", nw_proto, "\n src_ip: ", src_ip
>                         print  " dst_ip: ", dst_ip, "\n TOS: ", tos
>                            
>                             
>                         if (ip_pkt.protocol == 1):
>                             attrs = {}
>                             attrs[core.IN_PORT] = inport
>                             attrs[core.DL_TYPE] = ethr_pkt.type
>                             attrs[core.NW_SRC] = ip_pkt.srcip
>                             attrs[core.NW_DST] = ip_pkt.dstip
>                             attrs[core.NW_PROTO] = nw_proto
>                             attrs[core.NW_TOS] = tos
>                             idle_timeout = openflow.OFP_FLOW_PERMANENT
>                             hard_timeout = openflow.OFP_FLOW_PERMANENT
>                             if inport == 26:
>                                 outport = 25
>                             elif inport == 25:
>                                 outport = 26
>                             actions = [[openflow.OFPAT_OUTPUT, [0, outport]]]
>                             self.install_datapath_flow(dp_id,
>                                                                        attrs,
>                                                                        
> idle_timeout,
>                                                                        
> hard_timeout,
>                                                                        
> actions,
>                                                                        None,
>                                                                        
> openflow.OFP_DEFAULT_PRIORITY,
>                                                                        inport,
>                                                                        None)
>                                
> 
> 
> and so on with other if-else conditions.
> Do you have any ideas of what could be the cause of such a behaviour and how 
> could I solve it?
> 
> I also extended NOX source code a little in order to add a new L4 protocol 
> for my work. Do you think this issue could be related to some mistakes I 
> could have done?
> 
> 
> Thanks,
> Giorgio Mazza
> _______________________________________________
> nox-dev mailing list
> nox-dev@noxrepo.org
> http://noxrepo.org/mailman/listinfo/nox-dev

_______________________________________________
nox-dev mailing list
nox-dev@noxrepo.org
http://noxrepo.org/mailman/listinfo/nox-dev

Reply via email to