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,34 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 22.12.2017 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
module Lib
|
6
|
+
module DHCP
|
7
|
+
class Exception < ::Exception ; end
|
8
|
+
class SanityCheck < Exception
|
9
|
+
class Discover < self ; end
|
10
|
+
|
11
|
+
class Offer < self ; end
|
12
|
+
|
13
|
+
class Request < self ; end
|
14
|
+
|
15
|
+
class ACK < self ; end
|
16
|
+
|
17
|
+
class NACK < self ; end
|
18
|
+
|
19
|
+
class Inform < self ; end
|
20
|
+
|
21
|
+
class Decline < self ; end
|
22
|
+
|
23
|
+
class Release < self ; end
|
24
|
+
|
25
|
+
class LeaseQuery < self ; end
|
26
|
+
|
27
|
+
class LeaseUnassigned < self ; end
|
28
|
+
|
29
|
+
class LeaseUnknown < self ; end
|
30
|
+
|
31
|
+
class LeaseActive < self ; end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 24.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
require 'lib/dhcp'
|
7
|
+
|
8
|
+
module Lib
|
9
|
+
module DHCP
|
10
|
+
class Message
|
11
|
+
class ACK < Message
|
12
|
+
def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
|
13
|
+
super(
|
14
|
+
:op => BOOTREPLY,
|
15
|
+
:htype => htype,
|
16
|
+
:hlen => hlen,
|
17
|
+
:hops => hops,
|
18
|
+
:xid => xid,
|
19
|
+
:secs => secs,
|
20
|
+
:flags => flags,
|
21
|
+
:ciaddr => ciaddr,
|
22
|
+
:yiaddr => yiaddr,
|
23
|
+
:siaddr => siaddr,
|
24
|
+
:giaddr => giaddr,
|
25
|
+
:chaddr => chaddr,
|
26
|
+
:sname => sname,
|
27
|
+
:file => file
|
28
|
+
)
|
29
|
+
if options.is_a? Array or options.is_a? Lib::DHCP::Options
|
30
|
+
options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
|
31
|
+
elsif options.is_a? Lib::DHCP::Option
|
32
|
+
self.options.add options
|
33
|
+
elsif !options.nil?
|
34
|
+
raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
|
35
|
+
end
|
36
|
+
|
37
|
+
self.options.add Lib::DHCP::Option53.new(ACKNOWLEDGE)
|
38
|
+
end
|
39
|
+
|
40
|
+
def pack
|
41
|
+
# noinspection RubyResolve
|
42
|
+
self.option53 = ACKNOWLEDGE
|
43
|
+
self.op = BOOTREPLY
|
44
|
+
sanity_check
|
45
|
+
super
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.unpack(packet)
|
49
|
+
res = super packet
|
50
|
+
raise TypeError, "No implicit conversion of #{res.class.name} into #{self.class.name}" unless res.is_a? self.class
|
51
|
+
res
|
52
|
+
end
|
53
|
+
|
54
|
+
protected :op=
|
55
|
+
# noinspection RubyResolve
|
56
|
+
protected :option53=
|
57
|
+
|
58
|
+
protected
|
59
|
+
def sanity_check
|
60
|
+
#TODO ACK Sanity Check
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 24.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
require 'lib/dhcp'
|
7
|
+
|
8
|
+
module Lib
|
9
|
+
module DHCP
|
10
|
+
class Message
|
11
|
+
class Decline < Message
|
12
|
+
def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
|
13
|
+
super(
|
14
|
+
:op => BOOTREQUEST,
|
15
|
+
:htype => htype,
|
16
|
+
:hlen => hlen,
|
17
|
+
:hops => hops,
|
18
|
+
:xid => xid,
|
19
|
+
:secs => secs,
|
20
|
+
:flags => flags,
|
21
|
+
:ciaddr => ciaddr,
|
22
|
+
:yiaddr => yiaddr,
|
23
|
+
:siaddr => siaddr,
|
24
|
+
:giaddr => giaddr,
|
25
|
+
:chaddr => chaddr,
|
26
|
+
:sname => sname,
|
27
|
+
:file => file
|
28
|
+
)
|
29
|
+
if options.is_a? Array or options.is_a? Lib::DHCP::Options
|
30
|
+
options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
|
31
|
+
elsif options.is_a? Lib::DHCP::Option
|
32
|
+
self.options.add options
|
33
|
+
elsif !options.nil?
|
34
|
+
raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
|
35
|
+
end
|
36
|
+
self.options.add Lib::DHCP::Option53.new(DECLINE)
|
37
|
+
end
|
38
|
+
|
39
|
+
def pack
|
40
|
+
# noinspection RubyResolve
|
41
|
+
self.option53 = DECLINE
|
42
|
+
self.op = BOOTREQUEST
|
43
|
+
sanity_check
|
44
|
+
super
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.unpack(packet)
|
48
|
+
res = super(packet)
|
49
|
+
raise TypeError, "No implicit conversion of #{res.class.name} into #{self.class.name}" unless res.is_a? self.class
|
50
|
+
res
|
51
|
+
end
|
52
|
+
|
53
|
+
protected :op=
|
54
|
+
# noinspection RubyResolve
|
55
|
+
protected :option53=
|
56
|
+
|
57
|
+
protected
|
58
|
+
def sanity_check
|
59
|
+
raise Lib::DHCP::SanityCheck::Decline, "FLAGS set for DHCP Decline Message\n #{self.to_s}" unless flags.to_i == 0
|
60
|
+
raise Lib::DHCP::SanityCheck::Decline, "CIADDR set for DHCP Decline Message\n #{self.to_s}" unless ciaddr.to_i == 0
|
61
|
+
raise Lib::DHCP::SanityCheck::Decline, "YIADDR set for DHCP Decline Message\n #{self.to_s}" unless yiaddr.to_i == 0
|
62
|
+
raise Lib::DHCP::SanityCheck::Decline, "SIADDR set for DHCP Decline Message\n #{self.to_s}" unless siaddr.to_i == 0
|
63
|
+
# noinspection RubyResolve
|
64
|
+
raise Lib::DHCP::SanityCheck::Decline, "Maximum Message Size Option set for DHCP Decline Message\n #{self.to_s}" unless option57.nil?
|
65
|
+
# noinspection RubyResolve
|
66
|
+
raise Lib::DHCP::SanityCheck::Decline, "Vendor class identifier Option set for DHCP Decline Message\n #{self.to_s}" unless option60.nil?
|
67
|
+
# noinspection RubyResolve
|
68
|
+
raise Lib::DHCP::SanityCheck::Decline, "Parameter Request List Option set for DHCP Decline Message\n #{self.to_s}" unless option55.nil?
|
69
|
+
# noinspection RubyResolve
|
70
|
+
raise Lib::DHCP::SanityCheck::Decline, "No Requested IP Address for DHCP Decline Message\n #{self.to_s}" if option50.nil?
|
71
|
+
# noinspection RubyResolve
|
72
|
+
raise Lib::DHCP::SanityCheck::Decline, "No Server identifier for DHCP Decline Message\n #{self.to_s}" if option54.nil?
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 24.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
require 'lib/dhcp'
|
7
|
+
|
8
|
+
module Lib
|
9
|
+
module DHCP
|
10
|
+
class Message
|
11
|
+
class Discover < Message
|
12
|
+
def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options:nil)
|
13
|
+
super(
|
14
|
+
:op => BOOTREQUEST,
|
15
|
+
:htype => htype,
|
16
|
+
:hlen => hlen,
|
17
|
+
:hops => hops,
|
18
|
+
:xid => xid,
|
19
|
+
:secs => secs,
|
20
|
+
:flags => flags,
|
21
|
+
:ciaddr => ciaddr,
|
22
|
+
:yiaddr => yiaddr,
|
23
|
+
:siaddr => siaddr,
|
24
|
+
:giaddr => giaddr,
|
25
|
+
:chaddr => chaddr,
|
26
|
+
:sname => sname,
|
27
|
+
:file => file
|
28
|
+
)
|
29
|
+
if options.is_a? Array or options.is_a? Lib::DHCP::Options
|
30
|
+
options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
|
31
|
+
elsif options.is_a? Lib::DHCP::Option
|
32
|
+
self.options.add options
|
33
|
+
elsif !options.nil?
|
34
|
+
raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
|
35
|
+
end
|
36
|
+
self.options.add Lib::DHCP::Option53.new(DISCOVER)
|
37
|
+
end
|
38
|
+
|
39
|
+
def pack
|
40
|
+
# noinspection RubyResolve
|
41
|
+
self.option53 = DISCOVER
|
42
|
+
self.op = BOOTREQUEST
|
43
|
+
sanity_check
|
44
|
+
super
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.unpack(packet)
|
48
|
+
res = super(packet)
|
49
|
+
raise TypeError, "No implicit conversion of #{res.class.name} into #{self.class.name}" unless res.is_a? self.class
|
50
|
+
res
|
51
|
+
end
|
52
|
+
|
53
|
+
protected :op=
|
54
|
+
# noinspection RubyResolve
|
55
|
+
protected :option53=
|
56
|
+
|
57
|
+
protected
|
58
|
+
|
59
|
+
def sanity_check
|
60
|
+
# noinspection RubyResolve
|
61
|
+
#raise Lib::DHCP::SanityCheck::Discover, "Wrong DHCP message type #{option53.value} for Discover\n #{self.to_s}" unless option53.value.to_i == DHCP_DISCOVER
|
62
|
+
raise Lib::DHCP::SanityCheck::Discover, "YIADDR set for DHCP Discover\n #{self.to_s}" unless yiaddr.to_i == 0
|
63
|
+
raise Lib::DHCP::SanityCheck::Discover, "CIADDR set for DHCP Discovery\n #{self.to_s}" unless ciaddr.to_i == 0
|
64
|
+
# noinspection RubyResolve
|
65
|
+
raise Lib::DHCP::SanityCheck::Discover, "Server identifier option set for DHCP Discover Message\n #{self.to_s}" unless option54.nil?
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 25.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
require 'lib/dhcp'
|
7
|
+
|
8
|
+
module Lib
|
9
|
+
module DHCP
|
10
|
+
class Message
|
11
|
+
class Inform < Message
|
12
|
+
def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
|
13
|
+
super(
|
14
|
+
:op => BOOTREQUEST,
|
15
|
+
:htype => htype,
|
16
|
+
:hlen => hlen,
|
17
|
+
:hops => hops,
|
18
|
+
:xid => xid,
|
19
|
+
:secs => secs,
|
20
|
+
:flags => flags,
|
21
|
+
:ciaddr => ciaddr,
|
22
|
+
:yiaddr => yiaddr,
|
23
|
+
:siaddr => siaddr,
|
24
|
+
:giaddr => giaddr,
|
25
|
+
:chaddr => chaddr,
|
26
|
+
:sname => sname,
|
27
|
+
:file => file
|
28
|
+
)
|
29
|
+
if options.is_a? Array or options.is_a? Lib::DHCP::Options
|
30
|
+
options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
|
31
|
+
elsif options.is_a? Lib::DHCP::Option
|
32
|
+
self.options.add options
|
33
|
+
elsif !options.nil?
|
34
|
+
raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
|
35
|
+
end
|
36
|
+
self.options.add Lib::DHCP::Option53.new(INFORM)
|
37
|
+
end
|
38
|
+
|
39
|
+
def pack
|
40
|
+
# noinspection RubyResolve
|
41
|
+
self.option53 = INFORM
|
42
|
+
self.op = BOOTREQUEST
|
43
|
+
sanity_check
|
44
|
+
super
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.unpack(packet)
|
48
|
+
res = super(packet)
|
49
|
+
raise TypeError, "No implicit conversion of #{res.class.name} into #{self.class.name}" unless res.is_a? self.class
|
50
|
+
res
|
51
|
+
end
|
52
|
+
|
53
|
+
protected :op=
|
54
|
+
# noinspection RubyResolve
|
55
|
+
protected :option53=
|
56
|
+
|
57
|
+
protected
|
58
|
+
def sanity_check
|
59
|
+
#TODO Inform Sanity Check
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 25.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
require 'lib/dhcp'
|
7
|
+
|
8
|
+
module Lib
|
9
|
+
module DHCP
|
10
|
+
class Message
|
11
|
+
class LeaseActive < Message
|
12
|
+
def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
|
13
|
+
super(
|
14
|
+
:op => BOOTREPLY,
|
15
|
+
:htype => htype,
|
16
|
+
:hlen => hlen,
|
17
|
+
:hops => hops,
|
18
|
+
:xid => xid,
|
19
|
+
:secs => secs,
|
20
|
+
:flags => flags,
|
21
|
+
:ciaddr => ciaddr,
|
22
|
+
:yiaddr => yiaddr,
|
23
|
+
:siaddr => siaddr,
|
24
|
+
:giaddr => giaddr,
|
25
|
+
:chaddr => chaddr,
|
26
|
+
:sname => sname,
|
27
|
+
:file => file
|
28
|
+
)
|
29
|
+
if options.is_a? Array or options.is_a? Lib::DHCP::Options
|
30
|
+
options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
|
31
|
+
elsif options.is_a? Lib::DHCP::Option
|
32
|
+
self.options.add options
|
33
|
+
elsif !options.nil?
|
34
|
+
raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
|
35
|
+
end
|
36
|
+
|
37
|
+
self.options.add Lib::DHCP::Option53.new(LEASE_ACTIVE)
|
38
|
+
end
|
39
|
+
|
40
|
+
def pack
|
41
|
+
# noinspection RubyResolve
|
42
|
+
self.option53 = LEASE_ACTIVE
|
43
|
+
self.op = BOOTREPLY
|
44
|
+
sanity_check
|
45
|
+
super
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.unpack(packet)
|
49
|
+
res = super(packet)
|
50
|
+
raise TypeError, "No implicit conversion of #{res.class.name} into #{self.class.name}" unless res.is_a? self.class
|
51
|
+
res
|
52
|
+
end
|
53
|
+
|
54
|
+
protected :op=
|
55
|
+
# noinspection RubyResolve
|
56
|
+
protected :option53=
|
57
|
+
|
58
|
+
protected
|
59
|
+
def sanity_check
|
60
|
+
#TODO LeaseActive Sanity Check
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
#Author: Piotr Wojcieszonek
|
2
|
+
#e-mail: piotr@wojcieszonek.pl
|
3
|
+
# Copyright 25.03.2016 by Piotr Wojcieszonek
|
4
|
+
|
5
|
+
|
6
|
+
require 'lib/dhcp'
|
7
|
+
|
8
|
+
module Lib
|
9
|
+
module DHCP
|
10
|
+
class Message
|
11
|
+
class LeaseQuery < Message
|
12
|
+
def initialize(htype: 1, hlen: 6, hops: 0, xid: nil, secs: 0, flags: 0, ciaddr: 0, yiaddr: 0, siaddr: 0, giaddr: 0, chaddr: , sname: '.', file: '.', options: nil)
|
13
|
+
super(
|
14
|
+
:op => BOOTREQUEST,
|
15
|
+
:htype => htype,
|
16
|
+
:hlen => hlen,
|
17
|
+
:hops => hops,
|
18
|
+
:xid => xid,
|
19
|
+
:secs => secs,
|
20
|
+
:flags => flags,
|
21
|
+
:ciaddr => ciaddr,
|
22
|
+
:yiaddr => yiaddr,
|
23
|
+
:siaddr => siaddr,
|
24
|
+
:giaddr => giaddr,
|
25
|
+
:chaddr => chaddr,
|
26
|
+
:sname => sname,
|
27
|
+
:file => file
|
28
|
+
)
|
29
|
+
if options.is_a? Array or options.is_a? Lib::DHCP::Options
|
30
|
+
options.each { |option| self.options.add option unless option.oid.to_i == Option::MESSAGE_TYPE }
|
31
|
+
elsif options.is_a? Lib::DHCP::Option
|
32
|
+
self.options.add options
|
33
|
+
elsif !options.nil?
|
34
|
+
raise TypeError, "Can't convert #{options.class.name} to Lib::DHCP::Option"
|
35
|
+
end
|
36
|
+
self.options.add Lib::DHCP::Option53.new(LEASE_QUERY)
|
37
|
+
end
|
38
|
+
|
39
|
+
def pack
|
40
|
+
# noinspection RubyResolve
|
41
|
+
self.option53 = LEASE_QUERY
|
42
|
+
self.op = BOOTREQUEST
|
43
|
+
sanity_check
|
44
|
+
super
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.unpack(packet)
|
48
|
+
res = super(packet)
|
49
|
+
raise TypeError, "No implicit conversion of #{res.class.name} into #{self.class.name}" unless res.is_a? self.class
|
50
|
+
res
|
51
|
+
end
|
52
|
+
|
53
|
+
protected :op=
|
54
|
+
# noinspection RubyResolve
|
55
|
+
protected :option53=
|
56
|
+
|
57
|
+
protected
|
58
|
+
def sanity_check
|
59
|
+
#TODO LeaseQuery Sanity Check
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|