static void bridge_configure_datapath_id(struct bridge *);
static void bridge_configure_flow_eviction_threshold(struct bridge *);
static void bridge_configure_netflow(struct bridge *);
+static void bridge_configure_forward_bpdu(struct bridge *);
static void bridge_configure_sflow(struct bridge *, int *sflow_bridge_number);
static void bridge_configure_remotes(struct bridge *,
const struct sockaddr_in *managers,
bridge_configure_mirrors(br);
bridge_configure_datapath_id(br);
bridge_configure_flow_eviction_threshold(br);
+ bridge_configure_forward_bpdu(br);
bridge_configure_remotes(br, managers, n_managers);
bridge_configure_netflow(br);
bridge_configure_sflow(br, &sflow_bridge_number);
/* Open the netdev. */
if (!iface->netdev) {
- struct netdev_options options;
- options.name = iface->name;
- options.type = iface->type;
- error = netdev_open(&options, &iface->netdev);
+ error = netdev_open(iface->name, iface->type, &iface->netdev);
if (error) {
VLOG_WARN("could not open network device %s (%s)",
iface->name, strerror(error));
if (port_is_bond_fake_iface(port)) {
if (ofproto_port_query_by_name(br->ofproto, port->name,
&ofproto_port)) {
- struct netdev_options options;
struct netdev *netdev;
int error;
- options.name = port->name;
- options.type = "internal";
- error = netdev_open(&options, &netdev);
+ error = netdev_open(port->name, "internal", &netdev);
if (!error) {
ofproto_port_add(br->ofproto, netdev, NULL);
netdev_close(netdev);
ofproto_set_flow_eviction_threshold(br->ofproto, threshold);
}
+/* Set forward BPDU option. */
+static void
+bridge_configure_forward_bpdu(struct bridge *br)
+{
+ const char *forward_bpdu_str;
+ bool forward_bpdu = false;
+
+ forward_bpdu_str = bridge_get_other_config(br->cfg, "forward-bpdu");
+ if (forward_bpdu_str && !strcmp(forward_bpdu_str, "true")) {
+ forward_bpdu = true;
+ }
+ ofproto_set_forward_bpdu(br->ofproto, forward_bpdu);
+}
+
static void
bridge_pick_local_hw_addr(struct bridge *br, uint8_t ea[ETH_ADDR_LEN],
struct iface **hw_addr_iface)