+ char *name; /* Table name exposed via OpenFlow, or NULL. */
+
+ /* Maximum number of flows or UINT_MAX if there is no limit besides any
+ * limit imposed by resource limitations. */
+ unsigned int max_flows;
+
+ /* These members determine the handling of an attempt to add a flow that
+ * would cause the table to have more than 'max_flows' flows.
+ *
+ * If 'eviction_fields' is NULL, overflows will be rejected with an error.
+ *
+ * If 'eviction_fields' is nonnull (regardless of whether n_eviction_fields
+ * is nonzero), an overflow will cause a flow to be removed. The flow to
+ * be removed is chosen to give fairness among groups distinguished by
+ * different values for the subfields within 'groups'. */
+ struct mf_subfield *eviction_fields;
+ size_t n_eviction_fields;
+
+ /* Eviction groups.
+ *
+ * When a flow is added that would cause the table to have more than
+ * 'max_flows' flows, and 'eviction_fields' is nonnull, these groups are
+ * used to decide which rule to evict: the rule is chosen from the eviction
+ * group that contains the greatest number of rules.*/
+ uint32_t eviction_group_id_basis;
+ struct hmap eviction_groups_by_id;
+ struct heap eviction_groups_by_size;