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.
Files changed (296) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +13 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +33 -0
  8. data/Rakefile +10 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/exe/dhcp_dump +83 -0
  12. data/lib-dhcp.gemspec +31 -0
  13. data/lib/lib/dhcp.rb +276 -0
  14. data/lib/lib/dhcp/exception.rb +34 -0
  15. data/lib/lib/dhcp/messages/ack.rb +65 -0
  16. data/lib/lib/dhcp/messages/decline.rb +77 -0
  17. data/lib/lib/dhcp/messages/discover.rb +70 -0
  18. data/lib/lib/dhcp/messages/inform.rb +64 -0
  19. data/lib/lib/dhcp/messages/lease_active.rb +65 -0
  20. data/lib/lib/dhcp/messages/lease_query.rb +64 -0
  21. data/lib/lib/dhcp/messages/lease_unassigned.rb +64 -0
  22. data/lib/lib/dhcp/messages/lease_unknown.rb +64 -0
  23. data/lib/lib/dhcp/messages/message.rb +285 -0
  24. data/lib/lib/dhcp/messages/nack.rb +64 -0
  25. data/lib/lib/dhcp/messages/offer.rb +74 -0
  26. data/lib/lib/dhcp/messages/release.rb +64 -0
  27. data/lib/lib/dhcp/messages/request.rb +71 -0
  28. data/lib/lib/dhcp/options.rb +73 -0
  29. data/lib/lib/dhcp/options/option.rb +249 -0
  30. data/lib/lib/dhcp/options/option0.rb +34 -0
  31. data/lib/lib/dhcp/options/option1.rb +24 -0
  32. data/lib/lib/dhcp/options/option10.rb +20 -0
  33. data/lib/lib/dhcp/options/option100.rb +17 -0
  34. data/lib/lib/dhcp/options/option101.rb +17 -0
  35. data/lib/lib/dhcp/options/option102.rb +17 -0
  36. data/lib/lib/dhcp/options/option103.rb +17 -0
  37. data/lib/lib/dhcp/options/option104.rb +17 -0
  38. data/lib/lib/dhcp/options/option105.rb +17 -0
  39. data/lib/lib/dhcp/options/option106.rb +17 -0
  40. data/lib/lib/dhcp/options/option107.rb +17 -0
  41. data/lib/lib/dhcp/options/option108.rb +17 -0
  42. data/lib/lib/dhcp/options/option109.rb +17 -0
  43. data/lib/lib/dhcp/options/option11.rb +20 -0
  44. data/lib/lib/dhcp/options/option110.rb +17 -0
  45. data/lib/lib/dhcp/options/option111.rb +17 -0
  46. data/lib/lib/dhcp/options/option112.rb +17 -0
  47. data/lib/lib/dhcp/options/option113.rb +17 -0
  48. data/lib/lib/dhcp/options/option114.rb +17 -0
  49. data/lib/lib/dhcp/options/option115.rb +17 -0
  50. data/lib/lib/dhcp/options/option116.rb +17 -0
  51. data/lib/lib/dhcp/options/option117.rb +17 -0
  52. data/lib/lib/dhcp/options/option118.rb +17 -0
  53. data/lib/lib/dhcp/options/option119.rb +17 -0
  54. data/lib/lib/dhcp/options/option12.rb +20 -0
  55. data/lib/lib/dhcp/options/option120.rb +17 -0
  56. data/lib/lib/dhcp/options/option121.rb +17 -0
  57. data/lib/lib/dhcp/options/option122.rb +341 -0
  58. data/lib/lib/dhcp/options/option123.rb +17 -0
  59. data/lib/lib/dhcp/options/option124.rb +17 -0
  60. data/lib/lib/dhcp/options/option125.rb +17 -0
  61. data/lib/lib/dhcp/options/option126.rb +17 -0
  62. data/lib/lib/dhcp/options/option127.rb +17 -0
  63. data/lib/lib/dhcp/options/option128.rb +17 -0
  64. data/lib/lib/dhcp/options/option129.rb +17 -0
  65. data/lib/lib/dhcp/options/option13.rb +43 -0
  66. data/lib/lib/dhcp/options/option130.rb +17 -0
  67. data/lib/lib/dhcp/options/option131.rb +17 -0
  68. data/lib/lib/dhcp/options/option132.rb +17 -0
  69. data/lib/lib/dhcp/options/option133.rb +17 -0
  70. data/lib/lib/dhcp/options/option134.rb +17 -0
  71. data/lib/lib/dhcp/options/option135.rb +17 -0
  72. data/lib/lib/dhcp/options/option136.rb +17 -0
  73. data/lib/lib/dhcp/options/option137.rb +17 -0
  74. data/lib/lib/dhcp/options/option138.rb +17 -0
  75. data/lib/lib/dhcp/options/option139.rb +17 -0
  76. data/lib/lib/dhcp/options/option14.rb +21 -0
  77. data/lib/lib/dhcp/options/option140.rb +17 -0
  78. data/lib/lib/dhcp/options/option141.rb +17 -0
  79. data/lib/lib/dhcp/options/option142.rb +17 -0
  80. data/lib/lib/dhcp/options/option143.rb +17 -0
  81. data/lib/lib/dhcp/options/option144.rb +17 -0
  82. data/lib/lib/dhcp/options/option145.rb +17 -0
  83. data/lib/lib/dhcp/options/option146.rb +17 -0
  84. data/lib/lib/dhcp/options/option147.rb +17 -0
  85. data/lib/lib/dhcp/options/option148.rb +17 -0
  86. data/lib/lib/dhcp/options/option149.rb +17 -0
  87. data/lib/lib/dhcp/options/option15.rb +20 -0
  88. data/lib/lib/dhcp/options/option150.rb +17 -0
  89. data/lib/lib/dhcp/options/option151.rb +17 -0
  90. data/lib/lib/dhcp/options/option152.rb +17 -0
  91. data/lib/lib/dhcp/options/option153.rb +17 -0
  92. data/lib/lib/dhcp/options/option154.rb +17 -0
  93. data/lib/lib/dhcp/options/option155.rb +17 -0
  94. data/lib/lib/dhcp/options/option156.rb +17 -0
  95. data/lib/lib/dhcp/options/option157.rb +17 -0
  96. data/lib/lib/dhcp/options/option158.rb +17 -0
  97. data/lib/lib/dhcp/options/option159.rb +17 -0
  98. data/lib/lib/dhcp/options/option16.rb +19 -0
  99. data/lib/lib/dhcp/options/option160.rb +17 -0
  100. data/lib/lib/dhcp/options/option161.rb +17 -0
  101. data/lib/lib/dhcp/options/option162.rb +17 -0
  102. data/lib/lib/dhcp/options/option163.rb +17 -0
  103. data/lib/lib/dhcp/options/option164.rb +17 -0
  104. data/lib/lib/dhcp/options/option165.rb +17 -0
  105. data/lib/lib/dhcp/options/option166.rb +17 -0
  106. data/lib/lib/dhcp/options/option167.rb +17 -0
  107. data/lib/lib/dhcp/options/option168.rb +17 -0
  108. data/lib/lib/dhcp/options/option169.rb +17 -0
  109. data/lib/lib/dhcp/options/option17.rb +22 -0
  110. data/lib/lib/dhcp/options/option170.rb +17 -0
  111. data/lib/lib/dhcp/options/option171.rb +17 -0
  112. data/lib/lib/dhcp/options/option172.rb +17 -0
  113. data/lib/lib/dhcp/options/option173.rb +17 -0
  114. data/lib/lib/dhcp/options/option174.rb +17 -0
  115. data/lib/lib/dhcp/options/option175.rb +17 -0
  116. data/lib/lib/dhcp/options/option176.rb +17 -0
  117. data/lib/lib/dhcp/options/option177.rb +17 -0
  118. data/lib/lib/dhcp/options/option178.rb +17 -0
  119. data/lib/lib/dhcp/options/option179.rb +17 -0
  120. data/lib/lib/dhcp/options/option18.rb +23 -0
  121. data/lib/lib/dhcp/options/option180.rb +17 -0
  122. data/lib/lib/dhcp/options/option181.rb +17 -0
  123. data/lib/lib/dhcp/options/option182.rb +17 -0
  124. data/lib/lib/dhcp/options/option183.rb +17 -0
  125. data/lib/lib/dhcp/options/option184.rb +17 -0
  126. data/lib/lib/dhcp/options/option185.rb +17 -0
  127. data/lib/lib/dhcp/options/option186.rb +17 -0
  128. data/lib/lib/dhcp/options/option187.rb +17 -0
  129. data/lib/lib/dhcp/options/option188.rb +17 -0
  130. data/lib/lib/dhcp/options/option189.rb +17 -0
  131. data/lib/lib/dhcp/options/option19.rb +20 -0
  132. data/lib/lib/dhcp/options/option190.rb +17 -0
  133. data/lib/lib/dhcp/options/option191.rb +17 -0
  134. data/lib/lib/dhcp/options/option192.rb +17 -0
  135. data/lib/lib/dhcp/options/option193.rb +17 -0
  136. data/lib/lib/dhcp/options/option194.rb +17 -0
  137. data/lib/lib/dhcp/options/option195.rb +17 -0
  138. data/lib/lib/dhcp/options/option196.rb +17 -0
  139. data/lib/lib/dhcp/options/option197.rb +17 -0
  140. data/lib/lib/dhcp/options/option198.rb +17 -0
  141. data/lib/lib/dhcp/options/option199.rb +17 -0
  142. data/lib/lib/dhcp/options/option2.rb +45 -0
  143. data/lib/lib/dhcp/options/option20.rb +22 -0
  144. data/lib/lib/dhcp/options/option200.rb +17 -0
  145. data/lib/lib/dhcp/options/option201.rb +17 -0
  146. data/lib/lib/dhcp/options/option202.rb +17 -0
  147. data/lib/lib/dhcp/options/option203.rb +17 -0
  148. data/lib/lib/dhcp/options/option204.rb +17 -0
  149. data/lib/lib/dhcp/options/option205.rb +17 -0
  150. data/lib/lib/dhcp/options/option206.rb +17 -0
  151. data/lib/lib/dhcp/options/option207.rb +17 -0
  152. data/lib/lib/dhcp/options/option208.rb +17 -0
  153. data/lib/lib/dhcp/options/option209.rb +17 -0
  154. data/lib/lib/dhcp/options/option21.rb +87 -0
  155. data/lib/lib/dhcp/options/option210.rb +17 -0
  156. data/lib/lib/dhcp/options/option211.rb +17 -0
  157. data/lib/lib/dhcp/options/option212.rb +17 -0
  158. data/lib/lib/dhcp/options/option213.rb +17 -0
  159. data/lib/lib/dhcp/options/option214.rb +17 -0
  160. data/lib/lib/dhcp/options/option215.rb +17 -0
  161. data/lib/lib/dhcp/options/option216.rb +17 -0
  162. data/lib/lib/dhcp/options/option217.rb +17 -0
  163. data/lib/lib/dhcp/options/option218.rb +17 -0
  164. data/lib/lib/dhcp/options/option219.rb +17 -0
  165. data/lib/lib/dhcp/options/option22.rb +43 -0
  166. data/lib/lib/dhcp/options/option220.rb +17 -0
  167. data/lib/lib/dhcp/options/option221.rb +17 -0
  168. data/lib/lib/dhcp/options/option222.rb +17 -0
  169. data/lib/lib/dhcp/options/option223.rb +17 -0
  170. data/lib/lib/dhcp/options/option224.rb +17 -0
  171. data/lib/lib/dhcp/options/option225.rb +17 -0
  172. data/lib/lib/dhcp/options/option226.rb +17 -0
  173. data/lib/lib/dhcp/options/option227.rb +17 -0
  174. data/lib/lib/dhcp/options/option228.rb +17 -0
  175. data/lib/lib/dhcp/options/option229.rb +17 -0
  176. data/lib/lib/dhcp/options/option23.rb +44 -0
  177. data/lib/lib/dhcp/options/option230.rb +17 -0
  178. data/lib/lib/dhcp/options/option231.rb +17 -0
  179. data/lib/lib/dhcp/options/option232.rb +17 -0
  180. data/lib/lib/dhcp/options/option233.rb +17 -0
  181. data/lib/lib/dhcp/options/option234.rb +17 -0
  182. data/lib/lib/dhcp/options/option235.rb +17 -0
  183. data/lib/lib/dhcp/options/option236.rb +17 -0
  184. data/lib/lib/dhcp/options/option237.rb +17 -0
  185. data/lib/lib/dhcp/options/option238.rb +17 -0
  186. data/lib/lib/dhcp/options/option239.rb +17 -0
  187. data/lib/lib/dhcp/options/option24.rb +45 -0
  188. data/lib/lib/dhcp/options/option240.rb +17 -0
  189. data/lib/lib/dhcp/options/option241.rb +17 -0
  190. data/lib/lib/dhcp/options/option242.rb +17 -0
  191. data/lib/lib/dhcp/options/option243.rb +17 -0
  192. data/lib/lib/dhcp/options/option244.rb +17 -0
  193. data/lib/lib/dhcp/options/option245.rb +17 -0
  194. data/lib/lib/dhcp/options/option246.rb +17 -0
  195. data/lib/lib/dhcp/options/option247.rb +17 -0
  196. data/lib/lib/dhcp/options/option248.rb +17 -0
  197. data/lib/lib/dhcp/options/option249.rb +17 -0
  198. data/lib/lib/dhcp/options/option25.rb +20 -0
  199. data/lib/lib/dhcp/options/option250.rb +17 -0
  200. data/lib/lib/dhcp/options/option251.rb +17 -0
  201. data/lib/lib/dhcp/options/option252.rb +17 -0
  202. data/lib/lib/dhcp/options/option253.rb +17 -0
  203. data/lib/lib/dhcp/options/option254.rb +17 -0
  204. data/lib/lib/dhcp/options/option255.rb +29 -0
  205. data/lib/lib/dhcp/options/option26.rb +45 -0
  206. data/lib/lib/dhcp/options/option27.rb +16 -0
  207. data/lib/lib/dhcp/options/option28.rb +21 -0
  208. data/lib/lib/dhcp/options/option29.rb +16 -0
  209. data/lib/lib/dhcp/options/option3.rb +22 -0
  210. data/lib/lib/dhcp/options/option30.rb +16 -0
  211. data/lib/lib/dhcp/options/option31.rb +16 -0
  212. data/lib/lib/dhcp/options/option32.rb +18 -0
  213. data/lib/lib/dhcp/options/option33.rb +20 -0
  214. data/lib/lib/dhcp/options/option34.rb +16 -0
  215. data/lib/lib/dhcp/options/option35.rb +43 -0
  216. data/lib/lib/dhcp/options/option36.rb +16 -0
  217. data/lib/lib/dhcp/options/option37.rb +43 -0
  218. data/lib/lib/dhcp/options/option38.rb +43 -0
  219. data/lib/lib/dhcp/options/option39.rb +16 -0
  220. data/lib/lib/dhcp/options/option4.rb +21 -0
  221. data/lib/lib/dhcp/options/option40.rb +18 -0
  222. data/lib/lib/dhcp/options/option41.rb +18 -0
  223. data/lib/lib/dhcp/options/option42.rb +22 -0
  224. data/lib/lib/dhcp/options/option43.rb +16 -0
  225. data/lib/lib/dhcp/options/option44.rb +17 -0
  226. data/lib/lib/dhcp/options/option45.rb +18 -0
  227. data/lib/lib/dhcp/options/option46.rb +43 -0
  228. data/lib/lib/dhcp/options/option47.rb +17 -0
  229. data/lib/lib/dhcp/options/option48.rb +17 -0
  230. data/lib/lib/dhcp/options/option49.rb +17 -0
  231. data/lib/lib/dhcp/options/option5.rb +23 -0
  232. data/lib/lib/dhcp/options/option50.rb +16 -0
  233. data/lib/lib/dhcp/options/option51.rb +43 -0
  234. data/lib/lib/dhcp/options/option52.rb +45 -0
  235. data/lib/lib/dhcp/options/option53.rb +50 -0
  236. data/lib/lib/dhcp/options/option54.rb +16 -0
  237. data/lib/lib/dhcp/options/option55.rb +52 -0
  238. data/lib/lib/dhcp/options/option56.rb +20 -0
  239. data/lib/lib/dhcp/options/option57.rb +52 -0
  240. data/lib/lib/dhcp/options/option58.rb +45 -0
  241. data/lib/lib/dhcp/options/option59.rb +45 -0
  242. data/lib/lib/dhcp/options/option6.rb +23 -0
  243. data/lib/lib/dhcp/options/option60.rb +16 -0
  244. data/lib/lib/dhcp/options/option61.rb +37 -0
  245. data/lib/lib/dhcp/options/option62.rb +16 -0
  246. data/lib/lib/dhcp/options/option63.rb +16 -0
  247. data/lib/lib/dhcp/options/option64.rb +20 -0
  248. data/lib/lib/dhcp/options/option65.rb +17 -0
  249. data/lib/lib/dhcp/options/option66.rb +20 -0
  250. data/lib/lib/dhcp/options/option67.rb +20 -0
  251. data/lib/lib/dhcp/options/option68.rb +19 -0
  252. data/lib/lib/dhcp/options/option69.rb +17 -0
  253. data/lib/lib/dhcp/options/option7.rb +22 -0
  254. data/lib/lib/dhcp/options/option70.rb +17 -0
  255. data/lib/lib/dhcp/options/option71.rb +17 -0
  256. data/lib/lib/dhcp/options/option72.rb +17 -0
  257. data/lib/lib/dhcp/options/option73.rb +17 -0
  258. data/lib/lib/dhcp/options/option74.rb +17 -0
  259. data/lib/lib/dhcp/options/option75.rb +17 -0
  260. data/lib/lib/dhcp/options/option76.rb +17 -0
  261. data/lib/lib/dhcp/options/option77.rb +16 -0
  262. data/lib/lib/dhcp/options/option78.rb +16 -0
  263. data/lib/lib/dhcp/options/option79.rb +16 -0
  264. data/lib/lib/dhcp/options/option8.rb +22 -0
  265. data/lib/lib/dhcp/options/option80.rb +16 -0
  266. data/lib/lib/dhcp/options/option81.rb +16 -0
  267. data/lib/lib/dhcp/options/option82.rb +20 -0
  268. data/lib/lib/dhcp/options/option83.rb +16 -0
  269. data/lib/lib/dhcp/options/option84.rb +16 -0
  270. data/lib/lib/dhcp/options/option85.rb +16 -0
  271. data/lib/lib/dhcp/options/option86.rb +17 -0
  272. data/lib/lib/dhcp/options/option87.rb +16 -0
  273. data/lib/lib/dhcp/options/option88.rb +16 -0
  274. data/lib/lib/dhcp/options/option89.rb +16 -0
  275. data/lib/lib/dhcp/options/option9.rb +21 -0
  276. data/lib/lib/dhcp/options/option90.rb +16 -0
  277. data/lib/lib/dhcp/options/option91.rb +17 -0
  278. data/lib/lib/dhcp/options/option92.rb +17 -0
  279. data/lib/lib/dhcp/options/option93.rb +17 -0
  280. data/lib/lib/dhcp/options/option94.rb +17 -0
  281. data/lib/lib/dhcp/options/option95.rb +17 -0
  282. data/lib/lib/dhcp/options/option96.rb +17 -0
  283. data/lib/lib/dhcp/options/option97.rb +17 -0
  284. data/lib/lib/dhcp/options/option98.rb +17 -0
  285. data/lib/lib/dhcp/options/option99.rb +17 -0
  286. data/lib/lib/dhcp/options/sub_option.rb +32 -0
  287. data/lib/lib/dhcp/options/type/bool.rb +55 -0
  288. data/lib/lib/dhcp/options/type/ip_address.rb +73 -0
  289. data/lib/lib/dhcp/options/type/ip_array.rb +41 -0
  290. data/lib/lib/dhcp/options/type/netmask.rb +56 -0
  291. data/lib/lib/dhcp/options/type/raw.rb +51 -0
  292. data/lib/lib/dhcp/options/type/string.rb +49 -0
  293. data/lib/lib/dhcp/options/type/sub_option.rb +83 -0
  294. data/lib/lib/dhcp/packet.rb +96 -0
  295. data/lib/lib/dhcp/version.rb +5 -0
  296. 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