module DhcpsApi::Misc
Public Instance Methods
get_free_ip_address(subnet_address, start_address = nil, end_address = nil, num_of_addresses = 1)
click to toggle source
Returns free ip addresses as a List of Strings.
@example Return five free ip addresses within an ip range
api.get_free_ip_address('192.168.42.0', '192.168.42.10', '192.168.42.20', 5)
@param subnet_address [String] Ip address of the subnet to return free ip addresses for @param start_address [String, nil] Starting point address of the range from which free ip addresses are retrieved or nil @param end_address [String, nil] End point address of the range from which free ip addresses are retrieved or nil @param num_of_addresses [Fixnum, 1] The number of free ip addresses to retrieve
@return [Array<String>]
# File lib/dhcpsapi/misc.rb, line 16 def get_free_ip_address(subnet_address, start_address = nil, end_address = nil, num_of_addresses = 1) dhcp_ip_array_ptr_ptr = FFI::MemoryPointer.new(:pointer) error = DhcpsApi::Win2012::Misc.DhcpV4GetFreeIPAddress(to_wchar_string(server_ip_address), ip_to_uint32(subnet_address), start_address.nil? ? 0 : ip_to_uint32(start_address), end_address.nil? ? 0 : ip_to_uint32(end_address), num_of_addresses, dhcp_ip_array_ptr_ptr) return [] if (error == 2 || error == 20126) if is_error?(error) unless (dhcp_ip_array_ptr_ptr.null? || (to_free = dhcp_ip_array_ptr_ptr.read_pointer).null?) free_memory(DhcpsApi::DHCP_IP_ARRAY.new(to_free)) end raise DhcpsApi::Error.new("Error looking up a free ip address in subnet %s." % [subnet_address], error) end dhcp_ip_array = DhcpsApi::DHCP_IP_ARRAY.new(dhcp_ip_array_ptr_ptr.read_pointer) free_ips = dhcp_ip_array[:elements].read_array_of_type(:uint32, :read_uint32, dhcp_ip_array[:num_elements]) free_memory(dhcp_ip_array) free_ips.map {|ip| uint32_to_ip(ip)} end