More on my day's debugging: my previous comment was a bit premature, and a bit confusing. To clarify:
- dpif flows are not being deleted in time when the basic.OutputExact test runs on our most recent code - dpif flows are being deleted in time on last year's code (based on my previous upgrade from tip of master) - the reason they are being deleted at all is based on the return from revalidate_ukey(), which works in last year's code - the latest code also appears to be making the decision to delete the flow based on revalidate_ukey() - so, I need to keep looking and stop talking to the list! Tony On Fri, Jun 5, 2015 at 5:50 PM, Tony van der Peet <tony.vanderp...@gmail.com > wrote: > Alex and group > > This is a repeat of my earlier reply, sent also to the list (sorry about > dropping the list). Plus some information about my day's debugging. > > Tony > > On Thu, Jun 4, 2015 at 6:05 PM, Alex Wang <al...@nicira.com> wrote: > >> Hey, >> >> Few questions, >> >> 1. how do you change the flow to output to port 2? using >> ovs-ofctl mod-flows? Could you show the exact commands? >> > > I'm running an oftest test case, in the v1.3 tests, called > basic.OutputExact. The code is: > > class OutputExact(base_tests.SimpleDataPlane): > """ > Test output function for an exact-match flow > > For each port A, adds a flow directing matching packets to that port. > Then, for all other ports B != A, verifies that sending a matching > packet > to B results in an output to A. > """ > def runTest(self): > ports = sorted(config["port_map"].keys()) > > delete_all_flows(self.controller) > > parsed_pkt = simple_tcp_packet() > pkt = str(parsed_pkt) > match = packet_to_flow_match(self, parsed_pkt) > > for out_port in ports: > request = ofp.message.flow_add( > table_id=test_param_get("table", 0), > cookie=42, > match=match, > instructions=[ > ofp.instruction.apply_actions( > actions=[ > ofp.action.output( > port=out_port, > max_len=ofp.OFPCML_NO_BUFFER)])], > buffer_id=ofp.OFP_NO_BUFFER, > priority=1000) > > logging.info("Inserting flow sending matching packets to port > %d", out_port) > self.controller.message_send(request) > do_barrier(self.controller) > > for in_port in ports: > if in_port == out_port: > continue > logging.info("OutputExact test, ports %d to %d", in_port, > out_port) > self.dataplane.send(in_port, pkt) > verify_packets(self, pkt, [out_port]) > > >> 2. There was a commit (b2a4692 ofproto: Increase default datapath >> max_idle time.) that increased the max_idle time of dpif flows. That may >> be related. >> > > Not related, our code had already increased the timeout to 6s. > > My day's debugging: I am in a version of our build based on my previous > upgrade last year, and it passes the test. I'm in revalidate() and seeing > that flows are being deleted due to the return from revalidate_ukey(), > which sort of makes sense to me. The fact that udpif->need_revalidate is no > longer being set seems a bit suspicious to me. I will continue to work on > this and will update next week (since it's my Friday!). > > Tony > > >> Thanks, >> Alex Wang, >> >> On Wed, Jun 3, 2015 at 10:37 PM, Tony van der Peet < >> tony.vanderp...@gmail.com> wrote: >> >>> I use OpenVSwitch and occasionally upgrade from the tip of master. My >>> previous upgrade was in Sep/2014, and I have just upgraded to last Friday's >>> tip. A number of previously running test cases (using oftest) now fail for >>> me, and I am investigating. >>> >>> The v1.3 test basic.OutputExact creates a flow outputting to port 1, >>> then sends packets in ports 2, 3 and 4. The flow is then changed to output >>> to port 2 instead. Since everything else about the flow is the same, this >>> actually represents a change in the same flow (in my opinion) and therefore >>> the dpif flows created when packets were received should now be invalid. >>> However, when a packet is sent on port 3, instead of being output to port >>> 2, it is output to port 1, causing the test to fail. >>> >>> I think what's happening is that the dpif flows are not being deleted >>> when the flow changes. I am almost certain that this is not how the code >>> used to behave. I have also tweaked the test to explicitly remove the flow >>> before changing the output port, and this test passes. >>> >>> The questions I have are: Can anyone point me to the code change that >>> might have introduced this behaviour? Is it a deliberate change or a >>> by-product? While I could happily proceed by changing our regression test, >>> I would rather see if this behaviour can be altered to behave the way it >>> used to, which seems to me to be more conformant to the specification. >>> >>> Any advice gratefully accepted. >>> >>> Tony >>> >>> _______________________________________________ >>> discuss mailing list >>> discuss@openvswitch.org >>> http://openvswitch.org/mailman/listinfo/discuss >>> >>> >> >
_______________________________________________ discuss mailing list discuss@openvswitch.org http://openvswitch.org/mailman/listinfo/discuss