module Havox::Network
Public Class Methods
define(&block)
click to toggle source
# File lib/havox/dsl/network.rb, line 14 def self.define(&block) reset! directive_proxy = Havox::DSL::DirectiveProxy.new directive_proxy.instance_eval(&block) @rib = Havox::RIB.new infer_associations_by_ospf end
devices()
click to toggle source
# File lib/havox/dsl/network.rb, line 10 def self.devices; @devices end
directives()
click to toggle source
# File lib/havox/dsl/network.rb, line 8 def self.directives; @directives end
reachable(protocol = :bgp)
click to toggle source
# File lib/havox/dsl/network.rb, line 30 def self.reachable(protocol = :bgp) @rib.nil? ? [] : @rib.network_list(protocol) end
reset!()
click to toggle source
# File lib/havox/dsl/network.rb, line 34 def self.reset! @directives = [] @devices = {} @rib = nil @topology = nil end
rib()
click to toggle source
# File lib/havox/dsl/network.rb, line 9 def self.rib; @rib end
topology()
click to toggle source
# File lib/havox/dsl/network.rb, line 11 def self.topology; @topology end
topology=(topo)
click to toggle source
# File lib/havox/dsl/network.rb, line 12 def self.topology=(topo); @topology = topo end
transcompile(opts = {})
click to toggle source
# File lib/havox/dsl/network.rb, line 22 def self.transcompile(opts = {}) @directives.map do |d| src_hosts = @topology.host_names - @topology.switch_hosts[d.switch.to_s] dst_hosts = @topology.switch_hosts[d.switch.to_s] d.to_block(src_hosts, dst_hosts, opts[:qos]) end end
Private Class Methods
associate_routers(grouped_routes, switch_name, switch_ip)
click to toggle source
# File lib/havox/dsl/network.rb, line 52 def associate_routers(grouped_routes, switch_name, switch_ip) grouped_routes.each do |network_str, routes| network = IPAddr.new(network_str) router_name = routes.last.router if network.include?(switch_ip) && @devices[router_name].nil? @devices[router_name] = switch_name break end end end
infer_associations_by_ospf()
click to toggle source
# File lib/havox/dsl/network.rb, line 44 def infer_associations_by_ospf direct_ospf_routes = @rib.routes.select { |r| r.ospf? && r.direct? } grouped_routes = direct_ospf_routes.group_by(&:network) @topology.switch_ips.each do |switch_name, switch_ip| associate_routers(grouped_routes, switch_name, switch_ip) end end