*
* 'rule->ref_count' protects 'rule' from being freed. It doesn't protect the
* rule from being deleted from 'cls' (that's 'cls->rwlock') and it doesn't
- * protect members of 'rule' from modification (that's 'rule->rwlock').
+ * protect members of 'rule' from modification (that's 'rule->mutex').
*
* 'rule->mutex' protects the members of 'rule' from modification. It doesn't
* protect the rule from being deleted from 'cls' (that's 'cls->rwlock') and it
struct rule_actions *rule_get_actions__(const struct rule *rule)
OVS_REQUIRES(rule->mutex);
+/* Returns true if 'rule' is an OpenFlow 1.3 "table-miss" rule, false
+ * otherwise.
+ *
+ * ("Table-miss" rules are special because a packet_in generated through one
+ * uses OFPR_NO_MATCH as its reason, whereas packet_ins generated by any other
+ * rule use OFPR_ACTION.) */
+static inline bool
+rule_is_table_miss(const struct rule *rule)
+{
+ return rule->cr.priority == 0 && cls_rule_is_catchall(&rule->cr);
+}
+
/* A set of actions within a "struct rule".
*
*