class Lib::DHCP::Packet
Constants
- MAGICK_COOKIE
Public Class Methods
unpack(packet)
click to toggle source
Calls superclass method
# File lib/lib/dhcp/packet.rb, line 60 def self.unpack(packet) bootp, cookie, options = packet.unpack('a236Na*') raise RuntimeError, "Magick-Cookie mismatch #{cookie.to_i.to_s(16)}" unless cookie.to_i == MAGICK_COOKIE.to_i dhcp = super bootp dhcp.instance_variable_set(:@options, Lib::DHCP::Options.unpack(options)) dhcp end
Public Instance Methods
option0()
click to toggle source
# File lib/lib/dhcp/packet.rb, line 32 def option0 self.options.select 0 end
option255()
click to toggle source
# File lib/lib/dhcp/packet.rb, line 36 def option255 self.options.select 255 end
options()
click to toggle source
# File lib/lib/dhcp/packet.rb, line 56 def options @options ||= Lib::DHCP::Options.new end
pack()
click to toggle source
Calls superclass method
# File lib/lib/dhcp/packet.rb, line 68 def pack # TODO Max Message Size support dhcp_message = super # BOOTP Header dhcp_message += [MAGICK_COOKIE].pack('N') raise ArgumentError, "Can't pack DHCP Packet without DHCP Message Type" if self.option53.nil? dhcp_message += self.option53.pack # Option 53 (DHCP MESSAGE TYPE) must be first in message len = 240 # 236 BOOTP HEADER + 3 (Option 53) + 1 (Option 255) self.options.each do |option| unless option.oid.to_i == 0 or option.oid.to_i == 255 or option.oid.to_i == 53 # TODO Pack RAW Option # TODO Need to test RAW Option packing # next if option.is_a? Lib::DHCP::Option::Type::Raw # Don't pack not implemented Option type dhcp_message += option.pack len += (option.len.to_i + 2) # Option ID + Option LEN + Option PAYLOAD end end dhcp_message += Lib::DHCP::Option255.new.pack while len < 300 # Minimal DHCP MESSAGE SIZE dhcp_message += Lib::DHCP::Option0.new.pack len += 1 end dhcp_message end
to_s()
click to toggle source
Calls superclass method
# File lib/lib/dhcp/packet.rb, line 40 def to_s str = super() str += "\nMAGICK-COOKIE : 0x#{MAGICK_COOKIE.to_s(16)}" str += "\n\n --- DHCP OPTIONS ---\n" options.each do |o| if o.value.is_a? Array value = o.value.map(&:to_s).join(',') else value = o.value end str += "\nOption #{o.oid.to_s.ljust(3,' ')} : LEN #{o.len.to_s.ljust(3, ' ')} #{o.name.to_s.ljust(40, ' ')} : #{value}" end str += "\n\n" str end