From a6620629e96cf8fa3e26012c9fa3a01831a5bfb9 Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Mon, 28 Nov 2016 19:31:45 +0100 Subject: [PATCH] F #4743: configurable bridge parameters --- share/etc/oned.conf | 2 ++ src/vnm_mad/remotes/lib/vlan.rb | 19 +++++++++++++++ src/vnm_mad/remotes/lib/vnm_driver.rb | 35 +++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/share/etc/oned.conf b/share/etc/oned.conf index 81cf892149..4437f0f7c5 100644 --- a/share/etc/oned.conf +++ b/share/etc/oned.conf @@ -841,6 +841,7 @@ VNET_RESTRICTED_ATTR = "PHYDEV" VNET_RESTRICTED_ATTR = "VLAN_ID" VNET_RESTRICTED_ATTR = "BRIDGE" VNET_RESTRICTED_ATTR = "CONF" +VNET_RESTRICTED_ATTR = "BRIDGE_CONF" VNET_RESTRICTED_ATTR = "AR/VN_MAD" VNET_RESTRICTED_ATTR = "AR/PHYDEV" @@ -903,6 +904,7 @@ INHERIT_VNET_ATTR = "OUTBOUND_AVG_BW" INHERIT_VNET_ATTR = "OUTBOUND_PEAK_BW" INHERIT_VNET_ATTR = "OUTBOUND_PEAK_KB" INHERIT_VNET_ATTR = "CONF" +INHERIT_VNET_ATTR = "BRIDGE_CONF" #******************************************************************************* # Transfer Manager Driver Behavior Configuration diff --git a/src/vnm_mad/remotes/lib/vlan.rb b/src/vnm_mad/remotes/lib/vlan.rb index 8564356895..4d59225826 100644 --- a/src/vnm_mad/remotes/lib/vlan.rb +++ b/src/vnm_mad/remotes/lib/vlan.rb @@ -127,11 +127,30 @@ module VNMMAD OpenNebula.exec_and_log("#{command(:brctl)} addbr #{@nic[:bridge]}") + set_bridge_options + @bridges[@nic[:bridge]] = Array.new OpenNebula.exec_and_log("#{command(:ip)} link set #{@nic[:bridge]} up") end + # Calls brctl to set options stored in bridge_conf + def set_bridge_options + @nic[:bridge_conf].each do |option, value| + case value + when true + value = "on" + when false + value = "off" + end + + cmd = "#{command(:brctl)} #{option} " << + "#{@nic[:bridge]} #{value}" + + OpenNebula.exec_and_log(cmd) + end + end + # Get hypervisor bridges # @return [Hash] with the bridge names def get_bridges diff --git a/src/vnm_mad/remotes/lib/vnm_driver.rb b/src/vnm_mad/remotes/lib/vnm_driver.rb index dad99ebd32..b52f53244f 100644 --- a/src/vnm_mad/remotes/lib/vnm_driver.rb +++ b/src/vnm_mad/remotes/lib/vnm_driver.rb @@ -72,6 +72,7 @@ module VNMMAD def process(&block) blk = lambda do |nic| add_nic_conf(nic) + add_bridge_conf(nic) block.call(nic) end @@ -100,6 +101,40 @@ module VNMMAD nic[:conf] = default_conf.merge(nic_conf) end + def add_bridge_conf(nic) + add_command_conf(nic, :bridge_conf) + end + + def add_command_conf(nic, conf_name) + default_conf = CONF[conf_name] || {} + nic_conf = {} + + # sanitize + default_conf.each do |key, value| + option = Shellwords.escape(key.to_s.strip.downcase) + if value.class == String + value = Shellwords.escape(value.strip) + end + + nic_conf[option] = value + end + + if nic[conf_name] + parse_options(nic[conf_name]).each do |option, value| + if value == '__delete__' + nic_conf.delete(option.strip.downcase) + else + option = Shellwords.escape(option.strip.downcase) + value = Shellwords.escape(value) + + nic_conf[option] = value + end + end + end + + nic[conf_name] = nic_conf + end + # Returns a filter object based on the contents of the template # # @return SGDriver object