ofproto-dpif: Expire fin_timeout actions when no previous timeout set.
authorJustin Pettit <jpettit@nicira.com>
Wed, 17 Jul 2013 06:05:10 +0000 (23:05 -0700)
committerJustin Pettit <jpettit@nicira.com>
Wed, 17 Jul 2013 21:05:42 +0000 (14:05 -0700)
Commit e503cc199 (ofproto: Optimise OpenFlow flow expiry) optimized
OpenFlow flow expiration by putting expirable flows on a list.  However,
the list is only configured at rule creation time.  If the rule is
created without a timeout, but is later set by the fin_timeout action,
it will never expire.  This commit adds the rule to the list when the
action is triggered.

Signed-off-by: Justin Pettit <jpettit@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
ofproto/ofproto-dpif-xlate.c

index 0507f8e..bd96910 100644 (file)
@@ -1835,6 +1835,10 @@ xlate_fin_timeout(struct xlate_ctx *ctx,
     if (ctx->xin->tcp_flags & (TCP_FIN | TCP_RST) && ctx->rule) {
         struct rule_dpif *rule = ctx->rule;
 
+         if (list_is_empty(&rule->up.expirable)) {
+             list_insert(&rule->up.ofproto->expirable, &rule->up.expirable);
+         }
+
         reduce_timeout(oft->fin_idle_timeout, &rule->up.idle_timeout);
         reduce_timeout(oft->fin_hard_timeout, &rule->up.hard_timeout);
     }