module Lib::DHCP::Option::Type::SubOption

Public Class Methods

included(base) click to toggle source
# File lib/lib/dhcp/options/type/sub_option.rb, line 15
def self.included(base)
  base.extend ClassMethods
end
new(*sub_option) click to toggle source
Calls superclass method
# File lib/lib/dhcp/options/type/sub_option.rb, line 19
def initialize(*sub_option)
  oid = self.class.name.split('::').last.sub(/Option/, '').to_i
  sub_options = []
  sub_option.each do |sub|
    if sub.is_a? Lib::DHCP::SubOption
      opt =  sub
    elsif sub.is_a? Array
      opt = Lib::DHCP::SubOption.new(sub[0], sub[1])
    else
      raise ArgumentError, 'Unknown SubOption parameter type'
    end
    sub_options << opt
    define_singleton_method("option#{opt.oid.to_i}".to_sym) { opt }
    #define_singleton_method(:option1) {opt}
  end
  super oid, sub_options
end

Public Instance Methods

len() click to toggle source
# File lib/lib/dhcp/options/type/sub_option.rb, line 45
def len
  l = 0
  @payload.each do |sub_option|
    l += (sub_option.len.to_i + 2).to_i
  end
  l
end
pack() click to toggle source
# File lib/lib/dhcp/options/type/sub_option.rb, line 53
def pack
  option_pack = ''
  sub_len = 2
  @payload.each do |sub_option|
    sub_len += sub_option.len
    option_pack += sub_option.pack
  end
  [@oid, self.len, option_pack].pack('C2a*')
end
to_s() click to toggle source
# File lib/lib/dhcp/options/type/sub_option.rb, line 37
def to_s
  s =''
  @payload.each do |sub_option|
    s += "Option #{sub_option.oid}, LEN #{sub_option.len}, Value #{@payload.to_s} \n\r"
  end
  s
end