Class: Lib::DHCP::Option122

Inherits:
Option
  • Object
show all
Defined in:
lib/lib/dhcp/options/option122.rb

Defined Under Namespace

Modules: SubOption

Constant Summary

Constants inherited from Option

Lib::DHCP::Option::ARP_TIMEOUT, Lib::DHCP::Option::ASSOCIATED_IP, Lib::DHCP::Option::BOOT_FILE_NAME, Lib::DHCP::Option::BOOT_FILE_SIZE, Lib::DHCP::Option::BROADCAST_ADDR, Lib::DHCP::Option::CLIENT_IDENTIFIER, Lib::DHCP::Option::CLIENT_LAST_TRANSACTION_TIME, Lib::DHCP::Option::COOKIE_SERVER, Lib::DHCP::Option::DNS_SERVER, Lib::DHCP::Option::DOMAIN_NAME, Lib::DHCP::Option::DO_MASK_DISCOVER, Lib::DHCP::Option::DO_ROUTE_DISCOVER, Lib::DHCP::Option::DUMP_FILE, Lib::DHCP::Option::END_OPTION, Lib::DHCP::Option::ETHERNET_ENCAPSULATION, Lib::DHCP::Option::EXTENSION_PATH, Lib::DHCP::Option::FINGER_SERVER, Lib::DHCP::Option::HOSTNAME, Lib::DHCP::Option::IMP_SERVER, Lib::DHCP::Option::IP_FORWARD, Lib::DHCP::Option::IP_TTL, Lib::DHCP::Option::IRC_SERVER, Lib::DHCP::Option::LEASE_TIME, Lib::DHCP::Option::LOCAL_SUBNETS, Lib::DHCP::Option::LOG_SERVER, Lib::DHCP::Option::LPR_SERVER, Lib::DHCP::Option::MASK_SUPPLY, Lib::DHCP::Option::MAX_MESSAGE_SIZE, Lib::DHCP::Option::MAX_REASSEMBLE_SIZE, Lib::DHCP::Option::MESSAGE, Lib::DHCP::Option::MESSAGE_TYPE, Lib::DHCP::Option::MOBILE_IP_AGENT, Lib::DHCP::Option::MTU_SIZE, Lib::DHCP::Option::MTU_TABLE, Lib::DHCP::Option::MTU_TIMEOUT, Lib::DHCP::Option::NAME, Lib::DHCP::Option::NAME_SERVER, Lib::DHCP::Option::NBDD, Lib::DHCP::Option::NBNS, Lib::DHCP::Option::NETBIOS_TCP_IP, Lib::DHCP::Option::NETBIOS_TCP_SCOPE, Lib::DHCP::Option::NIS_DOMAIN, Lib::DHCP::Option::NIS_DOMAIN_NAME, Lib::DHCP::Option::NIS_SERVER, Lib::DHCP::Option::NIS_SERVERS, Lib::DHCP::Option::NIS_TIME_SERVER, Lib::DHCP::Option::NNTP_SERVER, Lib::DHCP::Option::OPTION_OVERLOAD, Lib::DHCP::Option::PAD, Lib::DHCP::Option::PARAMETER_REQUEST, Lib::DHCP::Option::POLICY_FILTER, Lib::DHCP::Option::POP3_SERVER, Lib::DHCP::Option::PRIVATE, Lib::DHCP::Option::QUOTE_SERVER, Lib::DHCP::Option::REBIND_TIME, Lib::DHCP::Option::RELAY_AGENT, Lib::DHCP::Option::RENEW_TIME, Lib::DHCP::Option::REQUESTED_ADDRESS, Lib::DHCP::Option::RES_SERVER, Lib::DHCP::Option::ROOT_PATH, Lib::DHCP::Option::ROUTER, Lib::DHCP::Option::ROUTER_SOLICIT, Lib::DHCP::Option::SERVER_IDENTIFIER, Lib::DHCP::Option::SMTP_SERVER, Lib::DHCP::Option::SRC_ROUTE, Lib::DHCP::Option::STATIC_ROUTE, Lib::DHCP::Option::STREET_TALK_DIRECTORY_SERVER, Lib::DHCP::Option::STREET_TALK_SERVER, Lib::DHCP::Option::SUBNET_MASK, Lib::DHCP::Option::SWAP_SERVER, Lib::DHCP::Option::TCP_ALIVE_GARBAGE, Lib::DHCP::Option::TCP_KEEP_ALIVE, Lib::DHCP::Option::TCP_TTL, Lib::DHCP::Option::TFTP_SERVER, Lib::DHCP::Option::TIME_OFFSET, Lib::DHCP::Option::TIME_SERVER, Lib::DHCP::Option::TRAILER_ENCAPSULATION, Lib::DHCP::Option::USER_CLASS, Lib::DHCP::Option::VENDOR_CLASS_IDENTIFIER, Lib::DHCP::Option::VENDOR_SPECIFIC, Lib::DHCP::Option::WWW_SERVER, Lib::DHCP::Option::XDISPLAY_MANAGER, Lib::DHCP::Option::XFONT

Instance Attribute Summary

Attributes inherited from Option

#oid, #payload

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Option

#<=>, from_json, #name, #to_h, #to_json

Constructor Details

#initialize(*sub_option) ⇒ Option122

Returns a new instance of Option122.



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/lib/dhcp/options/option122.rb', line 18

def initialize(*sub_option)
  oid = self.class.name.split('::').last.sub(/Option/, '').to_i
  sub_options = []
  sub_option.each do |sub|
    opt = create_sub_option(sub)
    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

Class Method Details

.unpack(oid, len, payload) ⇒ Object

Raises:

  • (ArgumentError)


64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/lib/dhcp/options/option122.rb', line 64

def self.unpack(oid, len, payload)
  raise ArgumentError, "Wrong Option #{Lib::DHCP::Option::NAME[oid]} length - #{len}" unless len > 0
  i = 0
  sub_options = []
  while i < len
    sub_oid, sub_len = payload.unpack("@#{i}C2")
    sub_payload = payload.unpack("@#{i+2}a#{sub_len}").first.to_s
    raise ArgumentError "Unknown OID format for DHCP  Option122 SubOption - #{sub_oid}" unless sub_oid.respond_to? :to_i
    raise ArgumentError, "Unknown OID for Option122 SubOption - #{sub_oid}" unless sub_oid.to_i > 0 and sub_oid.to_i < 255
    sub_options << eval("Lib::DHCP::Option122::SubOption::Option#{sub_oid.to_i.to_s}").unpack(sub_oid, sub_len, sub_payload)
    # case sub_oid
    #   when 1
    #     sub_options << Lib::DHCP::Option122::SubOption::Option1.unpack(sub_oid, sub_len, sub_payload)
    #   when 2
    #
    # end
    # sub_options << [sub_oid, sub_payload]
    i += (sub_len + 2)
  end
  self.new *sub_options
end

Instance Method Details

#add(sub_option) ⇒ Object



30
31
32
# File 'lib/lib/dhcp/options/option122.rb', line 30

def add(sub_option)
  @payload << create_sub_option(sub_option)
end

#lenObject



44
45
46
47
48
49
50
# File 'lib/lib/dhcp/options/option122.rb', line 44

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/option122.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



35
36
37
38
39
40
41
42
# File 'lib/lib/dhcp/options/option122.rb', line 35

def to_s
  #"Option #{@oid}, LEN #{self.len}, Value #{@payload.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