fail-open: Add function to identify fail-open's flows.
authorBen Pfaff <blp@nicira.com>
Wed, 23 Oct 2013 04:36:22 +0000 (21:36 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 23 Oct 2013 15:37:31 +0000 (08:37 -0700)
This seems slightly cleaner than embedding this logic directing into
ofproto-dpif, since it is an interface that theoretically could be useful
to other ofproto providers.

Signed-off-by: Ben Pfaff <blp@nicira.com>
ofproto/fail-open.h
ofproto/ofproto-dpif-xlate.c
ofproto/ofproto-dpif.c
ofproto/ofproto-dpif.h

index 4e91ea0..c8e1f32 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009, 2010, 2011 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2011, 2013 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
 
 #include <stdbool.h>
 #include <stdint.h>
-#include "flow.h"
+#include "ofproto-provider.h"
 
 struct connmgr;
 struct fail_open;
@@ -31,6 +31,14 @@ struct ofproto;
  * creates flows with this priority).  And "f0" is mnemonic for "fail open"! */
 #define FAIL_OPEN_PRIORITY 0xf0f0f0
 
+/* Returns true if 'rule' is one created by the "fail open" logic, false
+ * otherwise. */
+static inline bool
+is_fail_open_rule(const struct rule *rule)
+{
+    return rule->cr.priority == FAIL_OPEN_PRIORITY;
+}
+
 struct fail_open *fail_open_create(struct ofproto *, struct connmgr *);
 void fail_open_destroy(struct fail_open *);
 void fail_open_wait(struct fail_open *);
index c2812c8..ed9ca7c 100644 (file)
@@ -2778,7 +2778,7 @@ xlate_actions__(struct xlate_in *xin, struct xlate_out *xout)
         }
         ctx.rule = rule;
     }
-    xout->fail_open = ctx.rule && rule_dpif_fail_open(ctx.rule);
+    xout->fail_open = ctx.rule && rule_dpif_is_fail_open(ctx.rule);
 
     if (xin->ofpacts) {
         ofpacts = xin->ofpacts;
index f53384d..67c21f5 100644 (file)
@@ -4304,9 +4304,10 @@ rule_dpif_credit_stats(struct rule_dpif *rule,
 }
 
 bool
-rule_dpif_fail_open(const struct rule_dpif *rule)
+rule_dpif_is_fail_open(const struct rule_dpif *rule)
 {
-    return rule->up.cr.priority == FAIL_OPEN_PRIORITY;
+    return is_fail_open_rule(&rule->up);
+}
 }
 
 ovs_be64
index 0f96031..ab5dfbb 100644 (file)
@@ -74,7 +74,7 @@ void rule_dpif_unref(struct rule_dpif *);
 void rule_dpif_credit_stats(struct rule_dpif *rule ,
                             const struct dpif_flow_stats *);
 
-bool rule_dpif_fail_open(const struct rule_dpif *rule);
+bool rule_dpif_is_fail_open(const struct rule_dpif *);
 
 struct rule_actions *rule_dpif_get_actions(const struct rule_dpif *);