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,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 LeaseUnassigned < 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
+ self.options.add Lib::DHCP::Option53.new(LEASE_UNASSIGNED)
37
+ end
38
+
39
+ def pack
40
+ # noinspection RubyResolve
41
+ self.option53 = LEASE_UNASSIGNED
42
+ self.op = BOOTREPLY
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 LeaseUnassigned Sanity Check
60
+ end
61
+ end
62
+ end
63
+ end
64
+ 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 LeaseUnknown < 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
+ self.options.add Lib::DHCP::Option53.new(LEASE_UNKNOWN)
37
+ end
38
+
39
+ def pack
40
+ # noinspection RubyResolve
41
+ self.option53 = LEASE_UNKNOWN
42
+ self.op = BOOTREPLY
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 LeaseUnknown Sanity Check
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,285 @@
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 < Packet
11
+
12
+ BOOTREQUEST = 1
13
+ BOOTREPLY = 2
14
+
15
+ DISCOVER = 1
16
+ OFFER = 2
17
+ REQUEST = 3
18
+ DECLINE = 4
19
+ ACKNOWLEDGE = 5
20
+ NOT_ACKNOWLEDGE = 6
21
+ RELEASE = 7
22
+ INFORM = 8
23
+ LEASE_QUERY = 10
24
+ LEASE_UNASSIGNED = 11
25
+ LEASE_UNKNOWN = 12
26
+ LEASE_ACTIVE = 13
27
+
28
+ NAME = {
29
+ 1 => 'DHCP Discover',
30
+ 2 => 'DHCP Offer',
31
+ 3 => 'DHCP Request',
32
+ 4 => 'DHCP Decline',
33
+ 5 => 'DHCP ACK',
34
+ 6 => 'DHCP NAK',
35
+ 7 => 'DHCP Release',
36
+ 8 => 'DHCP Inform',
37
+ 9 => '',
38
+ 10 => 'DHCP LeaseQuery',
39
+ 11 => 'DHCP LeaseUnassigned',
40
+ 12 => 'DHCP LeaseUnknown',
41
+ 13 => 'DHCP LeaseActive'
42
+ }
43
+
44
+ def name
45
+ if option53.nil?
46
+ nil
47
+ else
48
+ NAME[option53.to_i]
49
+ end
50
+ end
51
+
52
+ def self.unpack(packet)
53
+ packet = super(packet)
54
+ # noinspection RubyResolve
55
+ res = case packet.option53.value.to_i
56
+ when DISCOVER
57
+ Lib::DHCP::Message::Discover.new(
58
+ :htype => packet.htype,
59
+ :hlen => packet.hlen,
60
+ :hops => packet.hops,
61
+ :xid => packet.xid,
62
+ :secs => packet.secs,
63
+ :flags => packet.flags,
64
+ :ciaddr => packet.ciaddr,
65
+ :yiaddr => packet.yiaddr,
66
+ :siaddr => packet.siaddr,
67
+ :giaddr => packet.giaddr,
68
+ :chaddr => packet.chaddr,
69
+ :sname => packet.sname,
70
+ :file => packet.file,
71
+ :options => packet.options
72
+ )
73
+ when OFFER
74
+ Lib::DHCP::Message::Offer.new(
75
+ :htype => packet.htype,
76
+ :hlen => packet.hlen,
77
+ :hops => packet.hops,
78
+ :xid => packet.xid,
79
+ :secs => packet.secs,
80
+ :flags => packet.flags,
81
+ :ciaddr => packet.ciaddr,
82
+ :yiaddr => packet.yiaddr,
83
+ :siaddr => packet.siaddr,
84
+ :giaddr => packet.giaddr,
85
+ :chaddr => packet.chaddr,
86
+ :sname => packet.sname,
87
+ :file => packet.file,
88
+ :options => packet.options
89
+ )
90
+ when REQUEST
91
+ Lib::DHCP::Message::Request.new(
92
+ :htype => packet.htype,
93
+ :hlen => packet.hlen,
94
+ :hops => packet.hops,
95
+ :xid => packet.xid,
96
+ :secs => packet.secs,
97
+ :flags => packet.flags,
98
+ :ciaddr => packet.ciaddr,
99
+ :yiaddr => packet.yiaddr,
100
+ :siaddr => packet.siaddr,
101
+ :giaddr => packet.giaddr,
102
+ :chaddr => packet.chaddr,
103
+ :sname => packet.sname,
104
+ :file => packet.file,
105
+ :options => packet.options
106
+ )
107
+
108
+ when DECLINE
109
+ Lib::DHCP::Message::Decline.new(
110
+ :htype => packet.htype,
111
+ :hlen => packet.hlen,
112
+ :hops => packet.hops,
113
+ :xid => packet.xid,
114
+ :secs => packet.secs,
115
+ :flags => packet.flags,
116
+ :ciaddr => packet.ciaddr,
117
+ :yiaddr => packet.yiaddr,
118
+ :siaddr => packet.siaddr,
119
+ :giaddr => packet.giaddr,
120
+ :chaddr => packet.chaddr,
121
+ :sname => packet.sname,
122
+ :file => packet.file,
123
+ :options => packet.options
124
+ )
125
+ when ACKNOWLEDGE
126
+ Lib::DHCP::Message::ACK.new(
127
+ :htype => packet.htype,
128
+ :hlen => packet.hlen,
129
+ :hops => packet.hops,
130
+ :xid => packet.xid,
131
+ :secs => packet.secs,
132
+ :flags => packet.flags,
133
+ :ciaddr => packet.ciaddr,
134
+ :yiaddr => packet.yiaddr,
135
+ :siaddr => packet.siaddr,
136
+ :giaddr => packet.giaddr,
137
+ :chaddr => packet.chaddr,
138
+ :sname => packet.sname,
139
+ :file => packet.file,
140
+ :options => packet.options
141
+ )
142
+ when NOT_ACKNOWLEDGE
143
+ Lib::DHCP::Message::NACK.new(
144
+ :htype => packet.htype,
145
+ :hlen => packet.hlen,
146
+ :hops => packet.hops,
147
+ :xid => packet.xid,
148
+ :secs => packet.secs,
149
+ :flags => packet.flags,
150
+ :ciaddr => packet.ciaddr,
151
+ :yiaddr => packet.yiaddr,
152
+ :siaddr => packet.siaddr,
153
+ :giaddr => packet.giaddr,
154
+ :chaddr => packet.chaddr,
155
+ :sname => packet.sname,
156
+ :file => packet.file,
157
+ :options => packet.options
158
+ )
159
+ when RELEASE
160
+ Lib::DHCP::Message::Release.new(
161
+ :htype => packet.htype,
162
+ :hlen => packet.hlen,
163
+ :hops => packet.hops,
164
+ :xid => packet.xid,
165
+ :secs => packet.secs,
166
+ :flags => packet.flags,
167
+ :ciaddr => packet.ciaddr,
168
+ :yiaddr => packet.yiaddr,
169
+ :siaddr => packet.siaddr,
170
+ :giaddr => packet.giaddr,
171
+ :chaddr => packet.chaddr,
172
+ :sname => packet.sname,
173
+ :file => packet.file,
174
+ :options => packet.options
175
+ )
176
+ when INFORM
177
+ Lib::DHCP::Message::Inform.new(
178
+ :htype => packet.htype,
179
+ :hlen => packet.hlen,
180
+ :hops => packet.hops,
181
+ :xid => packet.xid,
182
+ :secs => packet.secs,
183
+ :flags => packet.flags,
184
+ :ciaddr => packet.ciaddr,
185
+ :yiaddr => packet.yiaddr,
186
+ :siaddr => packet.siaddr,
187
+ :giaddr => packet.giaddr,
188
+ :chaddr => packet.chaddr,
189
+ :sname => packet.sname,
190
+ :file => packet.file,
191
+ :options => packet.options
192
+ )
193
+ when LEASE_QUERY
194
+ Lib::DHCP::Message::LeaseQuery.new(
195
+ :htype => packet.htype,
196
+ :hlen => packet.hlen,
197
+ :hops => packet.hops,
198
+ :xid => packet.xid,
199
+ :secs => packet.secs,
200
+ :flags => packet.flags,
201
+ :ciaddr => packet.ciaddr,
202
+ :yiaddr => packet.yiaddr,
203
+ :siaddr => packet.siaddr,
204
+ :giaddr => packet.giaddr,
205
+ :chaddr => packet.chaddr,
206
+ :sname => packet.sname,
207
+ :file => packet.file,
208
+ :options => packet.options
209
+ )
210
+ when LEASE_UNASSIGNED
211
+ Lib::DHCP::Message::LeaseUnassigned.new(
212
+ :htype => packet.htype,
213
+ :hlen => packet.hlen,
214
+ :hops => packet.hops,
215
+ :xid => packet.xid,
216
+ :secs => packet.secs,
217
+ :flags => packet.flags,
218
+ :ciaddr => packet.ciaddr,
219
+ :yiaddr => packet.yiaddr,
220
+ :siaddr => packet.siaddr,
221
+ :giaddr => packet.giaddr,
222
+ :chaddr => packet.chaddr,
223
+ :sname => packet.sname,
224
+ :file => packet.file,
225
+ :options => packet.options
226
+ )
227
+ when LEASE_UNKNOWN
228
+ Lib::DHCP::Message::LeaseUnknown.new(
229
+ :htype => packet.htype,
230
+ :hlen => packet.hlen,
231
+ :hops => packet.hops,
232
+ :xid => packet.xid,
233
+ :secs => packet.secs,
234
+ :flags => packet.flags,
235
+ :ciaddr => packet.ciaddr,
236
+ :yiaddr => packet.yiaddr,
237
+ :siaddr => packet.siaddr,
238
+ :giaddr => packet.giaddr,
239
+ :chaddr => packet.chaddr,
240
+ :sname => packet.sname,
241
+ :file => packet.file,
242
+ :options => packet.options
243
+ )
244
+ when LEASE_ACTIVE
245
+ Lib::DHCP::Message::LeaseActive.new(
246
+ :htype => packet.htype,
247
+ :hlen => packet.hlen,
248
+ :hops => packet.hops,
249
+ :xid => packet.xid,
250
+ :secs => packet.secs,
251
+ :flags => packet.flags,
252
+ :ciaddr => packet.ciaddr,
253
+ :yiaddr => packet.yiaddr,
254
+ :siaddr => packet.siaddr,
255
+ :giaddr => packet.giaddr,
256
+ :chaddr => packet.chaddr,
257
+ :sname => packet.sname,
258
+ :file => packet.file,
259
+ :options => packet.options
260
+ )
261
+ else
262
+ raise ArgumentError, "Unknown DHCP MESSAGE TYPE #{packet.option53.to_i}"
263
+ end
264
+ res.send(:sanity_check)
265
+ res
266
+ end
267
+
268
+ def pack
269
+ sanity_check
270
+ super
271
+ end
272
+
273
+ # protected :op=
274
+ # # noinspection RubyResolve
275
+ # protected :option53=
276
+
277
+
278
+ protected
279
+
280
+ def sanity_check
281
+ raise Lib::DHCP::SanityCheck, "Can't pack DHCP Message without Option 53 - Message Type set" if self.option53.nil?
282
+ end
283
+ end
284
+ end
285
+ 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 NACK < 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
+ self.options.add Lib::DHCP::Option53.new(NOT_ACKNOWLEDGE)
37
+ end
38
+
39
+ def pack
40
+ # noinspection RubyResolve
41
+ self.option53 = NOT_ACKNOWLEDGE
42
+ self.op = BOOTREPLY
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 NACK Sanity Check
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end