2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-15 14:17:18 +00:00

match: New function minimatch_matches_flow().

Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
Ben Pfaff
2013-02-06 16:13:19 -08:00
parent 60a0b9e5e1
commit df40c1520e
5 changed files with 146 additions and 40 deletions

View 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);