From 2bc5ffe2d29bec00bd21840328fb093f885b866a Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Tue, 29 Nov 2016 12:26:52 +0100 Subject: [PATCH] F #4770: add ip link add options to 802.1Q and VXLAN Conversion of true/false values is duplicated as these methods could be also used by OpenvSwitch and it uses "true"/"false" instead of "on"/"off". --- share/etc/oned.conf | 2 ++ src/vnm_mad/remotes/802.1Q/vlan_tag_driver.rb | 15 ++++++++++++++- src/vnm_mad/remotes/lib/vnm_driver.rb | 5 +++++ src/vnm_mad/remotes/vxlan/vxlan_driver.rb | 15 ++++++++++++++- 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/share/etc/oned.conf b/share/etc/oned.conf index 4437f0f7c5..e588792bc7 100644 --- a/share/etc/oned.conf +++ b/share/etc/oned.conf @@ -842,6 +842,7 @@ VNET_RESTRICTED_ATTR = "VLAN_ID" VNET_RESTRICTED_ATTR = "BRIDGE" VNET_RESTRICTED_ATTR = "CONF" VNET_RESTRICTED_ATTR = "BRIDGE_CONF" +VNET_RESTRICTED_ATTR = "IP_LINK_CONF" VNET_RESTRICTED_ATTR = "AR/VN_MAD" VNET_RESTRICTED_ATTR = "AR/PHYDEV" @@ -905,6 +906,7 @@ INHERIT_VNET_ATTR = "OUTBOUND_PEAK_BW" INHERIT_VNET_ATTR = "OUTBOUND_PEAK_KB" INHERIT_VNET_ATTR = "CONF" INHERIT_VNET_ATTR = "BRIDGE_CONF" +INHERIT_VNET_ATTR = "IP_LINK_CONF" #******************************************************************************* # Transfer Manager Driver Behavior Configuration diff --git a/src/vnm_mad/remotes/802.1Q/vlan_tag_driver.rb b/src/vnm_mad/remotes/802.1Q/vlan_tag_driver.rb index 691ade0310..81378fabdc 100644 --- a/src/vnm_mad/remotes/802.1Q/vlan_tag_driver.rb +++ b/src/vnm_mad/remotes/802.1Q/vlan_tag_driver.rb @@ -45,9 +45,22 @@ class VLANTagDriver < VNMMAD::VLANDriver def create_vlan_dev mtu = @nic[:mtu] ? "mtu #{@nic[:mtu]}" : "" + ip_link_conf = "" + + @nic[:ip_link_conf].each do |option, value| + case value + when true + value = "on" + when false + value = "off" + end + + ip_link_conf << "#{option} #{value} " + end + OpenNebula.exec_and_log("#{command(:ip)} link add link"\ " #{@nic[:phydev]} name #{@nic[:vlan_dev]} #{mtu} type vlan id"\ - " #{@nic[:vlan_id]}") + " #{@nic[:vlan_id]} #{ip_link_conf}") OpenNebula.exec_and_log("#{command(:ip)} link set #{@nic[:vlan_dev]} up") end diff --git a/src/vnm_mad/remotes/lib/vnm_driver.rb b/src/vnm_mad/remotes/lib/vnm_driver.rb index 0c726ceb50..1fed860bb7 100644 --- a/src/vnm_mad/remotes/lib/vnm_driver.rb +++ b/src/vnm_mad/remotes/lib/vnm_driver.rb @@ -73,6 +73,7 @@ module VNMMAD blk = lambda do |nic| add_nic_conf(nic) add_bridge_conf(nic) + add_ip_link_conf(nic) block.call(nic) end @@ -105,6 +106,10 @@ module VNMMAD add_command_conf(nic, :bridge_conf) end + def add_ip_link_conf(nic) + add_command_conf(nic, :ip_link_conf) + end + def add_command_conf(nic, conf_name) default_conf = CONF[conf_name] || {} nic_conf = {} diff --git a/src/vnm_mad/remotes/vxlan/vxlan_driver.rb b/src/vnm_mad/remotes/vxlan/vxlan_driver.rb index 320d5fd0f3..428b29db0c 100644 --- a/src/vnm_mad/remotes/vxlan/vxlan_driver.rb +++ b/src/vnm_mad/remotes/vxlan/vxlan_driver.rb @@ -49,9 +49,22 @@ class VXLANDriver < VNMMAD::VLANDriver mtu = @nic[:mtu] ? "mtu #{@nic[:mtu]}" : "" ttl = @nic[:conf][:vxlan_ttl] ? "ttl #{@nic[:conf][:vxlan_ttl]}" : "" + ip_link_conf = "" + + @nic[:ip_link_conf].each do |option, value| + case value + when true + value = "on" + when false + value = "off" + end + + ip_link_conf << "#{option} #{value} " + end + OpenNebula.exec_and_log("#{command(:ip)} link add #{@nic[:vlan_dev]}"\ " #{mtu} type vxlan id #{@nic[:vlan_id]} group #{mcs} #{ttl}"\ - " dev #{@nic[:phydev]}") + " dev #{@nic[:phydev]} #{ip_link_conf}") OpenNebula.exec_and_log("#{command(:ip)} link set #{@nic[:vlan_dev]} up") end