match: New function minimatch_matches_flow().
[sliver-openvswitch.git] / lib / match.h
index 7b104ee..48c8aa2 100644 (file)
@@ -132,13 +132,15 @@ void match_print(const struct match *);
 
 /* A sparse representation of a "struct match".
  *
- * This has the same invariant as "struct match", that is, a 1-bit in the
- * 'flow' must correspond to a 1-bit in 'mask'.
+ * There are two invariants:
  *
- * The invariants for the underlying miniflow and minimask are also maintained,
- * which means that 'flow' and 'mask' can have different 'map's.  In
- * particular, if the match checks that a given 32-bit field has value 0, then
- * 'map' will have a 1-bit in 'mask' but a 0-bit in 'flow' for that field. */
+ *   - The same invariant as "struct match", that is, a 1-bit in the 'flow'
+ *     must correspond to a 1-bit in 'mask'.
+ *
+ *   - 'flow' and 'mask' have the same 'map'.  This implies that 'flow' and
+ *     'mask' have the same part of "struct flow" at the same offset into
+ *     'values', which makes minimatch_matches_flow() faster.
+ */
 struct minimatch {
     struct miniflow flow;
     struct minimask mask;
@@ -154,6 +156,8 @@ void minimatch_expand(const struct minimatch *, struct match *);
 bool minimatch_equal(const struct minimatch *a, const struct minimatch *b);
 uint32_t minimatch_hash(const struct minimatch *, uint32_t basis);
 
+bool minimatch_matches_flow(const struct minimatch *, const struct flow *);
+
 void minimatch_format(const struct minimatch *, struct ds *,
                       unsigned int priority);
 char *minimatch_to_string(const struct minimatch *, unsigned int priority);