Module: Lib::DHCP::Option::Type::SubOption

Defined in:
lib/lib/dhcp/options/type/sub_option.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



15
16
17
# File 'lib/lib/dhcp/options/type/sub_option.rb', line 15

def self.included(base)
  base.extend ClassMethods
end

Instance Method Details

#initialize(*sub_option) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 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

#lenObject



45
46
47
48
49
50
51
# 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

#packObject



53
54
55
56
57
58
59
60
61
# 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_sObject



37
38
39
40
41
42
43
# 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