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