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