lib: Add zero padding field to flow_wildcards.
authorEthan Jackson <ethan@nicira.com>
Fri, 3 Dec 2010 23:43:24 +0000 (15:43 -0800)
committerEthan Jackson <ethan@nicira.com>
Fri, 3 Dec 2010 23:52:59 +0000 (15:52 -0800)
Before this commit, the compiler would add two bytes of padding to
the 'flow_wildcards' structure to achieve 32bit alignment.  These
two bytes had inconsistent values which caused 'flow_wildcards_hash'
to behave inconsistently.  This commit explicitly 32bit aligns
'flow_wildcards' with zero padding.

This commit also fixes an issue where in-band rules were not
getting deleted when in-band control was disabled.

lib/flow.c
lib/flow.h

index 7198f7d71a0f4af544189e7ddce6f0a9976e4763..ebbd927aeb1fcfd33708ddb07ad0f0bee730826f 100644 (file)
@@ -306,6 +306,7 @@ flow_wildcards_init_catchall(struct flow_wildcards *wc)
     wc->nw_dst_mask = htonl(0);
     memset(wc->reg_masks, 0, sizeof wc->reg_masks);
     wc->vlan_tci_mask = htons(0);
+    wc->zero = 0;
 }
 
 /* Initializes 'wc' as an exact-match set of wildcards; that is, 'wc' does not
@@ -318,6 +319,7 @@ flow_wildcards_init_exact(struct flow_wildcards *wc)
     wc->nw_dst_mask = htonl(UINT32_MAX);
     memset(wc->reg_masks, 0xff, sizeof wc->reg_masks);
     wc->vlan_tci_mask = htons(UINT16_MAX);
+    wc->zero = 0;
 }
 
 /* Returns true if 'wc' is exact-match, false if 'wc' wildcards any bits or
index fd3246b6a4d453b52427d7aa0b348a1318477d49..1509a7d121913da7961e6c1376a0f35bc0fb9eb5 100644 (file)
@@ -124,6 +124,7 @@ struct flow_wildcards {
     ovs_be32 nw_src_mask;       /* 1-bit in each significant nw_src bit. */
     ovs_be32 nw_dst_mask;       /* 1-bit in each significant nw_dst bit. */
     ovs_be16 vlan_tci_mask;     /* 1-bit in each significant vlan_tci bit. */
+    uint16_t zero;              /* Padding field set to zero. */
 };
 
 void flow_wildcards_init_catchall(struct flow_wildcards *);