From c943a3ea752ffe39cfbd34783bb123b1e860c356 Mon Sep 17 00:00:00 2001 From: Alex Wang Date: Wed, 21 May 2014 20:45:24 -0700 Subject: [PATCH] ofproto-dpif-xlate: Fix a bug. Commit b256dc525c8 (ofproto-dpif-xlate: Cache xlate_actions() effects.) caches the variables needed for refreshing mac-learning table in xlate_normal(). Wherein, the cache entry always records reference to the original 'ofproto'. When patch port is used to connect two 'ofproto's, packet goes through the patch port will have two mac-learning cache entries created for each 'ofproto'. So, each entry should reference to the corresponding 'ofproto'. However, due to the bug mentioned above, all cache entries will refer to the same 'ofproto'. Subsequently, the mac-learning tables can be corrupted, which causes connection loss. This commit fixes the bug by making each cache entry refer to the correct 'ofproto'. Signed-off-by: Alex Wang Acked-by: Joe Stringer --- ofproto/ofproto-dpif-xlate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index f08d1ecbc..df4ec1775 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -1553,7 +1553,7 @@ xlate_normal(struct xlate_ctx *ctx) /* Save enough info to update mac learning table later. */ entry = xlate_cache_add_entry(ctx->xin->xcache, XC_NORMAL); - entry->u.normal.ofproto = ctx->xin->ofproto; + entry->u.normal.ofproto = ctx->xbridge->ofproto; entry->u.normal.flow = xmemdup(flow, sizeof *flow); entry->u.normal.vlan = vlan; } -- 2.20.1