diff options
| author | Ben Pfaff <blp@nicira.com> | 2011-09-12 16:38:52 -0700 |
|---|---|---|
| committer | Ben Pfaff <blp@nicira.com> | 2011-09-13 11:46:10 -0700 |
| commit | ecf1e7ac2bc61b1d614395354554e672535135f8 (patch) | |
| tree | 51cda5cb892eafb5fc2ae4e5d1ebe46936170a48 /lib | |
| parent | 993410fbc742a6beec0841a2be542c4105684e12 (diff) | |
| download | openvswitch-ecf1e7ac2bc61b1d614395354554e672535135f8.tar.gz | |
flow: New function flow_wildcards_is_catchall().
This will be used in an upcoming commit.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/flow.c | 30 | ||||
| -rw-r--r-- | lib/flow.h | 1 |
2 files changed, 31 insertions, 0 deletions
diff --git a/lib/flow.c b/lib/flow.c index 8ec31ab97..6b78ae36f 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -606,6 +606,8 @@ flow_wildcards_is_exact(const struct flow_wildcards *wc) { int i; + BUILD_ASSERT_DECL(FLOW_WC_SEQ == 1); + if (wc->wildcards || wc->tun_id_mask != htonll(UINT64_MAX) || wc->nw_src_mask != htonl(UINT32_MAX) @@ -625,6 +627,34 @@ flow_wildcards_is_exact(const struct flow_wildcards *wc) return true; } +/* Returns true if 'wc' matches every packet, false if 'wc' fixes any bits or + * fields. */ +bool +flow_wildcards_is_catchall(const struct flow_wildcards *wc) +{ + int i; + + BUILD_ASSERT_DECL(FLOW_WC_SEQ == 1); + + if (wc->wildcards != FWW_ALL + || wc->tun_id_mask != htonll(0) + || wc->nw_src_mask != htonl(0) + || wc->nw_dst_mask != htonl(0) + || wc->vlan_tci_mask != htons(0) + || !ipv6_mask_is_any(&wc->ipv6_src_mask) + || !ipv6_mask_is_any(&wc->ipv6_dst_mask)) { + return false; + } + + for (i = 0; i < FLOW_N_REGS; i++) { + if (wc->reg_masks[i] != 0) { + return false; + } + } + + return true; +} + /* Initializes 'dst' as the combination of wildcards in 'src1' and 'src2'. * That is, a bit or a field is wildcarded in 'dst' if it is wildcarded in * 'src1' or 'src2' or both. */ diff --git a/lib/flow.h b/lib/flow.h index e7b49a8f2..6212f8453 100644 --- a/lib/flow.h +++ b/lib/flow.h @@ -164,6 +164,7 @@ void flow_wildcards_init_catchall(struct flow_wildcards *); void flow_wildcards_init_exact(struct flow_wildcards *); bool flow_wildcards_is_exact(const struct flow_wildcards *); +bool flow_wildcards_is_catchall(const struct flow_wildcards *); bool flow_wildcards_set_nw_src_mask(struct flow_wildcards *, ovs_be32); bool flow_wildcards_set_nw_dst_mask(struct flow_wildcards *, ovs_be32); |
