class DHCP::OptSubList
Class for DHCP options that contain sublists (like vendor specific information or relay agent information)
Public Instance Methods
bin_to_data(data)
click to toggle source
# File lib/dhcp/options.rb, line 229 def bin_to_data(data) raise "Invalid data size" unless data.size >= 2 && data.size == data[1,1].ord + 2 [ data[0,1].ord, data[2,data.size-2] ] end
data_to_bin(data)
click to toggle source
# File lib/dhcp/options.rb, line 234 def data_to_bin(data) raise "Invalid data" unless data.is_a?(Array) && data.size == 2 && data[0].is_a?(Fixnum) && data[1].is_a?(String) raise "Invalid data size" unless data[1].size < 256 data[0].chr + data[1].size.chr + data[1] end
is_list?(list)
click to toggle source
# File lib/dhcp/options.rb, line 207 def is_list?(list) raise "Invalid suboption list/entry" unless list.is_a?(Array) return false if list.size == 2 && list[0].is_a?(Fixnum) && list[1].is_a?(String) list.each do |item| raise "Invalid suboption list" unless item.is_a?(Array) && item.size == 2 && item[0].is_a?(Fixnum) && item[1].is_a?(String) end return true end
split_data(data)
click to toggle source
# File lib/dhcp/options.rb, line 216 def split_data(data) data = data.dup list = [] while data.size > 0 raise "Invalid data size" unless data.size >= 2 len = data[1,1].ord raise "Invalid data size" unless data.size >= len + 2 list << [ data[0,1].ord, data[2,len] ] data[0,len+2] = '' end list end
to_s()
click to toggle source
# File lib/dhcp/options.rb, line 240 def to_s opt_header + "(#{@size})=[" + map do |i| val = '' name = case i[0] when 1 val = i[1].scan(/./m).map{|b| b.unpack('H2')[0].upcase}.join(':') 'AgentCircuitID' when 2 val = i[1].scan(/./m).map{|b| b.unpack('H2')[0].upcase}.join(':') 'AgentRemoteID' when 9 val = (SubOptVSRInfo.new(9, :vendor_specific_relay_suboption).data=i[1]).to_s 'VendorSpecificRelaySuboption' else val = i[1].scan(/./m).map{|b| b.unpack('H2')[0].upcase}.join(':') 'Unknown' end "#{name}:#{i[0]}(#{i[1].size})='#{val}'" end.join(',') + ']' end