From 2a5183ac07277f7a57052fd6d082523011339521 Mon Sep 17 00:00:00 2001 From: Justin Pettit Date: Tue, 16 Jul 2013 23:05:10 -0700 Subject: [PATCH] ofproto-dpif: Expire fin_timeout actions when no previous timeout set. 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 Acked-by: Ben Pfaff --- ofproto/ofproto-dpif-xlate.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index 0507f8eb8..bd96910e9 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -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); } -- 2.43.0