Skip to content

Commit 3495e0e

Browse files
authored
Merge pull request #1900 from zzaimeche/ovsbpdu-fix
Allow enabling bpdu-forwarding on OVS bridges
2 parents f2e69e6 + 26878c1 commit 3495e0e

File tree

5 files changed

+18
-0
lines changed

5 files changed

+18
-0
lines changed

chef/cookbooks/barclamp/libraries/barclamp_library.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ class Network
9292
attr_reader :vlan, :use_vlan
9393
attr_reader :add_bridge, :add_ovs_bridge, :bridge_name
9494
attr_reader :conduit
95+
attr_reader :ovs_forward_bpdu
9596

9697
def initialize(node, net, data)
9798
@node = node
@@ -109,6 +110,7 @@ def initialize(node, net, data)
109110
@add_bridge = data["add_bridge"]
110111
@add_ovs_bridge = data["add_ovs_bridge"]
111112
@bridge_name = data["bridge_name"]
113+
@ovs_forward_bpdu = data["ovs_forward_bpdu"]
112114
# let's resolve this only if needed
113115
@interface = nil
114116
@interface_list = nil

chef/cookbooks/barclamp/libraries/nic.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,10 @@ def plug(slave)
843843
::Kernel.system("ovs-vsctl add-port #{@nic} #{slave}")
844844
end
845845

846+
def ovs_forward_bpdu(forward)
847+
::Kernel.system("ovs-vsctl set Bridge #{@nic} other_config:forward-bpdu=#{forward}")
848+
end
849+
846850
def self.create(nic, slaves = [])
847851
Chef::Log.info("Creating new OVS bridge #{nic}")
848852
if self.exists?(nic)

chef/cookbooks/network/recipes/default.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,12 @@ def kill_nic(nic)
448448
our_iface = br
449449
net_ifs << our_iface.name
450450
end
451+
452+
unless network.ovs_forward_bpdu.nil?
453+
Chef::Log.info("OVS BPDU forwarding set to #{network.ovs_forward_bpdu}.")
454+
ifs[our_iface.name]["ovs_forward_bpdu"] = network.ovs_forward_bpdu
455+
end
456+
451457
if network.mtu
452458
Chef::Log.info("Using mtu #{network.mtu} for #{network.name} network on #{our_iface.name}")
453459
ifs[our_iface.name]["mtu"] = network.mtu
@@ -682,15 +688,19 @@ def kill_nic(nic)
682688
end
683689

684690
pre_up_script = "/etc/wicked/scripts/#{nic.name}-pre-up"
691+
ovs_forward_bpdu = ifs[nic.name]["ovs_forward_bpdu"] || false
685692
is_admin_nwk = if_mapping.key?("admin") && if_mapping["admin"].include?(nic.name)
686693

694+
nic.ovs_forward_bpdu(ovs_forward_bpdu)
695+
687696
template pre_up_script do
688697
owner "root"
689698
group "root"
690699
mode "0755"
691700
source "ovs-pre-up.sh.erb"
692701
variables(
693702
bridgename: nic.name,
703+
ovs_forward_bpdu: ovs_forward_bpdu,
694704
is_admin_nwk: is_admin_nwk
695705
)
696706
end

chef/cookbooks/network/templates/default/ovs-pre-up.sh.erb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#! /bin/bash
22

33
ovs-vsctl br-exists <%= @bridgename %> || exit 0
4+
ovs-vsctl set bridge <%= @bridgename %> other-config:forward-bpdu=<%= @ovs_forward_bpdu %>
45
<%
56
# remove the "secure" fail-mode for bridges that share an interface
67
# with the "admin" network, otherwise the admin network will be offline

chef/data_bags/crowbar/template-network.schema

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
"add_bridge": { "type": "bool", "required": true },
8989
"add_ovs_bridge": { "type": "bool", "required": false },
9090
"bridge_name": { "type": "str", "required": false },
91+
"ovs_forward_bpdu": { "type": "bool", "required": false },
9192
"subnet": { "type": "str", "required": true, "name": "IpAddress" },
9293
"netmask": { "type": "str", "required": true, "name": "IpAddress" },
9394
"broadcast": { "type": "str", "required": true, "name": "IpAddress" },

0 commit comments

Comments
 (0)