lib-dhcp 0.1.0
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 +7 -0
- data/.gitignore +10 -0
- data/.travis.yml +13 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +33 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/exe/dhcp_dump +83 -0
- data/lib-dhcp.gemspec +31 -0
- data/lib/lib/dhcp.rb +276 -0
- data/lib/lib/dhcp/exception.rb +34 -0
- data/lib/lib/dhcp/messages/ack.rb +65 -0
- data/lib/lib/dhcp/messages/decline.rb +77 -0
- data/lib/lib/dhcp/messages/discover.rb +70 -0
- data/lib/lib/dhcp/messages/inform.rb +64 -0
- data/lib/lib/dhcp/messages/lease_active.rb +65 -0
- data/lib/lib/dhcp/messages/lease_query.rb +64 -0
- data/lib/lib/dhcp/messages/lease_unassigned.rb +64 -0
- data/lib/lib/dhcp/messages/lease_unknown.rb +64 -0
- data/lib/lib/dhcp/messages/message.rb +285 -0
- data/lib/lib/dhcp/messages/nack.rb +64 -0
- data/lib/lib/dhcp/messages/offer.rb +74 -0
- data/lib/lib/dhcp/messages/release.rb +64 -0
- data/lib/lib/dhcp/messages/request.rb +71 -0
- data/lib/lib/dhcp/options.rb +73 -0
- data/lib/lib/dhcp/options/option.rb +249 -0
- data/lib/lib/dhcp/options/option0.rb +34 -0
- data/lib/lib/dhcp/options/option1.rb +24 -0
- data/lib/lib/dhcp/options/option10.rb +20 -0
- data/lib/lib/dhcp/options/option100.rb +17 -0
- data/lib/lib/dhcp/options/option101.rb +17 -0
- data/lib/lib/dhcp/options/option102.rb +17 -0
- data/lib/lib/dhcp/options/option103.rb +17 -0
- data/lib/lib/dhcp/options/option104.rb +17 -0
- data/lib/lib/dhcp/options/option105.rb +17 -0
- data/lib/lib/dhcp/options/option106.rb +17 -0
- data/lib/lib/dhcp/options/option107.rb +17 -0
- data/lib/lib/dhcp/options/option108.rb +17 -0
- data/lib/lib/dhcp/options/option109.rb +17 -0
- data/lib/lib/dhcp/options/option11.rb +20 -0
- data/lib/lib/dhcp/options/option110.rb +17 -0
- data/lib/lib/dhcp/options/option111.rb +17 -0
- data/lib/lib/dhcp/options/option112.rb +17 -0
- data/lib/lib/dhcp/options/option113.rb +17 -0
- data/lib/lib/dhcp/options/option114.rb +17 -0
- data/lib/lib/dhcp/options/option115.rb +17 -0
- data/lib/lib/dhcp/options/option116.rb +17 -0
- data/lib/lib/dhcp/options/option117.rb +17 -0
- data/lib/lib/dhcp/options/option118.rb +17 -0
- data/lib/lib/dhcp/options/option119.rb +17 -0
- data/lib/lib/dhcp/options/option12.rb +20 -0
- data/lib/lib/dhcp/options/option120.rb +17 -0
- data/lib/lib/dhcp/options/option121.rb +17 -0
- data/lib/lib/dhcp/options/option122.rb +341 -0
- data/lib/lib/dhcp/options/option123.rb +17 -0
- data/lib/lib/dhcp/options/option124.rb +17 -0
- data/lib/lib/dhcp/options/option125.rb +17 -0
- data/lib/lib/dhcp/options/option126.rb +17 -0
- data/lib/lib/dhcp/options/option127.rb +17 -0
- data/lib/lib/dhcp/options/option128.rb +17 -0
- data/lib/lib/dhcp/options/option129.rb +17 -0
- data/lib/lib/dhcp/options/option13.rb +43 -0
- data/lib/lib/dhcp/options/option130.rb +17 -0
- data/lib/lib/dhcp/options/option131.rb +17 -0
- data/lib/lib/dhcp/options/option132.rb +17 -0
- data/lib/lib/dhcp/options/option133.rb +17 -0
- data/lib/lib/dhcp/options/option134.rb +17 -0
- data/lib/lib/dhcp/options/option135.rb +17 -0
- data/lib/lib/dhcp/options/option136.rb +17 -0
- data/lib/lib/dhcp/options/option137.rb +17 -0
- data/lib/lib/dhcp/options/option138.rb +17 -0
- data/lib/lib/dhcp/options/option139.rb +17 -0
- data/lib/lib/dhcp/options/option14.rb +21 -0
- data/lib/lib/dhcp/options/option140.rb +17 -0
- data/lib/lib/dhcp/options/option141.rb +17 -0
- data/lib/lib/dhcp/options/option142.rb +17 -0
- data/lib/lib/dhcp/options/option143.rb +17 -0
- data/lib/lib/dhcp/options/option144.rb +17 -0
- data/lib/lib/dhcp/options/option145.rb +17 -0
- data/lib/lib/dhcp/options/option146.rb +17 -0
- data/lib/lib/dhcp/options/option147.rb +17 -0
- data/lib/lib/dhcp/options/option148.rb +17 -0
- data/lib/lib/dhcp/options/option149.rb +17 -0
- data/lib/lib/dhcp/options/option15.rb +20 -0
- data/lib/lib/dhcp/options/option150.rb +17 -0
- data/lib/lib/dhcp/options/option151.rb +17 -0
- data/lib/lib/dhcp/options/option152.rb +17 -0
- data/lib/lib/dhcp/options/option153.rb +17 -0
- data/lib/lib/dhcp/options/option154.rb +17 -0
- data/lib/lib/dhcp/options/option155.rb +17 -0
- data/lib/lib/dhcp/options/option156.rb +17 -0
- data/lib/lib/dhcp/options/option157.rb +17 -0
- data/lib/lib/dhcp/options/option158.rb +17 -0
- data/lib/lib/dhcp/options/option159.rb +17 -0
- data/lib/lib/dhcp/options/option16.rb +19 -0
- data/lib/lib/dhcp/options/option160.rb +17 -0
- data/lib/lib/dhcp/options/option161.rb +17 -0
- data/lib/lib/dhcp/options/option162.rb +17 -0
- data/lib/lib/dhcp/options/option163.rb +17 -0
- data/lib/lib/dhcp/options/option164.rb +17 -0
- data/lib/lib/dhcp/options/option165.rb +17 -0
- data/lib/lib/dhcp/options/option166.rb +17 -0
- data/lib/lib/dhcp/options/option167.rb +17 -0
- data/lib/lib/dhcp/options/option168.rb +17 -0
- data/lib/lib/dhcp/options/option169.rb +17 -0
- data/lib/lib/dhcp/options/option17.rb +22 -0
- data/lib/lib/dhcp/options/option170.rb +17 -0
- data/lib/lib/dhcp/options/option171.rb +17 -0
- data/lib/lib/dhcp/options/option172.rb +17 -0
- data/lib/lib/dhcp/options/option173.rb +17 -0
- data/lib/lib/dhcp/options/option174.rb +17 -0
- data/lib/lib/dhcp/options/option175.rb +17 -0
- data/lib/lib/dhcp/options/option176.rb +17 -0
- data/lib/lib/dhcp/options/option177.rb +17 -0
- data/lib/lib/dhcp/options/option178.rb +17 -0
- data/lib/lib/dhcp/options/option179.rb +17 -0
- data/lib/lib/dhcp/options/option18.rb +23 -0
- data/lib/lib/dhcp/options/option180.rb +17 -0
- data/lib/lib/dhcp/options/option181.rb +17 -0
- data/lib/lib/dhcp/options/option182.rb +17 -0
- data/lib/lib/dhcp/options/option183.rb +17 -0
- data/lib/lib/dhcp/options/option184.rb +17 -0
- data/lib/lib/dhcp/options/option185.rb +17 -0
- data/lib/lib/dhcp/options/option186.rb +17 -0
- data/lib/lib/dhcp/options/option187.rb +17 -0
- data/lib/lib/dhcp/options/option188.rb +17 -0
- data/lib/lib/dhcp/options/option189.rb +17 -0
- data/lib/lib/dhcp/options/option19.rb +20 -0
- data/lib/lib/dhcp/options/option190.rb +17 -0
- data/lib/lib/dhcp/options/option191.rb +17 -0
- data/lib/lib/dhcp/options/option192.rb +17 -0
- data/lib/lib/dhcp/options/option193.rb +17 -0
- data/lib/lib/dhcp/options/option194.rb +17 -0
- data/lib/lib/dhcp/options/option195.rb +17 -0
- data/lib/lib/dhcp/options/option196.rb +17 -0
- data/lib/lib/dhcp/options/option197.rb +17 -0
- data/lib/lib/dhcp/options/option198.rb +17 -0
- data/lib/lib/dhcp/options/option199.rb +17 -0
- data/lib/lib/dhcp/options/option2.rb +45 -0
- data/lib/lib/dhcp/options/option20.rb +22 -0
- data/lib/lib/dhcp/options/option200.rb +17 -0
- data/lib/lib/dhcp/options/option201.rb +17 -0
- data/lib/lib/dhcp/options/option202.rb +17 -0
- data/lib/lib/dhcp/options/option203.rb +17 -0
- data/lib/lib/dhcp/options/option204.rb +17 -0
- data/lib/lib/dhcp/options/option205.rb +17 -0
- data/lib/lib/dhcp/options/option206.rb +17 -0
- data/lib/lib/dhcp/options/option207.rb +17 -0
- data/lib/lib/dhcp/options/option208.rb +17 -0
- data/lib/lib/dhcp/options/option209.rb +17 -0
- data/lib/lib/dhcp/options/option21.rb +87 -0
- data/lib/lib/dhcp/options/option210.rb +17 -0
- data/lib/lib/dhcp/options/option211.rb +17 -0
- data/lib/lib/dhcp/options/option212.rb +17 -0
- data/lib/lib/dhcp/options/option213.rb +17 -0
- data/lib/lib/dhcp/options/option214.rb +17 -0
- data/lib/lib/dhcp/options/option215.rb +17 -0
- data/lib/lib/dhcp/options/option216.rb +17 -0
- data/lib/lib/dhcp/options/option217.rb +17 -0
- data/lib/lib/dhcp/options/option218.rb +17 -0
- data/lib/lib/dhcp/options/option219.rb +17 -0
- data/lib/lib/dhcp/options/option22.rb +43 -0
- data/lib/lib/dhcp/options/option220.rb +17 -0
- data/lib/lib/dhcp/options/option221.rb +17 -0
- data/lib/lib/dhcp/options/option222.rb +17 -0
- data/lib/lib/dhcp/options/option223.rb +17 -0
- data/lib/lib/dhcp/options/option224.rb +17 -0
- data/lib/lib/dhcp/options/option225.rb +17 -0
- data/lib/lib/dhcp/options/option226.rb +17 -0
- data/lib/lib/dhcp/options/option227.rb +17 -0
- data/lib/lib/dhcp/options/option228.rb +17 -0
- data/lib/lib/dhcp/options/option229.rb +17 -0
- data/lib/lib/dhcp/options/option23.rb +44 -0
- data/lib/lib/dhcp/options/option230.rb +17 -0
- data/lib/lib/dhcp/options/option231.rb +17 -0
- data/lib/lib/dhcp/options/option232.rb +17 -0
- data/lib/lib/dhcp/options/option233.rb +17 -0
- data/lib/lib/dhcp/options/option234.rb +17 -0
- data/lib/lib/dhcp/options/option235.rb +17 -0
- data/lib/lib/dhcp/options/option236.rb +17 -0
- data/lib/lib/dhcp/options/option237.rb +17 -0
- data/lib/lib/dhcp/options/option238.rb +17 -0
- data/lib/lib/dhcp/options/option239.rb +17 -0
- data/lib/lib/dhcp/options/option24.rb +45 -0
- data/lib/lib/dhcp/options/option240.rb +17 -0
- data/lib/lib/dhcp/options/option241.rb +17 -0
- data/lib/lib/dhcp/options/option242.rb +17 -0
- data/lib/lib/dhcp/options/option243.rb +17 -0
- data/lib/lib/dhcp/options/option244.rb +17 -0
- data/lib/lib/dhcp/options/option245.rb +17 -0
- data/lib/lib/dhcp/options/option246.rb +17 -0
- data/lib/lib/dhcp/options/option247.rb +17 -0
- data/lib/lib/dhcp/options/option248.rb +17 -0
- data/lib/lib/dhcp/options/option249.rb +17 -0
- data/lib/lib/dhcp/options/option25.rb +20 -0
- data/lib/lib/dhcp/options/option250.rb +17 -0
- data/lib/lib/dhcp/options/option251.rb +17 -0
- data/lib/lib/dhcp/options/option252.rb +17 -0
- data/lib/lib/dhcp/options/option253.rb +17 -0
- data/lib/lib/dhcp/options/option254.rb +17 -0
- data/lib/lib/dhcp/options/option255.rb +29 -0
- data/lib/lib/dhcp/options/option26.rb +45 -0
- data/lib/lib/dhcp/options/option27.rb +16 -0
- data/lib/lib/dhcp/options/option28.rb +21 -0
- data/lib/lib/dhcp/options/option29.rb +16 -0
- data/lib/lib/dhcp/options/option3.rb +22 -0
- data/lib/lib/dhcp/options/option30.rb +16 -0
- data/lib/lib/dhcp/options/option31.rb +16 -0
- data/lib/lib/dhcp/options/option32.rb +18 -0
- data/lib/lib/dhcp/options/option33.rb +20 -0
- data/lib/lib/dhcp/options/option34.rb +16 -0
- data/lib/lib/dhcp/options/option35.rb +43 -0
- data/lib/lib/dhcp/options/option36.rb +16 -0
- data/lib/lib/dhcp/options/option37.rb +43 -0
- data/lib/lib/dhcp/options/option38.rb +43 -0
- data/lib/lib/dhcp/options/option39.rb +16 -0
- data/lib/lib/dhcp/options/option4.rb +21 -0
- data/lib/lib/dhcp/options/option40.rb +18 -0
- data/lib/lib/dhcp/options/option41.rb +18 -0
- data/lib/lib/dhcp/options/option42.rb +22 -0
- data/lib/lib/dhcp/options/option43.rb +16 -0
- data/lib/lib/dhcp/options/option44.rb +17 -0
- data/lib/lib/dhcp/options/option45.rb +18 -0
- data/lib/lib/dhcp/options/option46.rb +43 -0
- data/lib/lib/dhcp/options/option47.rb +17 -0
- data/lib/lib/dhcp/options/option48.rb +17 -0
- data/lib/lib/dhcp/options/option49.rb +17 -0
- data/lib/lib/dhcp/options/option5.rb +23 -0
- data/lib/lib/dhcp/options/option50.rb +16 -0
- data/lib/lib/dhcp/options/option51.rb +43 -0
- data/lib/lib/dhcp/options/option52.rb +45 -0
- data/lib/lib/dhcp/options/option53.rb +50 -0
- data/lib/lib/dhcp/options/option54.rb +16 -0
- data/lib/lib/dhcp/options/option55.rb +52 -0
- data/lib/lib/dhcp/options/option56.rb +20 -0
- data/lib/lib/dhcp/options/option57.rb +52 -0
- data/lib/lib/dhcp/options/option58.rb +45 -0
- data/lib/lib/dhcp/options/option59.rb +45 -0
- data/lib/lib/dhcp/options/option6.rb +23 -0
- data/lib/lib/dhcp/options/option60.rb +16 -0
- data/lib/lib/dhcp/options/option61.rb +37 -0
- data/lib/lib/dhcp/options/option62.rb +16 -0
- data/lib/lib/dhcp/options/option63.rb +16 -0
- data/lib/lib/dhcp/options/option64.rb +20 -0
- data/lib/lib/dhcp/options/option65.rb +17 -0
- data/lib/lib/dhcp/options/option66.rb +20 -0
- data/lib/lib/dhcp/options/option67.rb +20 -0
- data/lib/lib/dhcp/options/option68.rb +19 -0
- data/lib/lib/dhcp/options/option69.rb +17 -0
- data/lib/lib/dhcp/options/option7.rb +22 -0
- data/lib/lib/dhcp/options/option70.rb +17 -0
- data/lib/lib/dhcp/options/option71.rb +17 -0
- data/lib/lib/dhcp/options/option72.rb +17 -0
- data/lib/lib/dhcp/options/option73.rb +17 -0
- data/lib/lib/dhcp/options/option74.rb +17 -0
- data/lib/lib/dhcp/options/option75.rb +17 -0
- data/lib/lib/dhcp/options/option76.rb +17 -0
- data/lib/lib/dhcp/options/option77.rb +16 -0
- data/lib/lib/dhcp/options/option78.rb +16 -0
- data/lib/lib/dhcp/options/option79.rb +16 -0
- data/lib/lib/dhcp/options/option8.rb +22 -0
- data/lib/lib/dhcp/options/option80.rb +16 -0
- data/lib/lib/dhcp/options/option81.rb +16 -0
- data/lib/lib/dhcp/options/option82.rb +20 -0
- data/lib/lib/dhcp/options/option83.rb +16 -0
- data/lib/lib/dhcp/options/option84.rb +16 -0
- data/lib/lib/dhcp/options/option85.rb +16 -0
- data/lib/lib/dhcp/options/option86.rb +17 -0
- data/lib/lib/dhcp/options/option87.rb +16 -0
- data/lib/lib/dhcp/options/option88.rb +16 -0
- data/lib/lib/dhcp/options/option89.rb +16 -0
- data/lib/lib/dhcp/options/option9.rb +21 -0
- data/lib/lib/dhcp/options/option90.rb +16 -0
- data/lib/lib/dhcp/options/option91.rb +17 -0
- data/lib/lib/dhcp/options/option92.rb +17 -0
- data/lib/lib/dhcp/options/option93.rb +17 -0
- data/lib/lib/dhcp/options/option94.rb +17 -0
- data/lib/lib/dhcp/options/option95.rb +17 -0
- data/lib/lib/dhcp/options/option96.rb +17 -0
- data/lib/lib/dhcp/options/option97.rb +17 -0
- data/lib/lib/dhcp/options/option98.rb +17 -0
- data/lib/lib/dhcp/options/option99.rb +17 -0
- data/lib/lib/dhcp/options/sub_option.rb +32 -0
- data/lib/lib/dhcp/options/type/bool.rb +55 -0
- data/lib/lib/dhcp/options/type/ip_address.rb +73 -0
- data/lib/lib/dhcp/options/type/ip_array.rb +41 -0
- data/lib/lib/dhcp/options/type/netmask.rb +56 -0
- data/lib/lib/dhcp/options/type/raw.rb +51 -0
- data/lib/lib/dhcp/options/type/string.rb +49 -0
- data/lib/lib/dhcp/options/type/sub_option.rb +83 -0
- data/lib/lib/dhcp/packet.rb +96 -0
- data/lib/lib/dhcp/version.rb +5 -0
- metadata +409 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 23.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
require_relative 'option'
|
8
|
+
require_relative 'type/raw'
|
9
|
+
|
10
|
+
module Lib
|
11
|
+
module DHCP
|
12
|
+
class Option118 < Option
|
13
|
+
#TODO Option118
|
14
|
+
include Lib::DHCP::Option::Type::Raw
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 23.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
require_relative 'option'
|
8
|
+
require_relative 'type/raw'
|
9
|
+
|
10
|
+
module Lib
|
11
|
+
module DHCP
|
12
|
+
class Option119 < Option
|
13
|
+
#TODO Option119
|
14
|
+
include Lib::DHCP::Option::Type::Raw
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 22.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
require_relative 'option'
|
7
|
+
require_relative 'type/string'
|
8
|
+
|
9
|
+
module Lib
|
10
|
+
module DHCP
|
11
|
+
class Option12 < Option
|
12
|
+
# Host Name Option, The minimum length is 1
|
13
|
+
|
14
|
+
include Type::String
|
15
|
+
|
16
|
+
alias_method :hostname, :payload
|
17
|
+
alias_method :hostname=, :payload=
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 23.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
require_relative 'option'
|
8
|
+
require_relative 'type/raw'
|
9
|
+
|
10
|
+
module Lib
|
11
|
+
module DHCP
|
12
|
+
class Option120 < Option
|
13
|
+
#TODO Option120
|
14
|
+
include Lib::DHCP::Option::Type::Raw
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 23.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
require_relative 'option'
|
8
|
+
require_relative 'type/raw'
|
9
|
+
|
10
|
+
module Lib
|
11
|
+
module DHCP
|
12
|
+
class Option121 < Option
|
13
|
+
#TODO Option121
|
14
|
+
include Lib::DHCP::Option::Type::Raw
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,341 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 23.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
require_relative 'option'
|
8
|
+
require_relative 'type/ip_address'
|
9
|
+
require_relative 'type/string'
|
10
|
+
require_relative 'type/bool'
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
module Lib
|
15
|
+
module DHCP
|
16
|
+
class Option122 < Option
|
17
|
+
|
18
|
+
def initialize(*sub_option)
|
19
|
+
oid = self.class.name.split('::').last.sub(/Option/, '').to_i
|
20
|
+
sub_options = []
|
21
|
+
sub_option.each do |sub|
|
22
|
+
if sub.is_a? Lib::DHCP::Option122::SubOption
|
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
|
50
|
+
sub_options << opt
|
51
|
+
define_singleton_method("option#{opt.oid.to_i}".to_sym) { opt }
|
52
|
+
#define_singleton_method(:option1) {opt}
|
53
|
+
end
|
54
|
+
super oid, sub_options
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def to_s
|
59
|
+
#"Option #{@oid}, LEN #{self.len}, Value #{@payload.to_s}"
|
60
|
+
s =''
|
61
|
+
@payload.each do |sub_option|
|
62
|
+
s += "Option #{sub_option.oid}, LEN #{sub_option.len}, Value #{@payload.to_s} \n\r"
|
63
|
+
end
|
64
|
+
s
|
65
|
+
end
|
66
|
+
|
67
|
+
def len
|
68
|
+
l = 0
|
69
|
+
@payload.each do |sub_option|
|
70
|
+
l += (sub_option.len.to_i + 2).to_i
|
71
|
+
end
|
72
|
+
l
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
def pack
|
77
|
+
option_pack = ''
|
78
|
+
sub_len = 2
|
79
|
+
@payload.each do |sub_option|
|
80
|
+
sub_len += sub_option.len
|
81
|
+
option_pack += sub_option.pack
|
82
|
+
end
|
83
|
+
[@oid, self.len, option_pack].pack('C2a*')
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
def self.unpack(oid, len, payload)
|
88
|
+
raise ArgumentError, "Wrong Option #{Lib::DHCP::Option::NAME[oid]} length - #{len}" unless len > 0
|
89
|
+
i = 0
|
90
|
+
sub_options = []
|
91
|
+
while i < len
|
92
|
+
sub_oid, sub_len = payload.unpack("@#{i}C2")
|
93
|
+
sub_payload = payload.unpack("@#{i+2}a#{sub_len}").first.to_s
|
94
|
+
raise ArgumentError "Unknown OID format for DHCP Option122 SubOption - #{sub_oid}" unless sub_oid.respond_to? :to_i
|
95
|
+
raise ArgumentError, "Unknown OID for Option122 SubOption - #{sub_oid}" unless sub_oid.to_i > 0 and sub_oid.to_i < 255
|
96
|
+
sub_options << eval("Lib::DHCP::Option122::SubOption::Option#{sub_oid.to_i.to_s}").unpack(sub_oid, sub_len, sub_payload)
|
97
|
+
# case sub_oid
|
98
|
+
# when 1
|
99
|
+
# sub_options << Lib::DHCP::Option122::SubOption::Option1.unpack(sub_oid, sub_len, sub_payload)
|
100
|
+
# when 2
|
101
|
+
#
|
102
|
+
# end
|
103
|
+
# sub_options << [sub_oid, sub_payload]
|
104
|
+
i += (sub_len + 2)
|
105
|
+
end
|
106
|
+
self.new *sub_options
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
module SubOption
|
111
|
+
|
112
|
+
class Option < ::Lib::DHCP::Option ; end
|
113
|
+
|
114
|
+
class Option1 < Option
|
115
|
+
|
116
|
+
include Lib::DHCP::Option::Type::IPAddress
|
117
|
+
|
118
|
+
def name
|
119
|
+
"TSP's DHCP Server Address Sub-Options"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
class Option2 < Option
|
124
|
+
|
125
|
+
include Lib::DHCP::Option::Type::IPAddress
|
126
|
+
|
127
|
+
def name
|
128
|
+
"TSP's Secondary DHCP Server Address"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
class Option3 < Option
|
133
|
+
|
134
|
+
attr_reader :type
|
135
|
+
|
136
|
+
def initialize(tsp_server_address)
|
137
|
+
@oid = 3
|
138
|
+
|
139
|
+
case tsp_server_address
|
140
|
+
when Net::Address::IPv4
|
141
|
+
@type = 1
|
142
|
+
@payload = tsp_server_address
|
143
|
+
when String
|
144
|
+
if Net::Address::IPv4(tsp_server_address) == tsp_server_address.to_s
|
145
|
+
@type = 1
|
146
|
+
@payload = Net::Address::IPv4.new(tsp_server_address)
|
147
|
+
else
|
148
|
+
@type = 0
|
149
|
+
@payload = tsp_server_address
|
150
|
+
end
|
151
|
+
else
|
152
|
+
raise ArgumentError, 'Unknown TSP Provisioning Server Address type'
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
def name
|
157
|
+
"TSP's Provisioning Server Address Sub-Option"
|
158
|
+
end
|
159
|
+
|
160
|
+
def len
|
161
|
+
if type == 1
|
162
|
+
5
|
163
|
+
else
|
164
|
+
@payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten.size + 1
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def pack
|
169
|
+
if @type == 1
|
170
|
+
[2, self.len.to_i, @payload.to_i].pack('C2N')
|
171
|
+
elsif @type == 0
|
172
|
+
fqdn_encode = @payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten
|
173
|
+
[2, fqdn_encode.size + 1, *fqdn_encode,0].pack('C*')
|
174
|
+
else
|
175
|
+
raise ArgumentError, 'Unknown TSP Provisioning Server Address type'
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def self.unpack(oid, len, payload)
|
180
|
+
raise ArgumentError, "OID mismatch, require 3, #{oid} given" unless oid == 3
|
181
|
+
type = payload.unpack('C').first.to_i
|
182
|
+
if type == 1
|
183
|
+
raise ArgumentError, "Wrong TSP's Provisioning Server Address Sub-Option length for type 1. Should by 5 but #{len} given" unless len == 5
|
184
|
+
self.new Net::Address::IPv4.new(payload.unpack('@N').first)
|
185
|
+
elsif type == 0
|
186
|
+
self.new payload.unpack('@a*').first
|
187
|
+
else
|
188
|
+
raise ArgumentError, "Unknown TSP's Provisioning Server Address Sub-Option type #{type}"
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
end
|
193
|
+
|
194
|
+
class Option4 < Option
|
195
|
+
attr_accessor :nom_timeout, :max_timeout, :max_retries
|
196
|
+
|
197
|
+
def initialize(nom_timeout, max_timeout, max_retries)
|
198
|
+
@oid = 4
|
199
|
+
@nom_timeout = nom_timeout
|
200
|
+
@max_timeout = max_timeout
|
201
|
+
@max_retries = max_retries
|
202
|
+
end
|
203
|
+
|
204
|
+
def name
|
205
|
+
"TSP's AS-REQ/AS-REP Backoff and Retry"
|
206
|
+
end
|
207
|
+
|
208
|
+
def payload
|
209
|
+
[@nom_timeout, @max_timeout, @max_retries]
|
210
|
+
end
|
211
|
+
|
212
|
+
def to_s
|
213
|
+
"#{@nom_timeout}, #{@max_timeout}, #{@max_retries}"
|
214
|
+
end
|
215
|
+
|
216
|
+
def to_i
|
217
|
+
nil
|
218
|
+
end
|
219
|
+
|
220
|
+
def pack
|
221
|
+
[4, 12, @nom_timeout.to_i, @max_timeout.to_i, @max_retries.to_i].pack('C2N3')
|
222
|
+
end
|
223
|
+
|
224
|
+
def self.unpack(oid, len, payload)
|
225
|
+
raise ArgumentError, "OID mismatch for TSP's AS-REQ/AS-REP Backoff and Retry, require 4, #{oid} given" unless oid == 4
|
226
|
+
raise ArgumentError, "Wrong length for TSP's AS-REQ/AS-REP Backoff and Retry = #{len}" unless len == 12
|
227
|
+
nom_timeout, max_timeout, max_retries = payload.unpack('N3')
|
228
|
+
self.new nom_timeout, max_timeout, max_retries
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
|
233
|
+
class Option5 < Option
|
234
|
+
attr_accessor :nom_timeout, :max_timeout, :max_retries
|
235
|
+
|
236
|
+
def initialize(nom_timeout, max_timeout, max_retries)
|
237
|
+
@oid = 5
|
238
|
+
@nom_timeout = nom_timeout
|
239
|
+
@max_timeout = max_timeout
|
240
|
+
@max_retries = max_retries
|
241
|
+
end
|
242
|
+
|
243
|
+
def name
|
244
|
+
"TSP's AP-REQ/AP-REP Backoff and Retry"
|
245
|
+
end
|
246
|
+
|
247
|
+
def payload
|
248
|
+
[@nom_timeout, @max_timeout, @max_retries]
|
249
|
+
end
|
250
|
+
|
251
|
+
def to_s
|
252
|
+
"#{@nom_timeout}, #{@max_timeout}, #{@max_retries}"
|
253
|
+
end
|
254
|
+
|
255
|
+
def to_i
|
256
|
+
nil
|
257
|
+
end
|
258
|
+
|
259
|
+
def pack
|
260
|
+
[5, 12, @nom_timeout.to_i, @max_timeout.to_i, @max_retries.to_i].pack('C2N3')
|
261
|
+
end
|
262
|
+
|
263
|
+
def self.unpack(oid, len, payload)
|
264
|
+
raise ArgumentError, "OID mismatch for TSP's AP-REQ/AP-REP Backoff and Retry, require 5, #{oid} given" unless oid == 5
|
265
|
+
raise ArgumentError, "Wrong length for TSP's AP-REQ/AP-REP Backoff and Retry = #{len}" unless len == 12
|
266
|
+
nom_timeout, max_timeout, max_retries = payload.unpack('N3')
|
267
|
+
self.new nom_timeout, max_timeout, max_retries
|
268
|
+
end
|
269
|
+
|
270
|
+
end
|
271
|
+
|
272
|
+
class Option6 < Option
|
273
|
+
#include Lib::DHCP::Option::Type::String
|
274
|
+
|
275
|
+
def initialize(message)
|
276
|
+
oid = self.class.name.split('::').last.sub(/Option/, '').to_i
|
277
|
+
super oid, message.to_s
|
278
|
+
end
|
279
|
+
|
280
|
+
def pack
|
281
|
+
#[@oid, self.len, @payload.to_s].pack('C2a')
|
282
|
+
fqdn_encode = @payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten
|
283
|
+
[6, fqdn_encode.size + 1, *fqdn_encode, 0].pack('C*')
|
284
|
+
end
|
285
|
+
|
286
|
+
def len
|
287
|
+
@payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten.size + 1
|
288
|
+
end
|
289
|
+
|
290
|
+
def payload=(message)
|
291
|
+
@payload = message.to_s
|
292
|
+
end
|
293
|
+
|
294
|
+
def name
|
295
|
+
"TSP's Kerberos Realm Name Sub-Option"
|
296
|
+
end
|
297
|
+
|
298
|
+
def self.unpack(oid, len, payload)
|
299
|
+
raise ArgumentError, "Wrong #{Lib::DHCP::Option::NAME[oid]} Option length - #{len}" unless len > 0
|
300
|
+
self.new payload#.unpack('a*').first.to_s
|
301
|
+
end
|
302
|
+
|
303
|
+
end
|
304
|
+
|
305
|
+
class Option7 < Option
|
306
|
+
include Lib::DHCP::Option::Type::BOOL
|
307
|
+
|
308
|
+
def name
|
309
|
+
"TSP's Ticket Granting Server Utilization Sub-Option"
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
class Option8 < Option
|
314
|
+
def initialize(timer)
|
315
|
+
@oid = 8
|
316
|
+
@payload = timer.to_i
|
317
|
+
end
|
318
|
+
|
319
|
+
def len
|
320
|
+
1
|
321
|
+
end
|
322
|
+
|
323
|
+
def pack
|
324
|
+
[8, 1, @payload.to_i].pack('C3')
|
325
|
+
end
|
326
|
+
|
327
|
+
def name
|
328
|
+
"TSP's Provisioning Timer Sub-Option"
|
329
|
+
end
|
330
|
+
|
331
|
+
def self.unpack(oid, len, payload)
|
332
|
+
raise ArgumentError, "OID mismatch for TSP's Provisioning Timer Sub-Option, require 8 but #{oid} given" unless oid == 8
|
333
|
+
raise ArgumentError, "Wrong TSP's Provisioning Timer Sub-Option length = #{len}" unless len == 1
|
334
|
+
self.new payload.unpack('C').first.to_i
|
335
|
+
end
|
336
|
+
|
337
|
+
end
|
338
|
+
end
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 23.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
require_relative 'option'
|
8
|
+
require_relative 'type/raw'
|
9
|
+
|
10
|
+
module Lib
|
11
|
+
module DHCP
|
12
|
+
class Option123 < Option
|
13
|
+
#TODO Option123
|
14
|
+
include Lib::DHCP::Option::Type::Raw
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|