Looks good.  Do you think it's worth adding a comment explaining this?

--Justin


On Aug 13, 2013, at 11:28 AM, Ben Pfaff <[email protected]> wrote:

> Threaded ofproto-dpif uses a queue to pass packets from the forwarding
> threads to the main thread for (mega)flow setup and for learning.  When
> learning occurs, causing revalidations, this races against flow setup, so
> that sometimes a datapath (mega)flow does get set up for a packet that
> causes learning and sometimes it doesn't.  This caused this test to
> sometimes fail because one megaflow or the other that was expected to be
> set up was not.
> 
> This commit fixes the problem by sending a second packet in each flow.
> These additional packets don't cause any additional changes to the flow
> table but they do cause flows to be set up, fixing the problem.
> 
> Signed-off-by: Ben Pfaff <[email protected]>
> ---
> tests/ofproto-dpif.at |    7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
> index 46e1dea..2e3e8f6 100644
> --- a/tests/ofproto-dpif.at
> +++ b/tests/ofproto-dpif.at
> @@ -2581,8 +2581,11 @@ AT_DATA([flows.txt], [dnl
> table=0 in_port=1 
> actions=load:2->NXM_NX_REG0[[0..15]],learn(table=1,priority=65535,NXM_OF_ETH_SRC[[]],NXM_OF_VLAN_TCI[[0..11]],output:NXM_NX_REG0[[0..15]]),output:2
> ])
> AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
> -AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> -AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> +for i in 1 2; do
> +    AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> +    AT_CHECK([ovs-appctl netdev-dummy/receive p1 
> 'in_port(1),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.4,dst=10.0.0.3,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)'])
> +    ovs-appctl time/warp 100
> +done
> dnl The original flow is missing due to a revalidation.
> AT_CHECK([ovs-appctl dpif/dump-megaflows br0 | STRIP_XOUT], [0], [dnl
> skb_priority=0,ip,in_port=1,vlan_tci=0x0000/0x0fff,dl_src=50:54:00:00:00:09,nw_frag=no,
>  n_subfacets:1, used:0.0s, Datapath actions: <del>
> -- 
> 1.7.10.4
> 
> _______________________________________________
> dev mailing list
> [email protected]
> http://openvswitch.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to