classifier: Support miniflow as a key.
[sliver-openvswitch.git] / lib / flow.c
index 03d86ae..8319dde 100644 (file)
@@ -1813,28 +1813,10 @@ miniflow_hash_in_minimask(const struct miniflow *flow,
                           const struct minimask *mask, uint32_t basis)
 {
     const uint32_t *p = mask->masks.values;
-    uint32_t hash;
-    uint64_t map;
-    const uint32_t *fp = flow->values;
-    uint64_t fmap = flow->map;
-    uint64_t rm1bit;
-
-    hash = basis;
-
-    for (map = mask->masks.map; map; map -= rm1bit) {
-        uint32_t flow_u32 = 0;
-
-        rm1bit = rightmost_1bit(map);
-        if (fmap & rm1bit) {
-            uint64_t trash = fmap & (rm1bit - 1);
+    uint32_t hash = basis;
+    uint32_t flow_u32;
 
-            /* Skip data in 'flow' that is of no interest, once. */
-            if (trash) {
-                fp += count_1bits(trash);
-                fmap -= trash;
-            }
-            flow_u32 = *fp;
-        }
+    MINIFLOW_FOR_EACH_IN_MAP(flow_u32, flow, mask->masks.map) {
         hash = mhash_add(hash, flow_u32 & *p++);
     }