Class: Lib::DHCP::Packet
- Inherits:
-
BOOTP::Packet
- Object
- BOOTP::Packet
- Lib::DHCP::Packet
- Defined in:
- lib/lib/dhcp/packet.rb
Direct Known Subclasses
Constant Summary collapse
- MAGICK_COOKIE =
0x63825363
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.unpack(packet) ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/lib/dhcp/packet.rb', line 60 def self.unpack(packet) bootp, , = packet.unpack('a236Na*') raise RuntimeError, "Magick-Cookie mismatch #{.to_i.to_s(16)}" unless .to_i == MAGICK_COOKIE.to_i dhcp = super bootp dhcp.instance_variable_set(:@options, Lib::DHCP::Options.unpack()) dhcp end |
Instance Method Details
#option0 ⇒ Object
32 33 34 |
# File 'lib/lib/dhcp/packet.rb', line 32 def option0 self..select 0 end |
#option255 ⇒ Object
36 37 38 |
# File 'lib/lib/dhcp/packet.rb', line 36 def option255 self..select 255 end |
#options ⇒ Object
56 57 58 |
# File 'lib/lib/dhcp/packet.rb', line 56 def @options ||= Lib::DHCP::Options.new end |
#pack ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/lib/dhcp/packet.rb', line 68 def pack # TODO Max Message Size support = super # BOOTP Header += [MAGICK_COOKIE].pack('N') raise ArgumentError, "Can't pack DHCP Packet without DHCP Message Type" if self.option53.nil? += 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..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 += option.pack len += (option.len.to_i + 2) # Option ID + Option LEN + Option PAYLOAD end end += Lib::DHCP::Option255.new.pack while len < 300 # Minimal DHCP MESSAGE SIZE += Lib::DHCP::Option0.new.pack len += 1 end end |
#to_s ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# 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" .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 |