]> git.proxmox.com Git - mirror_ovs.git/commitdiff
classifier: Make classifier_lookup() 'flow' parameter non-const.
authorBen Pfaff <blp@nicira.com>
Thu, 30 Oct 2014 21:12:45 +0000 (14:12 -0700)
committerBen Pfaff <blp@nicira.com>
Sun, 11 Jan 2015 21:07:06 +0000 (13:07 -0800)
An upcoming commit will make classifier_lookup() sometimes modify its
'flow' argument temporarily during the lookup.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jarno Rajahalme <jrajahalme@nicira.com>
---
v2: New patch.
v2.1: Rebase.
v3: Rebase.

lib/classifier.c
lib/classifier.h
lib/tnl-ports.c
lib/tnl-ports.h
ofproto/ofproto-dpif.c

index 0ac53561c937415e4e77dcf8a50db0600e206a4d..814493e0825f61597434ce1270571b5c962c68f8 100644 (file)
@@ -816,9 +816,12 @@ trie_ctx_init(struct trie_ctx *ctx, const struct cls_trie *trie)
  * If a rule is found and 'wc' is non-null, bitwise-OR's 'wc' with the
  * set of bits that were significant in the lookup.  At some point
  * earlier, 'wc' should have been initialized (e.g., by
- * flow_wildcards_init_catchall()). */
+ * flow_wildcards_init_catchall()).
+ *
+ * 'flow' is non-const to allow for temporary modifications during the lookup.
+ * Any changes are restored before returning. */
 const struct cls_rule *
-classifier_lookup(const struct classifier *cls, const struct flow *flow,
+classifier_lookup(const struct classifier *cls, struct flow *flow,
                   struct flow_wildcards *wc)
 {
     const struct cls_partition *partition;
index 2bd6fd332adbb5f69c7498e888674d8535f9751e..9ebc506e81a09f5171050d1c87db12f294559136 100644 (file)
@@ -295,7 +295,7 @@ static inline void classifier_publish(struct classifier *);
 /* Lookups.  These are RCU protected and may run concurrently with modifiers
  * and each other. */
 const struct cls_rule *classifier_lookup(const struct classifier *,
-                                         const struct flow *,
+                                         struct flow *,
                                          struct flow_wildcards *);
 bool classifier_rule_overlaps(const struct classifier *,
                               const struct cls_rule *);
index 7ab25eb38c42e6dcbc173b7c386267460b832a97..ff616a29add62239a789ca829c9eeaa81c87c466 100644 (file)
@@ -134,8 +134,10 @@ tnl_port_map_delete(ovs_be32 ip_dst, ovs_be16 udp_port)
     tnl_port_unref(cr);
 }
 
+/* 'flow' is non-const to allow for temporary modifications during the lookup.
+ * Any changes are restored before returning. */
 odp_port_t
-tnl_port_map_lookup(const struct flow *flow, struct flow_wildcards *wc)
+tnl_port_map_lookup(struct flow *flow, struct flow_wildcards *wc)
 {
     const struct cls_rule *cr = classifier_lookup(&cls, flow, wc);
 
index 0597afa2ef251d5be8e9728f906438166e2687e0..37a689f97065071f7ea55caa1ae9122f1ee4e92e 100644 (file)
@@ -24,8 +24,7 @@
 #include "packets.h"
 #include "util.h"
 
-odp_port_t tnl_port_map_lookup(const struct flow *flow,
-                           struct flow_wildcards *wc);
+odp_port_t tnl_port_map_lookup(struct flow *flow, struct flow_wildcards *wc);
 
 void tnl_port_map_insert(odp_port_t port, ovs_be32 ip_dst, ovs_be16 udp_port,
                          const char dev_name[]);
index c92931dd6a3584414e014a1e1126591d69e6e1d7..bf15d047e5c0c0354eb8d110acde2f01ddd62dde 100644 (file)
@@ -3735,10 +3735,13 @@ rule_dpif_lookup(struct ofproto_dpif *ofproto, struct flow *flow,
 
 /* The returned rule (if any) is valid at least until the next RCU quiescent
  * period.  If the rule needs to stay around longer, a non-zero 'take_ref'
- * must be passed in to cause a reference to be taken on it. */
+ * must be passed in to cause a reference to be taken on it.
+ *
+ * 'flow' is non-const to allow for temporary modifications during the lookup.
+ * Any changes are restored before returning. */
 static struct rule_dpif *
 rule_dpif_lookup_in_table(struct ofproto_dpif *ofproto, uint8_t table_id,
-                          const struct flow *flow, struct flow_wildcards *wc,
+                          struct flow *flow, struct flow_wildcards *wc,
                           bool take_ref)
 {
     struct classifier *cls = &ofproto->up.tables[table_id].cls;
@@ -3778,7 +3781,10 @@ rule_dpif_lookup_in_table(struct ofproto_dpif *ofproto, uint8_t table_id,
  * on it before this returns.
  *
  * 'in_port' allows the lookup to take place as if the in port had the value
- * 'in_port'.  This is needed for resubmit action support. */
+ * 'in_port'.  This is needed for resubmit action support.
+ *
+ * 'flow' is non-const to allow for temporary modifications during the lookup.
+ * Any changes are restored before returning. */
 struct rule_dpif *
 rule_dpif_lookup_from_table(struct ofproto_dpif *ofproto, struct flow *flow,
                             struct flow_wildcards *wc, bool take_ref,