class Construqt::Addresses::Address
Attributes
host[RW]
interface[RW]
ips[RW]
Public Class Methods
new()
click to toggle source
# File lib/construqt/addresses.rb, line 96 def initialize() self.ips = [] self.host = nil self.interface = nil @routes = [] self.tags = [] @loopback = @dhcpv4 = @dhcpv6 = false @name = nil end
Public Instance Methods
add_ip(ip, region = "")
click to toggle source
# File lib/construqt/addresses.rb, line 161 def add_ip(ip, region = "") throw "please give a ip #{ip}" if ip.nil? if ip #puts ">>>>> #{ip} #{ip.class.name}" if DHCPV4 == ip @dhcpv4 = true elsif DHCPV6 == ip @dhcpv6 = true elsif LOOOPBACK == ip @loopback = true else throw "please give a ip #{ip} as string!" unless ip.kind_of?(String) (unused, ip) = self.merge_tag(ip) { |ip| CqIpAddress.new(IPAddress.parse(ip), self) } self.ips << ip end end self end
add_route(dst, via, option = {})
click to toggle source
# File lib/construqt/addresses.rb, line 272 def add_route(dst, via, option = {}) @routes << build_route(dst, via, option) self end
add_routes(addr_s, via, options = {})
click to toggle source
# File lib/construqt/addresses.rb, line 226 def add_routes(addr_s, via, options = {}) addrs = addr_s.kind_of?(Array) ? addr_s : [addr_s] addrs.each do |addr| if addr.respond_to? :ips ips = addr.ips if addr.respond_to? :ips else ips = [addr] end ips.each do |i| add_route(i.to_string, via, options) end end self end
build_route(dst, via, option = {})
click to toggle source
# File lib/construqt/addresses.rb, line 252 def build_route(dst, via, option = {}) #puts "DST => "+dst.class.name+":"+dst.to_s (unused, dst) = self.merge_tag(dst) { |dst| CqIpAddress.new(IPAddress.parse(dst), self) } metric = option['metric'] if via == UNREACHABLE via = nil type = 'unreachable' else if via.nil? via = nil else (unused, via) = self.merge_tag(via) { |via| CqIpAddress.new(IPAddress.parse(via), self) } throw "different type #{dst} #{via}" unless dst.ipv4? == via.ipv4? && dst.ipv6? == via.ipv6? end type = nil end Route.new(dst, via, type, metric, option["routing-table"]) end
dhcpv4?()
click to toggle source
# File lib/construqt/addresses.rb, line 84 def dhcpv4? @dhcpv4 end
dhcpv6?()
click to toggle source
# File lib/construqt/addresses.rb, line 88 def dhcpv6? @dhcpv6 end
first_ipv4()
click to toggle source
# File lib/construqt/addresses.rb, line 122 def first_ipv4 v4s.first end
first_ipv6()
click to toggle source
# File lib/construqt/addresses.rb, line 126 def first_ipv6 v6s.first end
loopback?()
click to toggle source
# File lib/construqt/addresses.rb, line 92 def loopback? @loopback end
match_network(ip)
click to toggle source
# File lib/construqt/addresses.rb, line 106 def match_network(ip) if ip.ipv4? self.v4s.find{|nip| nip.include?(ip) } else self.v6s.find{|nip| nip.include?(ip) } end end
merge_tag(name, &block)
click to toggle source
# File lib/construqt/addresses.rb, line 130 def merge_tag(name, &block) Construqt::Tags.add(([name]+self.tags).join("#")) { |name| block.call(name) } end
name()
click to toggle source
# File lib/construqt/addresses.rb, line 148 def name ret = self.name! throw "unreferenced address [#{self.ips.map{|i| i.to_string }}]" unless ret ret end
name!()
click to toggle source
# File lib/construqt/addresses.rb, line 154 def name! return @name if @name return "#{self.interface.name}-#{self.interface.host.name}" if self.interface return self.host.name if self.host nil end
name=(name)
click to toggle source
# File lib/construqt/addresses.rb, line 144 def name=(name) set_name(name) end
routes()
click to toggle source
# File lib/construqt/addresses.rb, line 182 def routes @routes.map do |i| if i.kind_of?(Route) i else ret = [] [OpenStruct.new(:dsts => Construqt::Tags.ips_net(i.dst_tag, Construqt::Addresses::IPV6), :vias => Construqt::Tags.ips_hosts(i.via_tag, Construqt::Addresses::IPV6)), OpenStruct.new(:dsts => Construqt::Tags.ips_net(i.dst_tag, Construqt::Addresses::IPV4), :vias => Construqt::Tags.ips_hosts(i.via_tag, Construqt::Addresses::IPV4))].each do |blocks| next unless blocks.vias next unless blocks.dsts next if blocks.dsts.empty? blocks.vias.each do |via| blocks.dsts.each do |dst| ret << build_route(dst.to_string, via.to_s, i.options) end end end ret end end.flatten end
set_name(xname)
click to toggle source
# File lib/construqt/addresses.rb, line 139 def set_name(xname) (@name, obj) = self.merge_tag(xname) { |xname| self } self end
tag(tag)
click to toggle source
# File lib/construqt/addresses.rb, line 134 def tag(tag) self.tags += tag.split("#") self end
to_s()
click to toggle source
# File lib/construqt/addresses.rb, line 277 def to_s "<Address:Address #{@name}=>#{self.ips.map{|i| i.to_s}.join(":")}>" end
v4s()
click to toggle source
# File lib/construqt/addresses.rb, line 118 def v4s self.ips.select{|ip| ip.ipv4? } end
v6s()
click to toggle source
# File lib/construqt/addresses.rb, line 114 def v6s self.ips.select{|ip| ip.ipv6? } end