class Blondy::DHCPD::Reply

Public Class Methods

new(data, reply_type) click to toggle source
# File lib/blondy/dhcpd/reply.rb, line 8
def initialize(data, reply_type)
    @result = OpenStruct.new 
    @result.data = OpenStruct.new
    @data = data
    @reply_type = reply_type
    @result.data.fname = data['fname'].unpack('C128').map {|x| x ? x : 0}
    @result.data.yiaddr = IPAddr.new(data['yiaddr']).to_i
    @result.data.options = [
      DHCP::MessageTypeOption.new({payload: [@reply_type]}),
      DHCP::ServerIdentifierOption.new({payload: array_from(Blondy::DHCPD::CONFIG['server_ip'])}),
      DHCP::DomainNameOption.new({payload: data['domain'].unpack('C*')}),
      DHCP::DomainNameServerOption.new({payload: array_from(data['dns'])}),
      DHCP::IPAddressLeaseTimeOption.new({payload: [7200].pack('N').unpack('C*')}),
      DHCP::SubnetMaskOption.new({payload: array_from(data['netmask'])}),
      DHCP::RouterOption.new({payload: array_from(data['gw'])}),
      DHCP::HostNameOption.new({payload: "#{data['hostname']}.#{data['domain']}".unpack('C*')}})
    ]
    @result.reply_addr = IPAddr.new("#{data['yiaddr']}/#{data['netmask']}").to_range.last.to_s
end

Public Instance Methods

get() click to toggle source
# File lib/blondy/dhcpd/reply.rb, line 28
def get
  @result
end

Private Instance Methods

array_from(ip) click to toggle source
# File lib/blondy/dhcpd/reply.rb, line 34
def array_from(ip)
  ip.split('.').map {|octet| octet.to_i} if IPAddr.new(ip)
end