Module: Dcmgr::NodeModules::Bandwidth
- Includes:
- Helpers::NicHelper, Logger
- Included in:
- ServiceNetfilter
- Defined in:
- lib/dcmgr/node_modules/service_netfilter.rb
Instance Method Summary collapse
Methods included from Logger
create, default_logdev, included
Methods included from Helpers::NicHelper
#find_nic, #nic_state, #valid_nic?
Instance Method Details
#clear_bandwidth_limits ⇒ Object
12 13 14 15 |
# File 'lib/dcmgr/node_modules/service_netfilter.rb', line 12 def clear_bandwidth_limits logger.debug "Removing all bandwidth limits" "tc qdisc del dev #{find_nic(@node.manifest.config.hv_ifindex)} root" end |
#limit_bandwidth(networks) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/dcmgr/node_modules/service_netfilter.rb', line 17 def limit_bandwidth(networks) bandwidth_cmd = [] #raise ArgumentError unless inst_maps.is_a?(Hash) nic = find_nic(@node.manifest.config.hv_ifindex) #Determine the physical nic's peed in Mbit/s speed = %x{ethtool #{nic} | grep Speed | cut -d ' ' -f2}.chomp.to_i #Set up root disc bandwidth_cmd << "tc qdisc add dev #{nic} root handle 1: htb" bandwidth_cmd << "tc class add dev #{nic} parent 1: classid 1:1 htb rate #{speed}mbit ceil #{speed}mbit" networks.each { |nw| next if nw[:bandwidth].nil? logger.debug "Limiting bandwidth to #{nw[:bandwidth]}Mbit/s for #{nw[:uuid]}." #Set up the bandwidth limit for this network bandwidth_cmd << "tc class add dev #{nic} parent 1:1 classid 1:1#{nw[:bandwidth_mark]} htb rate #{nw[:bandwidth]}mbit ceil #{nw[:bandwidth]}mbit prio 1" bandwidth_cmd << "tc qdisc add dev #{nic} parent 1:1#{nw[:bandwidth_mark]} handle 1#{nw[:bandwidth_mark]}: sfq perturb 10" bandwidth_cmd << "tc filter add dev #{nic} protocol ip parent 1: prio 1 handle #{nw[:bandwidth_mark]} fw classid 1:1#{nw[:bandwidth_mark]}" #Mark the packets passing through this network ["s","d"].each { |x| bandwidth_cmd << "iptables -A FORWARD -#{x} #{nw[:ipv4_gw]}/#{nw[:prefix]} -j MARK --set-mark 0x#{nw[:bandwidth_mark]}" } } bandwidth_cmd end |