Class: Lib::DHCP::Option
- Inherits:
-
Object
show all
- Extended by:
- Forwardable
- Includes:
- Comparable
- Defined in:
- lib/lib/dhcp/options/option.rb,
lib/lib/dhcp/options/type/raw.rb,
lib/lib/dhcp/options/type/bool.rb,
lib/lib/dhcp/options/type/string.rb,
lib/lib/dhcp/options/type/netmask.rb,
lib/lib/dhcp/options/type/ip_array.rb,
lib/lib/dhcp/options/type/ip_address.rb,
lib/lib/dhcp/options/type/sub_option.rb
Direct Known Subclasses
Option0, Option1, Option10, Option100, Option101, Option102, Option103, Option104, Option105, Option106, Option107, Option108, Option109, Option11, Option110, Option111, Option112, Option113, Option114, Option115, Option116, Option117, Option118, Option119, Option12, Option120, Option121, Option122, Lib::DHCP::Option122::SubOption::Option, Option123, Option124, Option125, Option126, Option127, Option128, Option129, Option13, Option130, Option131, Option132, Option133, Option134, Option135, Option136, Option137, Option138, Option139, Option14, Option140, Option141, Option142, Option143, Option144, Option145, Option146, Option147, Option148, Option149, Option15, Option150, Option151, Option152, Option153, Option154, Option155, Option156, Option157, Option158, Option159, Option16, Option160, Option161, Option162, Option163, Option164, Option165, Option166, Option167, Option168, Option169, Option17, Option170, Option171, Option172, Option173, Option174, Option175, Option176, Option177, Option178, Option179, Option18, Option180, Option181, Option182, Option183, Option184, Option185, Option186, Option187, Option188, Option189, Option19, Option190, Option191, Option192, Option193, Option194, Option195, Option196, Option197, Option198, Option199, Option2, Option20, Option200, Option201, Option202, Option203, Option204, Option205, Option206, Option207, Option208, Option209, Option21, Option210, Option211, Option212, Option213, Option214, Option215, Option216, Option217, Option218, Option219, Option22, Option220, Option221, Option222, Option223, Option224, Option225, Option226, Option227, Option228, Option229, Option23, Option230, Option231, Option232, Option233, Option234, Option235, Option236, Option237, Option238, Option239, Option24, Option240, Option241, Option242, Option243, Option244, Option245, Option246, Option247, Option248, Option249, Option25, Option250, Option251, Option252, Option253, Option254, Option255, Option26, Option27, Option28, Option29, Option3, Option30, Option31, Option32, Option33, Option34, Option35, Option36, Option37, Option38, Option39, Option4, Option40, Option41, Option42, Option43, Option44, Option45, Option46, Option47, Option48, Option49, Option5, Option50, Option51, Option52, Option53, Option54, Option55, Option56, Option57, Option58, Option59, Option6, Option60, Option61, Option62, Option63, Option64, Option65, Option66, Option67, Option68, Option69, Option7, Option70, Option71, Option72, Option73, Option74, Option75, Option76, Option77, Option78, Option79, Option8, Option80, Option81, Option82, Option83, Option84, Option85, Option86, Option87, Option88, Option89, Option9, Option90, Option91, Option92, Option93, Option94, Option95, Option96, Option97, Option98, Option99, SubOption
Defined Under Namespace
Modules: Type
Constant Summary
collapse
- PAD =
0x00
- SUBNET_MASK =
0x01
- TIME_OFFSET =
0x02
- ROUTER =
0x03
- TIME_SERVER =
0x04
- NAME_SERVER =
0x05
- DNS_SERVER =
0x06
- LOG_SERVER =
0x07
- COOKIE_SERVER =
0x08
- QUOTE_SERVER =
0x08
- LPR_SERVER =
0x09
- IMP_SERVER =
0x0a
- RES_SERVER =
0x0b
- HOSTNAME =
0x0c
- BOOT_FILE_SIZE =
0x0d
- DUMP_FILE =
0x0e
- DOMAIN_NAME =
0x0f
- SWAP_SERVER =
0x10
- ROOT_PATH =
0x11
- EXTENSION_PATH =
0x12
- IP_FORWARD =
0x13
- SRC_ROUTE =
0x14
- POLICY_FILTER =
0x15
- MAX_REASSEMBLE_SIZE =
0x16
- IP_TTL =
0x17
- MTU_TIMEOUT =
0x18
- MTU_TABLE =
0x19
- MTU_SIZE =
0x1a
- LOCAL_SUBNETS =
0x1b
- BROADCAST_ADDR =
0x1c
- DO_MASK_DISCOVER =
0x1d
- MASK_SUPPLY =
0x1e
- DO_ROUTE_DISCOVER =
0x1f
- ROUTER_SOLICIT =
0x20
- STATIC_ROUTE =
0x21
- TRAILER_ENCAPSULATION =
0x22
- ARP_TIMEOUT =
0x23
- ETHERNET_ENCAPSULATION =
0x24
- TCP_TTL =
0x25
- TCP_KEEP_ALIVE =
0x26
- TCP_ALIVE_GARBAGE =
0x27
- NIS_DOMAIN =
0x28
- NIS_SERVERS =
0x29
- NIS_TIME_SERVER =
0x2a
- VENDOR_SPECIFIC =
0x2b
- NBNS =
0x2c
- NBDD =
0x2d
- NETBIOS_TCP_IP =
0x2e
- NETBIOS_TCP_SCOPE =
0x2f
- XFONT =
0x30
- XDISPLAY_MANAGER =
0x31
- REQUESTED_ADDRESS =
0x32
- LEASE_TIME =
0x33
- OPTION_OVERLOAD =
0x34
- MESSAGE_TYPE =
0x35
- SERVER_IDENTIFIER =
0x36
- PARAMETER_REQUEST =
0x37
- MESSAGE =
0x38
- MAX_MESSAGE_SIZE =
0x39
- RENEW_TIME =
0x3a
- REBIND_TIME =
0x3b
- VENDOR_CLASS_IDENTIFIER =
0x3c
- CLIENT_IDENTIFIER =
0x3d
- NIS_DOMAIN_NAME =
0x40
- NIS_SERVER =
0x41
- TFTP_SERVER =
0x42
- BOOT_FILE_NAME =
0x43
- MOBILE_IP_AGENT =
0x44
- SMTP_SERVER =
0x45
- POP3_SERVER =
0x46
- NNTP_SERVER =
0x47
- WWW_SERVER =
0x48
- FINGER_SERVER =
0x49
- IRC_SERVER =
0x4a
- STREET_TALK_SERVER =
0x4b
- STREET_TALK_DIRECTORY_SERVER =
0x4c
- USER_CLASS =
0x4d
- RELAY_AGENT =
0x52
- CLIENT_LAST_TRANSACTION_TIME =
0x5b
- ASSOCIATED_IP =
0x5c
- PRIVATE =
0xaf
- END_OPTION =
0xff
- NAME =
{
0 => 'Pad',
1 => 'Subnet Mask',
2 => 'Time Offset',
3 => 'Router Option',
4 => 'Time Server Option',
5 => 'Name Server Option',
6 => 'Domain Name Server Option',
7 => 'Log Server Option',
8 => 'Cookie Server Option',
9 => 'LPR Server Option',
10 => 'Impress Server Option',
11 => 'Resource Location Server Option',
12 => 'Host Name Option',
13 => 'Boot File Size Option',
14 => 'Merit Dump File',
15 => 'Domain Name',
16 => 'Swap Server',
17 => 'Root Path',
18 => 'Extensions Path',
19 => 'IP Forwarding Enable/Disable Option',
20 => 'Non-Local Source Routing Enable/Disable Option',
21 => 'Policy Filter Option',
22 => 'Maximum Datagram Reassembly Size',
23 => 'Default IP Time-to-live',
24 => 'Path MTU Plateau Table Option',
25 => 'IP Layer Parameters per Interface',
26 => 'Interface MTU Option',
27 => 'All Subnets are Local Option',
28 => 'Broadcast Address Option',
29 => 'Perform Mask Discovery Option',
30 => 'Mask Supplier Option',
31 => 'Perform Router Discovery Option',
32 => 'Router Solicitation Address Option',
33 => 'Static Route Option',
34 => 'Trailer Encapsulation Option',
35 => 'ARP Cache Timeout Option',
36 => 'Ethernet Encapsulation Option',
37 => 'TCP Default TTL Option',
38 => 'TCP Keepalive Interval Option',
39 => 'TCP Keepalive Garbage Option',
40 => 'Network Information Service Domain Option',
41 => 'Network Information Servers Option',
42 => 'Network Time Protocol Servers Option',
43 => 'Vendor Specific Information',
44 => 'NetBIOS over TCP/IP Name Server Option',
45 => 'NetBIOS over TCP/IP Datagram Distribution Server Option',
46 => 'NetBIOS over TCP/IP Node Type Option',
47 => 'NetBIOS over TCP/IP Scope Option',
48 => 'X Window System Font Server Option',
49 => 'X Window System Display Manager Option',
50 => 'Requested IP Address',
51 => 'IP Address Lease Time',
52 => 'Option Overload',
53 => 'DHCP Message Type',
54 => 'Server Identifier',
55 => 'Parameter Request List',
56 => 'Message',
57 => 'Maximum DHCP Message Size',
58 => 'Renewal (T1) Time Value',
59 => 'Rebinding (T2) Time Value',
60 => 'Vendor class identifier',
61 => 'Client-identifier',
62 => 'NetWare/IP Domain Name',
63 => 'NetWare/IP information',
64 => 'Network Information Service+ Domain Option',
65 => 'Network Information Service+ Servers Option',
66 => 'TFTP server name',
67 => 'Bootfile name',
68 => 'Mobile IP Home Agent option',
69 => 'Simple Mail Transport Protocol (SMTP) Server Option',
70 => 'Post Office Protocol (POP3) Server Option',
71 => 'Network News Transport Protocol (NNTP) Server Option',
72 => 'Default World Wide Web (WWW) Server Option',
73 => 'Default Finger Server Option',
74 => 'Default Internet Relay Chat (IRC) Server Option',
75 => 'StreetTalk Server Option',
76 => 'StreetTalk Directory Assistance (STDA) Server Option',
77 => 'User Class Information',
78 => 'SLP Directory Agent',
79 => 'SLP Service Scope',
80 => 'Rapid Commit',
81 => 'FQDN, Fully Qualified Domain Name',
82 => 'Relay Agent Information',
83 => 'Internet Storage Name Service',
84 => '',
85 => 'NDS servers',
86 => 'NDS tree name',
87 => 'NDS context',
88 => 'BCMCS Controller Domain Name list',
89 => 'BCMCS Controller IPv4 address list.',
90 => 'Authentication',
91 => 'Client last transaction time',
92 => 'Associated IP',
93 => 'Client System Architecture Type',
119 => 'Domain Search',
121 => 'Classless Static Route Option',
122 => 'CCC, CableLabs Client Configuration',
125 => 'Vendor-Identifying Vendor Options',
255 => 'END'
}
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(oid, payload = nil) ⇒ Option
Returns a new instance of Option.
20
21
22
23
|
# File 'lib/lib/dhcp/options/option.rb', line 20
def initialize(oid, payload = nil)
@oid = oid
@payload = payload
end
|
Instance Attribute Details
#oid ⇒ Object
Returns the value of attribute oid.
17
18
19
|
# File 'lib/lib/dhcp/options/option.rb', line 17
def oid
@oid
end
|
#payload ⇒ Object
Also known as:
value
Returns the value of attribute payload.
18
19
20
|
# File 'lib/lib/dhcp/options/option.rb', line 18
def payload
@payload
end
|
Class Method Details
.from_json(json) ⇒ Object
61
62
63
64
|
# File 'lib/lib/dhcp/options/option.rb', line 61
def self.from_json(json)
json = json.is_a?(Hash) ? json : JSON.parse(json)
self.new(json.transform_keys(&:to_sym)[:oid], json.transform_keys(&:to_sym)[:value])
end
|
.unpack(packet) ⇒ Object
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/lib/dhcp/options/option.rb', line 66
def self.unpack(packet)
oid, len = packet.unpack('C2')
payload = nil
payload = packet.to_s.unpack("@2a#{len.to_s}").first unless oid.to_i == 0 or oid.to_i == 255
len = 0 if oid.to_i == 0 or oid.to_i == 255
raise ArgumentError "Wrong OID format for DHCP Option - #{oid}" unless oid.respond_to? :to_i
raise ArgumentError "Wrong OID for DHCP Option = #{oid}" unless oid.to_i >= 0 and oid.to_i < 256
begin
eval("Option#{oid.to_i.to_s}").send(:unpack, oid, len, payload.to_s)
rescue ArgumentError => e
raise ArgumentError, "OPTION #{oid} : #{e.message}"
end
end
|
Instance Method Details
#<=>(other) ⇒ Object
29
30
31
|
# File 'lib/lib/dhcp/options/option.rb', line 29
def <=>(other)
other.is_a?(Lib::DHCP::Option) ? self.value <=> other.value : self.value <=> other
end
|
#len ⇒ Object
25
26
27
|
# File 'lib/lib/dhcp/options/option.rb', line 25
def len
@len.to_i || 0
end
|
#name ⇒ Object
43
44
45
46
|
# File 'lib/lib/dhcp/options/option.rb', line 43
def name
return 'Unknown Option Name' unless NAME.include? @oid.to_i
NAME[@oid.to_i]
end
|
#pack ⇒ Object
33
34
35
36
|
# File 'lib/lib/dhcp/options/option.rb', line 33
def pack
@payload = '' if @value.nil?
[@oid, @len, @payload.to_s].pack("C2a#{@len.to_i}")
end
|
#to_h ⇒ Object
52
53
54
55
56
57
58
59
|
# File 'lib/lib/dhcp/options/option.rb', line 52
def to_h
{
name: self.name,
oid: self.oid.to_i,
len: self.len,
value: self.value.respond_to?(:map) ? self.value.map { |v| v.respond_to?(:to_h) ? v.to_h : v } : self.value
}
end
|
#to_json(*params) ⇒ Object
48
49
50
|
# File 'lib/lib/dhcp/options/option.rb', line 48
def to_json(*params)
self.to_h.to_json
end
|
#to_s ⇒ Object
39
40
41
|
# File 'lib/lib/dhcp/options/option.rb', line 39
def to_s
@payload.to_s.unpack('C*').map{|item| item.to_i.to_s(16).rjust(2, '0') }.join(':')
end
|