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