[ovs-dev] [PATCH] ofproto-dpif: Never wildcard dl_type for "normal" action.

Justin Pettit jpettit at nicira.com
Wed Jun 12 00:21:30 UTC 2013

The is_gratuitous_arp() function is occasionally called when
processing the "normal" action.  The previous code only disabled
wildcarding the dl_type field when the function was called, but
since it runs occasionally, it could lead to inconsistencies in the
facet table.  This commit causes the dl_type to never be wildcarded
when the "normal" action is used.

Signed-off-by: Justin Pettit <jpettit at nicira.com>
 ofproto/ofproto-dpif.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 8df2679..ace8ba7 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -7531,7 +7531,6 @@ update_mirror_stats(struct ofproto_dpif *ofproto, mirror_mask_t mirrors,
 static bool
 is_gratuitous_arp(const struct flow *flow, struct flow_wildcards *wc)
-    memset(&wc->masks.dl_type, 0xff, sizeof wc->masks.dl_type);
     if (flow->dl_type != htons(ETH_TYPE_ARP)) {
         return false;
@@ -7707,6 +7706,10 @@ xlate_normal(struct xlate_ctx *ctx)
     ctx->xout->has_normal = true;
+    /* Check the dl_type, since we may check for gratuituous ARP. */
+    memset(&ctx->xout->wc.masks.dl_type, 0xff,
+           sizeof ctx->xout->wc.masks.dl_type);
     memset(&ctx->xout->wc.masks.dl_src, 0xff,
            sizeof ctx->xout->wc.masks.dl_src);
     memset(&ctx->xout->wc.masks.dl_dst, 0xff,

More information about the dev mailing list