mirror of
https://github.com/openvswitch/ovs
synced 2025-10-23 14:57:06 +00:00
flow: New function flow_wildcards_is_catchall().
This will be used in an upcoming commit.
This commit is contained in:
30
lib/flow.c
30
lib/flow.c
@@ -606,6 +606,8 @@ flow_wildcards_is_exact(const struct flow_wildcards *wc)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
BUILD_ASSERT_DECL(FLOW_WC_SEQ == 1);
|
||||||
|
|
||||||
if (wc->wildcards
|
if (wc->wildcards
|
||||||
|| wc->tun_id_mask != htonll(UINT64_MAX)
|
|| wc->tun_id_mask != htonll(UINT64_MAX)
|
||||||
|| wc->nw_src_mask != htonl(UINT32_MAX)
|
|| wc->nw_src_mask != htonl(UINT32_MAX)
|
||||||
@@ -625,6 +627,34 @@ flow_wildcards_is_exact(const struct flow_wildcards *wc)
|
|||||||
return true;
|
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'.
|
/* 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
|
* That is, a bit or a field is wildcarded in 'dst' if it is wildcarded in
|
||||||
* 'src1' or 'src2' or both. */
|
* 'src1' or 'src2' or both. */
|
||||||
|
|||||||
@@ -164,6 +164,7 @@ void flow_wildcards_init_catchall(struct flow_wildcards *);
|
|||||||
void flow_wildcards_init_exact(struct flow_wildcards *);
|
void flow_wildcards_init_exact(struct flow_wildcards *);
|
||||||
|
|
||||||
bool flow_wildcards_is_exact(const 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_src_mask(struct flow_wildcards *, ovs_be32);
|
||||||
bool flow_wildcards_set_nw_dst_mask(struct flow_wildcards *, ovs_be32);
|
bool flow_wildcards_set_nw_dst_mask(struct flow_wildcards *, ovs_be32);
|
||||||
|
|||||||
Reference in New Issue
Block a user