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,17 @@
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/ip_array'
8
+
9
+ module Lib
10
+ module DHCP
11
+ class Option48 < Option
12
+ # X Window System Font Server Option, The code for this option is 48.
13
+ # The minimum length of this option is 4 octets, and the length MUST be a multiple of 4.
14
+ include Type::IPArray
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
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/ip_array'
8
+
9
+ module Lib
10
+ module DHCP
11
+ class Option49 < Option
12
+ # X Window System Display Manager Option, The code for the this option is 49.
13
+ # The minimum length of this optionis 4, and the length MUST be a multiple of 4.
14
+ include Type::IPArray
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,23 @@
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/ip_array'
8
+
9
+ module Lib
10
+ module DHCP
11
+ class Option5 < Option
12
+ # Name Server Option, The minimum length for the router option is 4 octets, and the length MUST always be
13
+ # a multiple of 4 Multiple IP ADDRESS
14
+
15
+ include Type::IPArray
16
+
17
+ alias_method :name_server, :payload
18
+ alias_method :ns, :payload
19
+ alias_method :name_server=, :payload=
20
+ alias_method :ns=, :payload=
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
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/ip_address'
8
+
9
+ module Lib
10
+ module DHCP
11
+ class Option50 < Option
12
+ # Requested IP Address The code for this option is 50, and its length is 4.
13
+ include Type::IPAddress
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,43 @@
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
+
8
+ module Lib
9
+ module DHCP
10
+ class Option51 < Option
11
+ # IP Address Lease Time The code for this option is 51, and its length is 4.
12
+
13
+ def_delegators :@payload, :to_s
14
+
15
+ def initialize(leasetime)
16
+ super LEASE_TIME, leasetime.to_i
17
+ end
18
+
19
+ def payload=(leasetime)
20
+ @payload = leasetime.to_i
21
+ end
22
+
23
+ def pack
24
+ [@oid, 4, @payload].pack('C2N')
25
+ end
26
+
27
+ def len
28
+ 4
29
+ end
30
+
31
+ alias_method :leasetime, :payload
32
+ alias_method :leasetime=, :payload=
33
+
34
+ private
35
+
36
+ def self.unpack(oid, len, payload)
37
+ raise ArgumentError, "OID Mismatch for #{NAME[oid]} - #{oid}" unless oid.to_i == LEASE_TIME
38
+ raise ArgumentError, "Wrong #{NAME[oid]} length - #{len}" unless len == 4
39
+ self.new payload.unpack('N').first.to_i
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,45 @@
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
+
8
+ module Lib
9
+ module DHCP
10
+ class Option52 < Option
11
+ # Option Overload The code for this option is 52, and its length is 1. Legal values 1,2,3
12
+
13
+ def_delegators :@payload, :to_s
14
+
15
+ def initialize(overload)
16
+ raise ArgumentError, "Illegal value for OPTION OVERLOAD = #{overload}" unless (1..3).include? overload.to_i
17
+ super OPTION_OVERLOAD, overload.to_i
18
+ end
19
+
20
+ def payload=(overload)
21
+ raise ArgumentError, "Illegal value for OPTION OVERLOAD = #{overload}" unless (1..3).include? overload.to_i
22
+ @payload = overload.to_i
23
+ end
24
+
25
+ def pack
26
+ [@oid, 1, @payload].pack('C3')
27
+ end
28
+
29
+ def len
30
+ 1
31
+ end
32
+
33
+ alias_method :overload, :payload
34
+ alias_method :overload=, :payload=
35
+
36
+ private
37
+
38
+ def self.unpack(oid, len, payload)
39
+ raise ArgumentError, "OID Mismatch for #{NAME[oid]} - #{oid}" unless oid.to_i == OPTION_OVERLOAD
40
+ raise ArgumentError, "Wrong #{NAME[oid]} length - #{len}" unless len == 1
41
+ self.new payload.unpack('C').first.to_i
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,50 @@
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
+
8
+ module Lib
9
+ module DHCP
10
+ class Option53 < Option
11
+ # DHCP MESSAGE TYPE - This option is used to convey the type of the DHCP message.
12
+ # The code for this option is 53, and its length is 1.
13
+
14
+ def_delegators :@payload, :to_s
15
+
16
+ def initialize(message_type)
17
+ raise ArgumentError, "Illegal value for DHCP Message Type = #{message_type}" unless (1..255).include? message_type.to_i
18
+ super MESSAGE_TYPE, message_type.to_i
19
+ end
20
+
21
+ def payload=(message_type)
22
+ raise ArgumentError, "Illegal value for DHCP Message Type = #{message_type}" unless (1..255).include? message_type.to_i
23
+ @payload = message_type.to_i
24
+ end
25
+
26
+ def pack
27
+ [@oid, 1, @payload].pack('C3')
28
+ end
29
+
30
+ def len
31
+ 1
32
+ end
33
+
34
+ def to_s
35
+ Lib::DHCP::Message::NAME[@payload.to_i].to_s.upcase
36
+ end
37
+
38
+ alias_method :message_type, :payload
39
+ alias_method :message_type=, :payload=
40
+
41
+ private
42
+
43
+ def self.unpack(oid, len, payload)
44
+ raise ArgumentError, "OID Mismatch for #{NAME[oid]} - #{oid}" unless oid.to_i == MESSAGE_TYPE
45
+ raise ArgumentError, "Wrong #{NAME[oid]} length - #{len}" unless len == 1
46
+ self.new payload.unpack('C').first.to_i
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,16 @@
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/ip_address'
8
+
9
+ module Lib
10
+ module DHCP
11
+ class Option54 < Option
12
+ # Server Identifier The code for this option is 54, and its length is 4.
13
+ include Type::IPAddress
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,52 @@
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
+
8
+ module Lib
9
+ module DHCP
10
+ class Option55 < Option
11
+ # Parameter Request List The code for this option is 55. Its minimum length is 1.
12
+
13
+ def_delegators :@payload, :map, :map!, :[], :[]=, :each, :<<, :shift, :pop
14
+
15
+ def initialize(*request_option)
16
+ super PARAMETER_REQUEST, request_option
17
+ end
18
+
19
+ def pack
20
+ [@oid, @payload.size, *@payload].pack('C*')
21
+ end
22
+
23
+ def to_s
24
+ @payload.join(', ')
25
+ end
26
+
27
+ def len
28
+ @payload.size
29
+ end
30
+
31
+ def payload=(*request_option)
32
+ @payload = request_option
33
+ end
34
+
35
+ # def <<(request_option)
36
+ # @payload << request_option
37
+ # end
38
+
39
+ alias_method :request_option, :payload
40
+ alias_method :request_option=, :payload=
41
+ alias_method :add, :<<
42
+
43
+ private
44
+
45
+ def self.unpack(oid, len, payload)
46
+ raise ArgumentError, "OID Mismatch for #{NAME[oid]} - #{oid}" unless oid.to_i == PARAMETER_REQUEST
47
+ raise ArgumentError, "Wrong #{NAME[oid]} length - #{len}" unless len > 1
48
+ self.new *payload.unpack('C*')
49
+ end
50
+ end
51
+ end
52
+ 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 Option56 < Option
12
+ # Message The code for this option is 56 and its minimum length is 1.
13
+
14
+ include Type::String
15
+
16
+ alias_method :message, :payload
17
+ alias_method :message=, :payload=
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,52 @@
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
+
8
+ module Lib
9
+ module DHCP
10
+ class Option57 < Option
11
+ # Maximum DHCP Message Size. The code for this option is 57, and its length is 2.
12
+ # The minimum legal value is 576 octets.
13
+
14
+ def_delegators :@payload, :to_s
15
+
16
+ def initialize(message_size)
17
+ # raise ArgumentError, "Minimal message size is 576. #{message_size} given" unless message_size.to_i >= 576
18
+ super MAX_MESSAGE_SIZE, message_size.to_i
19
+ end
20
+
21
+ def pack
22
+ [@oid, 2, @payload.to_i].pack('C2n')
23
+ end
24
+
25
+ def len
26
+ 2
27
+ end
28
+
29
+ def payload=(message_size)
30
+ # raise ArgumentError, "Minimal message size is 576. #{message_size} given" unless message_size.to_i >= 576
31
+ @payload = message_size.to_i
32
+ end
33
+
34
+ alias_method :max_message_size, :payload
35
+ alias_method :max_message_size=, :payload=
36
+
37
+ private
38
+
39
+ def self.unpack(oid, len, payload)
40
+ raise ArgumentError, "OID Mismatch for #{NAME[oid]} - #{oid}" unless oid.to_i == MAX_MESSAGE_SIZE
41
+ raise ArgumentError, "Wrong #{NAME[oid]} length - #{len}" unless len == 2
42
+
43
+ message_size = payload.unpack('n').first.to_i
44
+
45
+ #raise ArgumentError, "Minimal message size is 576. #{message_size} given" unless message_size.to_i >= 576
46
+
47
+ self.new message_size
48
+
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,45 @@
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
+
8
+ module Lib
9
+ module DHCP
10
+ class Option58 < Option
11
+ # Renewal (T1) Time Value The code for this option is 58, and its length is 4.
12
+
13
+ def_delegators :@payload, :to_s
14
+
15
+ def initialize(renewal_time)
16
+ super RENEW_TIME, renewal_time.to_i
17
+ end
18
+
19
+ def pack
20
+ [@oid, 4, @payload.to_i].pack('C2N')
21
+ end
22
+
23
+ def len
24
+ 4
25
+ end
26
+
27
+ def payload=(renewal_time)
28
+ @payload = renewal_time.to_i
29
+ end
30
+
31
+ alias_method :renewal_time, :payload
32
+ alias_method :renewal_time=, :payload=
33
+
34
+ private
35
+
36
+ def self.unpack(oid, len, payload)
37
+ raise ArgumentError, "OID Mismatch for #{NAME[oid]} - #{oid}" unless oid.to_i == RENEW_TIME
38
+ raise ArgumentError, "Wrong #{NAME[oid]} length - #{len}" unless len.to_i == 4
39
+
40
+ self.new payload.unpack('N').first.to_i
41
+
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,45 @@
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
+
8
+ module Lib
9
+ module DHCP
10
+ class Option59 < Option
11
+ # Rebinding (T2) Time Value The code for this option is 59, and its length is 4.
12
+
13
+ def_delegators :@payload, :to_s
14
+
15
+ def initialize(rebinding_time)
16
+ super REBIND_TIME, rebinding_time.to_i
17
+ end
18
+
19
+ def pack
20
+ [@oid, 4, @payload.to_i].pack('C2N')
21
+ end
22
+
23
+ def len
24
+ 4
25
+ end
26
+
27
+ def payload=(rebinding_time)
28
+ @payload = rebinding_time.to_i
29
+ end
30
+
31
+ alias_method :rebinding_time, :payload
32
+ alias_method :rebinding_time=, :payload=
33
+
34
+ private
35
+
36
+ def self.unpack(oid, len, payload)
37
+ raise ArgumentError, "OID Mismatch for #{NAME[oid]} - #{oid}" unless oid.to_i == REBIND_TIME
38
+ raise ArgumentError, "Wrong #{NAME[oid]} length - #{len}" unless len == 4
39
+
40
+ self.new payload.unpack('N').first.to_i
41
+
42
+ end
43
+ end
44
+ end
45
+ end