[ovs-dev] [post-8024 2/5] classifier: Don't check masks when adding IPv4/IPv6 addresses.
Justin Pettit
jpettit at nicira.com
Thu Nov 10 07:59:09 UTC 2011
The meta-flow code enforces IPv4/IPv6 masks, so there's no reason to do
it again in the classifier. This allows a number of functions to be
removed, since the only callers were in this classifier code.
---
lib/classifier.c | 55 +++++++++++++++++++-----------------------------
lib/classifier.h | 8 +++---
lib/flow.c | 60 ------------------------------------------------------
lib/flow.h | 6 -----
4 files changed, 26 insertions(+), 103 deletions(-)
diff --git a/lib/classifier.c b/lib/classifier.c
index 253a4d8..9903ab7 100644
--- a/lib/classifier.c
+++ b/lib/classifier.c
@@ -286,35 +286,30 @@ cls_rule_set_nw_proto(struct cls_rule *rule, uint8_t nw_proto)
void
cls_rule_set_nw_src(struct cls_rule *rule, ovs_be32 nw_src)
{
- cls_rule_set_nw_src_masked(rule, nw_src, htonl(UINT32_MAX));
+ rule->flow.nw_src = nw_src;
+ rule->wc.nw_src_mask = htonl(UINT32_MAX);
}
-bool
-cls_rule_set_nw_src_masked(struct cls_rule *rule, ovs_be32 ip, ovs_be32 mask)
+void
+cls_rule_set_nw_src_masked(struct cls_rule *rule,
+ ovs_be32 nw_src, ovs_be32 mask)
{
- if (flow_wildcards_set_nw_src_mask(&rule->wc, mask)) {
- rule->flow.nw_src = ip & mask;
- return true;
- } else {
- return false;
- }
+ rule->flow.nw_src = nw_src & mask;
+ rule->wc.nw_src_mask = mask;
}
void
cls_rule_set_nw_dst(struct cls_rule *rule, ovs_be32 nw_dst)
{
- cls_rule_set_nw_dst_masked(rule, nw_dst, htonl(UINT32_MAX));
+ rule->flow.nw_dst = nw_dst;
+ rule->wc.nw_dst_mask = htonl(UINT32_MAX);
}
-bool
+void
cls_rule_set_nw_dst_masked(struct cls_rule *rule, ovs_be32 ip, ovs_be32 mask)
{
- if (flow_wildcards_set_nw_dst_mask(&rule->wc, mask)) {
- rule->flow.nw_dst = ip & mask;
- return true;
- } else {
- return false;
- }
+ rule->flow.nw_dst = ip & mask;
+ rule->wc.nw_dst_mask = mask;
}
void
@@ -386,37 +381,31 @@ cls_rule_set_arp_tha(struct cls_rule *rule, const uint8_t tha[ETH_ADDR_LEN])
void
cls_rule_set_ipv6_src(struct cls_rule *rule, const struct in6_addr *src)
{
- cls_rule_set_ipv6_src_masked(rule, src, &in6addr_exact);
+ rule->flow.ipv6_src = *src;
+ rule->wc.ipv6_src_mask = in6addr_exact;
}
-bool
+void
cls_rule_set_ipv6_src_masked(struct cls_rule *rule, const struct in6_addr *src,
const struct in6_addr *mask)
{
- if (flow_wildcards_set_ipv6_src_mask(&rule->wc, mask)) {
- rule->flow.ipv6_src = ipv6_addr_bitand(src, mask);
- return true;
- } else {
- return false;
- }
+ rule->flow.ipv6_src = ipv6_addr_bitand(src, mask);
+ rule->wc.ipv6_src_mask = *mask;
}
void
cls_rule_set_ipv6_dst(struct cls_rule *rule, const struct in6_addr *dst)
{
- cls_rule_set_ipv6_dst_masked(rule, dst, &in6addr_exact);
+ rule->flow.ipv6_dst = *dst;
+ rule->wc.ipv6_dst_mask = in6addr_exact;
}
-bool
+void
cls_rule_set_ipv6_dst_masked(struct cls_rule *rule, const struct in6_addr *dst,
const struct in6_addr *mask)
{
- if (flow_wildcards_set_ipv6_dst_mask(&rule->wc, mask)) {
- rule->flow.ipv6_dst = ipv6_addr_bitand(dst, mask);
- return true;
- } else {
- return false;
- }
+ rule->flow.ipv6_dst = ipv6_addr_bitand(dst, mask);
+ rule->wc.ipv6_dst_mask = *mask;
}
void
diff --git a/lib/classifier.h b/lib/classifier.h
index 797afce..c33f1e1 100644
--- a/lib/classifier.h
+++ b/lib/classifier.h
@@ -113,9 +113,9 @@ void cls_rule_set_tp_src(struct cls_rule *, ovs_be16);
void cls_rule_set_tp_dst(struct cls_rule *, ovs_be16);
void cls_rule_set_nw_proto(struct cls_rule *, uint8_t);
void cls_rule_set_nw_src(struct cls_rule *, ovs_be32);
-bool cls_rule_set_nw_src_masked(struct cls_rule *, ovs_be32 ip, ovs_be32 mask);
+void cls_rule_set_nw_src_masked(struct cls_rule *, ovs_be32 ip, ovs_be32 mask);
void cls_rule_set_nw_dst(struct cls_rule *, ovs_be32);
-bool cls_rule_set_nw_dst_masked(struct cls_rule *, ovs_be32 ip, ovs_be32 mask);
+void cls_rule_set_nw_dst_masked(struct cls_rule *, ovs_be32 ip, ovs_be32 mask);
void cls_rule_set_nw_dscp(struct cls_rule *, uint8_t);
void cls_rule_set_nw_ecn(struct cls_rule *, uint8_t);
void cls_rule_set_nw_ttl(struct cls_rule *, uint8_t);
@@ -127,10 +127,10 @@ void cls_rule_set_icmp_code(struct cls_rule *, uint8_t);
void cls_rule_set_arp_sha(struct cls_rule *, const uint8_t[6]);
void cls_rule_set_arp_tha(struct cls_rule *, const uint8_t[6]);
void cls_rule_set_ipv6_src(struct cls_rule *, const struct in6_addr *);
-bool cls_rule_set_ipv6_src_masked(struct cls_rule *, const struct in6_addr *,
+void cls_rule_set_ipv6_src_masked(struct cls_rule *, const struct in6_addr *,
const struct in6_addr *);
void cls_rule_set_ipv6_dst(struct cls_rule *, const struct in6_addr *);
-bool cls_rule_set_ipv6_dst_masked(struct cls_rule *, const struct in6_addr *,
+void cls_rule_set_ipv6_dst_masked(struct cls_rule *, const struct in6_addr *,
const struct in6_addr *);
void cls_rule_set_ipv6_label(struct cls_rule *, ovs_be32);
void cls_rule_set_nd_target(struct cls_rule *, const struct in6_addr *);
diff --git a/lib/flow.c b/lib/flow.c
index f928cbe..08c76d9 100644
--- a/lib/flow.c
+++ b/lib/flow.c
@@ -764,66 +764,6 @@ flow_wildcards_has_extra(const struct flow_wildcards *a,
|| (a->vlan_tci_mask & b->vlan_tci_mask) != b->vlan_tci_mask);
}
-static bool
-set_nw_mask(ovs_be32 *maskp, ovs_be32 mask)
-{
- if (ip_is_cidr(mask)) {
- *maskp = mask;
- return true;
- } else {
- return false;
- }
-}
-
-/* Sets the IP (or ARP) source wildcard mask to CIDR 'mask' (consisting of N
- * high-order 1-bit and 32-N low-order 0-bits). Returns true if successful,
- * false if 'mask' is not a CIDR mask. */
-bool
-flow_wildcards_set_nw_src_mask(struct flow_wildcards *wc, ovs_be32 mask)
-{
- return set_nw_mask(&wc->nw_src_mask, mask);
-}
-
-/* Sets the IP (or ARP) destination wildcard mask to CIDR 'mask' (consisting of
- * N high-order 1-bit and 32-N low-order 0-bits). Returns true if successful,
- * false if 'mask' is not a CIDR mask. */
-bool
-flow_wildcards_set_nw_dst_mask(struct flow_wildcards *wc, ovs_be32 mask)
-{
- return set_nw_mask(&wc->nw_dst_mask, mask);
-}
-
-static bool
-set_ipv6_mask(struct in6_addr *maskp, const struct in6_addr *mask)
-{
- if (ipv6_is_cidr(mask)) {
- *maskp = *mask;
- return true;
- } else {
- return false;
- }
-}
-
-/* Sets the IPv6 source wildcard mask to CIDR 'mask' (consisting of N
- * high-order 1-bit and 128-N low-order 0-bits). Returns true if successful,
- * false if 'mask' is not a CIDR mask. */
-bool
-flow_wildcards_set_ipv6_src_mask(struct flow_wildcards *wc,
- const struct in6_addr *mask)
-{
- return set_ipv6_mask(&wc->ipv6_src_mask, mask);
-}
-
-/* Sets the IPv6 destination wildcard mask to CIDR 'mask' (consisting of
- * N high-order 1-bit and 128-N low-order 0-bits). Returns true if
- * successful, false if 'mask' is not a CIDR mask. */
-bool
-flow_wildcards_set_ipv6_dst_mask(struct flow_wildcards *wc,
- const struct in6_addr *mask)
-{
- return set_ipv6_mask(&wc->ipv6_dst_mask, mask);
-}
-
/* Sets the wildcard mask for register 'idx' in 'wc' to 'mask'.
* (A 0-bit indicates a wildcard bit.) */
void
diff --git a/lib/flow.h b/lib/flow.h
index 8137f15..aecc48b 100644
--- a/lib/flow.h
+++ b/lib/flow.h
@@ -177,12 +177,6 @@ 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);
-bool flow_wildcards_set_ipv6_src_mask(struct flow_wildcards *,
- const struct in6_addr *);
-bool flow_wildcards_set_ipv6_dst_mask(struct flow_wildcards *,
- const struct in6_addr *);
void flow_wildcards_set_reg_mask(struct flow_wildcards *,
int idx, uint32_t mask);
--
1.7.1
More information about the dev
mailing list