Hi,
We found a issue related to idle timeout of flow entry while working on OVS
1.2.2.
* Bug Description
Idle timeout is not resetting when packet matching the flow entry.
* What you did that make the problem appear?
1. Made the following bridge:
ovs-vsctl show
e999897a-932f-4a57-81ce-252adc12cce9
Bridge "br0"
fail_mode: secure
Port "br0"
Interface "br0"
type: internal
Port "em1"
Interface "em1"
Port "vnet0"
Interface "vnet0"
2. Create a ICMP flow entry with idle timeout 20 seconds
3. Send one ping packet after 10 seconds of this flow entry creation
4. Verify flow table after next 10 seconds
* What you expected to happen?
Flow entry should not be deleted and idle timer should restart when packet
match the flow entry.
* What actually happened.
Idle timeout is not resetting.
* The Open vSwitch version number (as output by "ovs-vswitchd --version")
ovs-vswitchd (Open vSwitch) 1.2.2
Compiled May 21 2012 11:23:22
OpenFlow versions 0x1:0x1
* The Git commit number (as output by "git rev-parse HEAD"),
if you built from a Git snapshot.
Not from git.
* Any local patches or changes you have applied (if any).
No patches are applied.
* The kernel version on which Open vSwitch is running (from
/proc/version) and the distribution and version number of
your OS (e.g. "Centos 5.0").
Linux version 2.6.38.6-26.rc1.fc15.x86_64
(mockbu...@x86-04.phx2.fedoraproject.org<mailto:mockbu...@x86-04.phx2.fedoraproject.org>)
(gcc version 4.6.0 20110428 (Red Hat 4.6.0-6) (GCC) ) #1 SMP Mon May 9
20:45:15 UTC 2011
OVS OS- Fedora 15
* The output of "ovs-dpctl show".
system@br0:
lookups: frags:0, hit:30, missed:6, lost:0
port 0: br0 (internal)
port 1: em1
* A fix or workaround, if you have one.
When a single packet hits the flow entry , an exact match flow (facet)is
created in datapath but first time when this facet is created, the rule used
time is not updated with facet used time. Rule used time is initialized when a
rule is added to flow table ,hence for single packet the rule used time remains
as rule creation time and rule gets deleted after idle timeout without
resetting the timer.
Rule_expired routine in ofproto-dpif.c uses rule->used variable to determine
whether to delete a rule or not, but in facet_update_time routine in
ofproto-dpif.c, rule->used variable is updated only when used time of
facet_execute is greater than facet used time, but for first packet both of
these are equal and hence rule used time is not getting updated, If we change
this condition to update rule->used variable when facet execute is greater than
OR EQUAL TO facet used time, this will fix this issue.
* Any other information that you think might be relevant.
We have verified this on OVS-1.4.1, same is happening on this release also.
DISCLAIMER:
-----------------------------------------------------------------------------------------------------------------------
The contents of this e-mail and any attachment(s) are confidential and
intended
for the named recipient(s) only.
It shall not attach any liability on the originator or NECHCL or its
affiliates. Any views or opinions presented in
this email are solely those of the author and may not necessarily reflect the
opinions of NECHCL or its affiliates.
Any form of reproduction, dissemination, copying, disclosure, modification,
distribution and / or publication of
this message without the prior written consent of the author of this e-mail is
strictly prohibited. If you have
received this email in error please delete it and notify the sender
immediately. .
-----------------------------------------------------------------------------------------------------------------------
_______________________________________________
discuss mailing list
discuss@openvswitch.org
http://openvswitch.org/mailman/listinfo/discuss