class Proxy::DHCP::Device42::Provider

Attributes

connection[R]

Public Class Methods

new(connection, managed_subnets) click to toggle source
Calls superclass method
# File lib/smart_proxy_dhcp_device42/dhcp_device42_main.rb, line 10
def initialize(connection, managed_subnets)
  @connection = connection
  @managed_subnets = managed_subnets
  super('device42', managed_subnets, nil)
end

Public Instance Methods

add_record(options) click to toggle source
# File lib/smart_proxy_dhcp_device42/dhcp_device42_main.rb, line 85
def add_record(options)
  @connection.add_host(options)
end
all_hosts(network_address) click to toggle source
# File lib/smart_proxy_dhcp_device42/dhcp_device42_main.rb, line 49
def all_hosts(network_address)
  records = @connection.get_hosts(network_address)
  return [] if records.empty?
  reservs = []
  records.each do |record|
    reserv = build_reservation(record)
    reservs.push(reserv) if !reserv.nil?
  end
  reservs
end
all_leases(network_address) click to toggle source
# File lib/smart_proxy_dhcp_device42/dhcp_device42_main.rb, line 60
def all_leases(network_address)
  [] # device42 doesn't support leases
end
build_reservation(record) click to toggle source
# File lib/smart_proxy_dhcp_device42/dhcp_device42_main.rb, line 21
def build_reservation(record)
  return nil if record.empty?
  return nil if record['name'].nil? || record['name'].empty?
  return nil if record['hwaddress'].nil? || record['hwaddress'].empty?

  mac = record['hwaddress']
  mac = mac.gsub(/(.{2})/, '\1:')[0...-1]
  opts = {:hostname => record['name']}
  subnet = ::Proxy::DHCP::Subnet.new(record['network'], cidr_to_ip_mask(record['mask_bits'].to_i))
  Proxy::DHCP::Reservation.new(record['name'], record['ip_address'], mac, subnet, opts)
end
cidr_to_ip_mask(prefix_length) click to toggle source
# File lib/smart_proxy_dhcp_device42/dhcp_device42_main.rb, line 16
def cidr_to_ip_mask(prefix_length)
  bitmask = 0xFFFFFFFF ^ (2 ** (32-prefix_length) - 1)
  (0..3).map {|i| (bitmask >> i*8) & 0xFF}.reverse.join('.')
end
del_record(record) click to toggle source
# File lib/smart_proxy_dhcp_device42/dhcp_device42_main.rb, line 89
def del_record(record)
  @connection.remove_host(record.name)
end
find_record_by_mac(subnet_address, mac_address) click to toggle source
# File lib/smart_proxy_dhcp_device42/dhcp_device42_main.rb, line 79
def find_record_by_mac(subnet_address, mac_address)
  record = @connection.get_host_by_mac(mac_address)
  return nil if record.empty?
  build_reservation(record[0])
end
find_records_by_ip(subnet_address, ip) click to toggle source
# File lib/smart_proxy_dhcp_device42/dhcp_device42_main.rb, line 68
def find_records_by_ip(subnet_address, ip)
  records = @connection.get_hosts_by_ip(ip)
  return [] if records.empty?
  reservs = []
  records.each do |record|
    reserv = build_reservation(record)
    reservs.push(reserv) if !reserv.nil?
  end
  reservs
end
subnets() click to toggle source
# File lib/smart_proxy_dhcp_device42/dhcp_device42_main.rb, line 33
def subnets
  difined_subnets = []
  @connection.get_subnets().each do |subnet|
    address = subnet['network']
    if !['::'].include? address
      if subnet['mask_bits'].to_i <= 32
        netmask = cidr_to_ip_mask(subnet['mask_bits'].to_i)
        if managed_subnet?("#{address}/#{netmask}")
          difined_subnets.push(Proxy::DHCP::Subnet.new(address, netmask, {}))
        end
      end
    end
  end.compact
  difined_subnets
end
unused_ip(subnet, _, from_ip_address, to_ip_address) click to toggle source
# File lib/smart_proxy_dhcp_device42/dhcp_device42_main.rb, line 64
def unused_ip(subnet, _, from_ip_address, to_ip_address)
  @connection.get_next_ip(subnet, from_ip_address, to_ip_address)
end