unsigned flow_eviction_threshold; /* Threshold at which to begin flow
* table eviction. Only affects the
* ofproto-dpif implementation */
+ bool forward_bpdu; /* Option to allow forwarding of BPDU frames
+ * when NORMAL action is invoked. */
char *mfr_desc; /* Manufacturer. */
char *hw_desc; /* Hardware. */
char *sw_desc; /* Software version. */
struct ofproto *ofproto_lookup(const char *name);
struct ofport *ofproto_get_port(const struct ofproto *, uint16_t ofp_port);
+/* Assigns CLS to each classifier table, in turn, in OFPROTO.
+ *
+ * All parameters are evaluated multiple times. */
+#define OFPROTO_FOR_EACH_TABLE(CLS, OFPROTO) \
+ for ((CLS) = (OFPROTO)->tables; \
+ (CLS) < &(OFPROTO)->tables[(OFPROTO)->n_tables]; \
+ (CLS)++)
+
+
/* An OpenFlow port within a "struct ofproto".
*
* With few exceptions, ofproto implementations may look at these fields but
* If multiple tables are candidates for inserting the flow, the function
* should choose one arbitrarily (but deterministically).
*
- * This function will never be called for an ofproto that has only one
- * table, so it may be NULL in that case. */
+ * If this function is NULL then table 0 is always chosen. */
int (*rule_choose_table)(const struct ofproto *ofproto,
const struct cls_rule *cls_rule,
uint8_t *table_idp);
/* Returns true if 'aux' is a registered bundle that is currently in use as
* the output for a mirror. */
bool (*is_mirror_output_bundle)(struct ofproto *ofproto, void *aux);
+
+ /* When the configuration option of forward_bpdu changes, this function
+ * will be invoked. */
+ void (*forward_bpdu_changed)(struct ofproto *ofproto);
};
extern const struct ofproto_class ofproto_dpif_class;