lib-dhcp 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/lib/dhcp/options/option122.rb +46 -34
- data/lib/lib/dhcp/options.rb +26 -12
- data/lib/lib/dhcp/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 903661e700f93534c6a5901ec965da48261e5e97d399f812bff7aa8b9d990b9d
|
4
|
+
data.tar.gz: d2f9fb68a1171aa5812bfe5b7da0e9c4316ced431f24b33271d0704d61fda7d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88a40896ce795cd16bea2836b2f9e3f8db1fd332b86c2a21ac34e72c0f2380cca86a112d6d369f9fd1b6e7ffdef50e0f64ce288289444a9691f39dda82e67582
|
7
|
+
data.tar.gz: ed34b5fdfd7f36dd3286765fcf10f89facedb02e5531fba4d15f26efffc1fbf4ed96a01d504c341a63f34656529f03ba713c855ca7bbdd40fb998a19e2dc3784
|
@@ -19,34 +19,7 @@ module Lib
|
|
19
19
|
oid = self.class.name.split('::').last.sub(/Option/, '').to_i
|
20
20
|
sub_options = []
|
21
21
|
sub_option.each do |sub|
|
22
|
-
|
23
|
-
opt = sub
|
24
|
-
elsif sub.is_a? Array
|
25
|
-
case sub[0].to_i
|
26
|
-
when 1
|
27
|
-
opt = Lib::DHCP::Option122::SubOption::Option1.new(sub[1])
|
28
|
-
when 2
|
29
|
-
opt = Lib::DHCP::Option122::SubOption::Option2.new(sub[1])
|
30
|
-
when 3
|
31
|
-
opt = Lib::DHCP::Option122::SubOption::Option3.new(sub[1])
|
32
|
-
when 4
|
33
|
-
opt = Lib::DHCP::Option122::SubOption::Option4.new(*sub[1])
|
34
|
-
when 5
|
35
|
-
opt = Lib::DHCP::Option122::SubOption::Option5.new(*sub[1])
|
36
|
-
when 6
|
37
|
-
opt = Lib::DHCP::Option122::SubOption::Option6.new(sub[1])
|
38
|
-
when 7
|
39
|
-
opt = Lib::DHCP::Option122::SubOption::Option7.new(sub[1])
|
40
|
-
when 8
|
41
|
-
opt = Lib::DHCP::Option122::SubOption::Option8.new(sub[1])
|
42
|
-
else
|
43
|
-
#raise ArgumentError, "Not implemented sub option #{sub[0]} for Option 122"
|
44
|
-
opt = Lib::DHCP::Option122::SubOption::Option.new(sub[0].to_i, sub[1])
|
45
|
-
end
|
46
|
-
#opt = Lib::DHCP::SubOption.new(sub[0], sub[1])
|
47
|
-
else
|
48
|
-
raise ArgumentError, 'Unknown SubOption parameter type'
|
49
|
-
end
|
22
|
+
opt = create_sub_option(sub)
|
50
23
|
sub_options << opt
|
51
24
|
define_singleton_method("option#{opt.oid.to_i}".to_sym) { opt }
|
52
25
|
#define_singleton_method(:option1) {opt}
|
@@ -54,6 +27,10 @@ module Lib
|
|
54
27
|
super oid, sub_options
|
55
28
|
end
|
56
29
|
|
30
|
+
def add(sub_option)
|
31
|
+
@payload << create_sub_option(sub_option)
|
32
|
+
end
|
33
|
+
|
57
34
|
|
58
35
|
def to_s
|
59
36
|
#"Option #{@oid}, LEN #{self.len}, Value #{@payload.to_s}"
|
@@ -141,10 +118,10 @@ module Lib
|
|
141
118
|
@type = 1
|
142
119
|
@payload = tsp_server_address
|
143
120
|
when String
|
144
|
-
|
145
|
-
@type = 1
|
121
|
+
begin
|
146
122
|
@payload = Net::Address::IPv4.new(tsp_server_address)
|
147
|
-
|
123
|
+
@type = 1
|
124
|
+
rescue ArgumentError
|
148
125
|
@type = 0
|
149
126
|
@payload = tsp_server_address
|
150
127
|
end
|
@@ -161,16 +138,17 @@ module Lib
|
|
161
138
|
if type == 1
|
162
139
|
5
|
163
140
|
else
|
164
|
-
@payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten.size +
|
141
|
+
@payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten.size + 2
|
142
|
+
#@payload.size + 1
|
165
143
|
end
|
166
144
|
end
|
167
145
|
|
168
146
|
def pack
|
169
147
|
if @type == 1
|
170
|
-
[
|
148
|
+
[@oid.to_i, self.len.to_i, 1, @payload.to_i].pack('C3N')
|
171
149
|
elsif @type == 0
|
172
150
|
fqdn_encode = @payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten
|
173
|
-
[
|
151
|
+
[@oid.to_i, fqdn_encode.size + 2, 0, *fqdn_encode,0].pack('C*')
|
174
152
|
else
|
175
153
|
raise ArgumentError, 'Unknown TSP Provisioning Server Address type'
|
176
154
|
end
|
@@ -336,6 +314,40 @@ module Lib
|
|
336
314
|
|
337
315
|
end
|
338
316
|
end
|
317
|
+
|
318
|
+
protected
|
319
|
+
|
320
|
+
|
321
|
+
def create_sub_option(option)
|
322
|
+
if option.is_a? Lib::DHCP::Option
|
323
|
+
option
|
324
|
+
elsif option.is_a? Array
|
325
|
+
case option[0].to_i
|
326
|
+
when 1
|
327
|
+
Lib::DHCP::Option122::SubOption::Option1.new(option[1])
|
328
|
+
when 2
|
329
|
+
Lib::DHCP::Option122::SubOption::Option2.new(option[1])
|
330
|
+
when 3
|
331
|
+
Lib::DHCP::Option122::SubOption::Option3.new(option[1])
|
332
|
+
when 4
|
333
|
+
Lib::DHCP::Option122::SubOption::Option4.new(*option[1])
|
334
|
+
when 5
|
335
|
+
Lib::DHCP::Option122::SubOption::Option5.new(*option[1])
|
336
|
+
when 6
|
337
|
+
Lib::DHCP::Option122::SubOption::Option6.new(option[1])
|
338
|
+
when 7
|
339
|
+
Lib::DHCP::Option122::SubOption::Option7.new(option[1])
|
340
|
+
when 8
|
341
|
+
Lib::DHCP::Option122::SubOption::Option8.new(option[1])
|
342
|
+
else
|
343
|
+
#raise ArgumentError, "Not implemented sub option #{sub[0]} for Option 122"
|
344
|
+
Lib::DHCP::Option122::SubOption::Option.new(option[0].to_i, option[1])
|
345
|
+
end
|
346
|
+
else
|
347
|
+
raise ArgumentError, 'Unknown SubOption for Option122'
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
339
351
|
end
|
340
352
|
end
|
341
353
|
end
|
data/lib/lib/dhcp/options.rb
CHANGED
@@ -24,23 +24,23 @@ module Lib
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def add(option)
|
27
|
-
|
28
|
-
@options << eval("Lib::DHCP::Option#{option[0]}").new(option[1])
|
29
|
-
elsif option.is_a? Option
|
30
|
-
@options << option
|
31
|
-
else
|
32
|
-
@options << Lib::DHCP::Option.unpack(option)
|
33
|
-
end
|
27
|
+
@options << create_option(option)
|
34
28
|
end
|
35
29
|
|
36
30
|
def []=(index, option)
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
@options[index] = option
|
31
|
+
option = create_option(option)
|
32
|
+
if include?(option) and @options[index].oid != option.oid
|
33
|
+
@options[index] = option if option.oid == 0
|
41
34
|
else
|
42
|
-
@options
|
35
|
+
@options[index] = create_option(option)
|
43
36
|
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
def include?(option)
|
41
|
+
return ! select(option.oid).empty? if option.is_a?(Option)
|
42
|
+
return ! select(option).empty? if option.is_a?(Integer)
|
43
|
+
false
|
44
44
|
end
|
45
45
|
|
46
46
|
def select(oid)
|
@@ -68,6 +68,20 @@ module Lib
|
|
68
68
|
options
|
69
69
|
end
|
70
70
|
|
71
|
+
protected
|
72
|
+
|
73
|
+
def create_option(option)
|
74
|
+
if option.is_a? Array
|
75
|
+
eval("Lib::DHCP::Option#{option[0].to_i}").new(option[1])
|
76
|
+
elsif option.is_a? Option
|
77
|
+
option
|
78
|
+
elsif option.is_a?(Integer) and (option == 0 or option == 255)
|
79
|
+
eval("Lib::DHCP::Option#{option.to_i}").new(option.to_i)
|
80
|
+
else
|
81
|
+
Lib::DHCP::Option.unpack(option)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
71
85
|
end
|
72
86
|
end
|
73
87
|
end
|
data/lib/lib/dhcp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lib-dhcp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Wojcieszonek
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -402,7 +402,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
402
402
|
version: '0'
|
403
403
|
requirements: []
|
404
404
|
rubyforge_project:
|
405
|
-
rubygems_version: 2.
|
405
|
+
rubygems_version: 2.7.5
|
406
406
|
signing_key:
|
407
407
|
specification_version: 4
|
408
408
|
summary: DHCP protocol library.
|