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 23.03.2016 by Piotr Wojcieszonek
4
+
5
+
6
+
7
+ require_relative 'option'
8
+ require_relative 'type/raw'
9
+
10
+ module Lib
11
+ module DHCP
12
+ class Option118 < Option
13
+ #TODO Option118
14
+ include Lib::DHCP::Option::Type::Raw
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ #Author: Piotr Wojcieszonek
2
+ #e-mail: piotr@wojcieszonek.pl
3
+ # Copyright 23.03.2016 by Piotr Wojcieszonek
4
+
5
+
6
+
7
+ require_relative 'option'
8
+ require_relative 'type/raw'
9
+
10
+ module Lib
11
+ module DHCP
12
+ class Option119 < Option
13
+ #TODO Option119
14
+ include Lib::DHCP::Option::Type::Raw
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ #Author: Piotr Wojcieszonek
2
+ #e-mail: piotr@wojcieszonek.pl
3
+ # Copyright 22.03.2016 by Piotr Wojcieszonek
4
+
5
+
6
+ require_relative 'option'
7
+ require_relative 'type/string'
8
+
9
+ module Lib
10
+ module DHCP
11
+ class Option12 < Option
12
+ # Host Name Option, The minimum length is 1
13
+
14
+ include Type::String
15
+
16
+ alias_method :hostname, :payload
17
+ alias_method :hostname=, :payload=
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ #Author: Piotr Wojcieszonek
2
+ #e-mail: piotr@wojcieszonek.pl
3
+ # Copyright 23.03.2016 by Piotr Wojcieszonek
4
+
5
+
6
+
7
+ require_relative 'option'
8
+ require_relative 'type/raw'
9
+
10
+ module Lib
11
+ module DHCP
12
+ class Option120 < Option
13
+ #TODO Option120
14
+ include Lib::DHCP::Option::Type::Raw
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ #Author: Piotr Wojcieszonek
2
+ #e-mail: piotr@wojcieszonek.pl
3
+ # Copyright 23.03.2016 by Piotr Wojcieszonek
4
+
5
+
6
+
7
+ require_relative 'option'
8
+ require_relative 'type/raw'
9
+
10
+ module Lib
11
+ module DHCP
12
+ class Option121 < Option
13
+ #TODO Option121
14
+ include Lib::DHCP::Option::Type::Raw
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,341 @@
1
+ #Author: Piotr Wojcieszonek
2
+ #e-mail: piotr@wojcieszonek.pl
3
+ # Copyright 23.03.2016 by Piotr Wojcieszonek
4
+
5
+
6
+
7
+ require_relative 'option'
8
+ require_relative 'type/ip_address'
9
+ require_relative 'type/string'
10
+ require_relative 'type/bool'
11
+
12
+
13
+
14
+ module Lib
15
+ module DHCP
16
+ class Option122 < Option
17
+
18
+ def initialize(*sub_option)
19
+ oid = self.class.name.split('::').last.sub(/Option/, '').to_i
20
+ sub_options = []
21
+ sub_option.each do |sub|
22
+ if sub.is_a? Lib::DHCP::Option122::SubOption
23
+ opt = sub
24
+ elsif sub.is_a? Array
25
+ case sub[0].to_i
26
+ when 1
27
+ opt = Lib::DHCP::Option122::SubOption::Option1.new(sub[1])
28
+ when 2
29
+ opt = Lib::DHCP::Option122::SubOption::Option2.new(sub[1])
30
+ when 3
31
+ opt = Lib::DHCP::Option122::SubOption::Option3.new(sub[1])
32
+ when 4
33
+ opt = Lib::DHCP::Option122::SubOption::Option4.new(*sub[1])
34
+ when 5
35
+ opt = Lib::DHCP::Option122::SubOption::Option5.new(*sub[1])
36
+ when 6
37
+ opt = Lib::DHCP::Option122::SubOption::Option6.new(sub[1])
38
+ when 7
39
+ opt = Lib::DHCP::Option122::SubOption::Option7.new(sub[1])
40
+ when 8
41
+ opt = Lib::DHCP::Option122::SubOption::Option8.new(sub[1])
42
+ else
43
+ #raise ArgumentError, "Not implemented sub option #{sub[0]} for Option 122"
44
+ opt = Lib::DHCP::Option122::SubOption::Option.new(sub[0].to_i, sub[1])
45
+ end
46
+ #opt = Lib::DHCP::SubOption.new(sub[0], sub[1])
47
+ else
48
+ raise ArgumentError, 'Unknown SubOption parameter type'
49
+ end
50
+ sub_options << opt
51
+ define_singleton_method("option#{opt.oid.to_i}".to_sym) { opt }
52
+ #define_singleton_method(:option1) {opt}
53
+ end
54
+ super oid, sub_options
55
+ end
56
+
57
+
58
+ def to_s
59
+ #"Option #{@oid}, LEN #{self.len}, Value #{@payload.to_s}"
60
+ s =''
61
+ @payload.each do |sub_option|
62
+ s += "Option #{sub_option.oid}, LEN #{sub_option.len}, Value #{@payload.to_s} \n\r"
63
+ end
64
+ s
65
+ end
66
+
67
+ def len
68
+ l = 0
69
+ @payload.each do |sub_option|
70
+ l += (sub_option.len.to_i + 2).to_i
71
+ end
72
+ l
73
+ end
74
+
75
+
76
+ def pack
77
+ option_pack = ''
78
+ sub_len = 2
79
+ @payload.each do |sub_option|
80
+ sub_len += sub_option.len
81
+ option_pack += sub_option.pack
82
+ end
83
+ [@oid, self.len, option_pack].pack('C2a*')
84
+ end
85
+
86
+
87
+ def self.unpack(oid, len, payload)
88
+ raise ArgumentError, "Wrong Option #{Lib::DHCP::Option::NAME[oid]} length - #{len}" unless len > 0
89
+ i = 0
90
+ sub_options = []
91
+ while i < len
92
+ sub_oid, sub_len = payload.unpack("@#{i}C2")
93
+ sub_payload = payload.unpack("@#{i+2}a#{sub_len}").first.to_s
94
+ raise ArgumentError "Unknown OID format for DHCP Option122 SubOption - #{sub_oid}" unless sub_oid.respond_to? :to_i
95
+ raise ArgumentError, "Unknown OID for Option122 SubOption - #{sub_oid}" unless sub_oid.to_i > 0 and sub_oid.to_i < 255
96
+ sub_options << eval("Lib::DHCP::Option122::SubOption::Option#{sub_oid.to_i.to_s}").unpack(sub_oid, sub_len, sub_payload)
97
+ # case sub_oid
98
+ # when 1
99
+ # sub_options << Lib::DHCP::Option122::SubOption::Option1.unpack(sub_oid, sub_len, sub_payload)
100
+ # when 2
101
+ #
102
+ # end
103
+ # sub_options << [sub_oid, sub_payload]
104
+ i += (sub_len + 2)
105
+ end
106
+ self.new *sub_options
107
+ end
108
+
109
+
110
+ module SubOption
111
+
112
+ class Option < ::Lib::DHCP::Option ; end
113
+
114
+ class Option1 < Option
115
+
116
+ include Lib::DHCP::Option::Type::IPAddress
117
+
118
+ def name
119
+ "TSP's DHCP Server Address Sub-Options"
120
+ end
121
+ end
122
+
123
+ class Option2 < Option
124
+
125
+ include Lib::DHCP::Option::Type::IPAddress
126
+
127
+ def name
128
+ "TSP's Secondary DHCP Server Address"
129
+ end
130
+ end
131
+
132
+ class Option3 < Option
133
+
134
+ attr_reader :type
135
+
136
+ def initialize(tsp_server_address)
137
+ @oid = 3
138
+
139
+ case tsp_server_address
140
+ when Net::Address::IPv4
141
+ @type = 1
142
+ @payload = tsp_server_address
143
+ when String
144
+ if Net::Address::IPv4(tsp_server_address) == tsp_server_address.to_s
145
+ @type = 1
146
+ @payload = Net::Address::IPv4.new(tsp_server_address)
147
+ else
148
+ @type = 0
149
+ @payload = tsp_server_address
150
+ end
151
+ else
152
+ raise ArgumentError, 'Unknown TSP Provisioning Server Address type'
153
+ end
154
+ end
155
+
156
+ def name
157
+ "TSP's Provisioning Server Address Sub-Option"
158
+ end
159
+
160
+ def len
161
+ if type == 1
162
+ 5
163
+ else
164
+ @payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten.size + 1
165
+ end
166
+ end
167
+
168
+ def pack
169
+ if @type == 1
170
+ [2, self.len.to_i, @payload.to_i].pack('C2N')
171
+ elsif @type == 0
172
+ fqdn_encode = @payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten
173
+ [2, fqdn_encode.size + 1, *fqdn_encode,0].pack('C*')
174
+ else
175
+ raise ArgumentError, 'Unknown TSP Provisioning Server Address type'
176
+ end
177
+ end
178
+
179
+ def self.unpack(oid, len, payload)
180
+ raise ArgumentError, "OID mismatch, require 3, #{oid} given" unless oid == 3
181
+ type = payload.unpack('C').first.to_i
182
+ if type == 1
183
+ raise ArgumentError, "Wrong TSP's Provisioning Server Address Sub-Option length for type 1. Should by 5 but #{len} given" unless len == 5
184
+ self.new Net::Address::IPv4.new(payload.unpack('@N').first)
185
+ elsif type == 0
186
+ self.new payload.unpack('@a*').first
187
+ else
188
+ raise ArgumentError, "Unknown TSP's Provisioning Server Address Sub-Option type #{type}"
189
+ end
190
+ end
191
+
192
+ end
193
+
194
+ class Option4 < Option
195
+ attr_accessor :nom_timeout, :max_timeout, :max_retries
196
+
197
+ def initialize(nom_timeout, max_timeout, max_retries)
198
+ @oid = 4
199
+ @nom_timeout = nom_timeout
200
+ @max_timeout = max_timeout
201
+ @max_retries = max_retries
202
+ end
203
+
204
+ def name
205
+ "TSP's AS-REQ/AS-REP Backoff and Retry"
206
+ end
207
+
208
+ def payload
209
+ [@nom_timeout, @max_timeout, @max_retries]
210
+ end
211
+
212
+ def to_s
213
+ "#{@nom_timeout}, #{@max_timeout}, #{@max_retries}"
214
+ end
215
+
216
+ def to_i
217
+ nil
218
+ end
219
+
220
+ def pack
221
+ [4, 12, @nom_timeout.to_i, @max_timeout.to_i, @max_retries.to_i].pack('C2N3')
222
+ end
223
+
224
+ def self.unpack(oid, len, payload)
225
+ raise ArgumentError, "OID mismatch for TSP's AS-REQ/AS-REP Backoff and Retry, require 4, #{oid} given" unless oid == 4
226
+ raise ArgumentError, "Wrong length for TSP's AS-REQ/AS-REP Backoff and Retry = #{len}" unless len == 12
227
+ nom_timeout, max_timeout, max_retries = payload.unpack('N3')
228
+ self.new nom_timeout, max_timeout, max_retries
229
+ end
230
+
231
+ end
232
+
233
+ class Option5 < Option
234
+ attr_accessor :nom_timeout, :max_timeout, :max_retries
235
+
236
+ def initialize(nom_timeout, max_timeout, max_retries)
237
+ @oid = 5
238
+ @nom_timeout = nom_timeout
239
+ @max_timeout = max_timeout
240
+ @max_retries = max_retries
241
+ end
242
+
243
+ def name
244
+ "TSP's AP-REQ/AP-REP Backoff and Retry"
245
+ end
246
+
247
+ def payload
248
+ [@nom_timeout, @max_timeout, @max_retries]
249
+ end
250
+
251
+ def to_s
252
+ "#{@nom_timeout}, #{@max_timeout}, #{@max_retries}"
253
+ end
254
+
255
+ def to_i
256
+ nil
257
+ end
258
+
259
+ def pack
260
+ [5, 12, @nom_timeout.to_i, @max_timeout.to_i, @max_retries.to_i].pack('C2N3')
261
+ end
262
+
263
+ def self.unpack(oid, len, payload)
264
+ raise ArgumentError, "OID mismatch for TSP's AP-REQ/AP-REP Backoff and Retry, require 5, #{oid} given" unless oid == 5
265
+ raise ArgumentError, "Wrong length for TSP's AP-REQ/AP-REP Backoff and Retry = #{len}" unless len == 12
266
+ nom_timeout, max_timeout, max_retries = payload.unpack('N3')
267
+ self.new nom_timeout, max_timeout, max_retries
268
+ end
269
+
270
+ end
271
+
272
+ class Option6 < Option
273
+ #include Lib::DHCP::Option::Type::String
274
+
275
+ def initialize(message)
276
+ oid = self.class.name.split('::').last.sub(/Option/, '').to_i
277
+ super oid, message.to_s
278
+ end
279
+
280
+ def pack
281
+ #[@oid, self.len, @payload.to_s].pack('C2a')
282
+ fqdn_encode = @payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten
283
+ [6, fqdn_encode.size + 1, *fqdn_encode, 0].pack('C*')
284
+ end
285
+
286
+ def len
287
+ @payload.to_s.split('.').map{|label| [label.length, label.unpack('C*')]}.flatten.size + 1
288
+ end
289
+
290
+ def payload=(message)
291
+ @payload = message.to_s
292
+ end
293
+
294
+ def name
295
+ "TSP's Kerberos Realm Name Sub-Option"
296
+ end
297
+
298
+ def self.unpack(oid, len, payload)
299
+ raise ArgumentError, "Wrong #{Lib::DHCP::Option::NAME[oid]} Option length - #{len}" unless len > 0
300
+ self.new payload#.unpack('a*').first.to_s
301
+ end
302
+
303
+ end
304
+
305
+ class Option7 < Option
306
+ include Lib::DHCP::Option::Type::BOOL
307
+
308
+ def name
309
+ "TSP's Ticket Granting Server Utilization Sub-Option"
310
+ end
311
+ end
312
+
313
+ class Option8 < Option
314
+ def initialize(timer)
315
+ @oid = 8
316
+ @payload = timer.to_i
317
+ end
318
+
319
+ def len
320
+ 1
321
+ end
322
+
323
+ def pack
324
+ [8, 1, @payload.to_i].pack('C3')
325
+ end
326
+
327
+ def name
328
+ "TSP's Provisioning Timer Sub-Option"
329
+ end
330
+
331
+ def self.unpack(oid, len, payload)
332
+ raise ArgumentError, "OID mismatch for TSP's Provisioning Timer Sub-Option, require 8 but #{oid} given" unless oid == 8
333
+ raise ArgumentError, "Wrong TSP's Provisioning Timer Sub-Option length = #{len}" unless len == 1
334
+ self.new payload.unpack('C').first.to_i
335
+ end
336
+
337
+ end
338
+ end
339
+ end
340
+ end
341
+ end
@@ -0,0 +1,17 @@
1
+ #Author: Piotr Wojcieszonek
2
+ #e-mail: piotr@wojcieszonek.pl
3
+ # Copyright 23.03.2016 by Piotr Wojcieszonek
4
+
5
+
6
+
7
+ require_relative 'option'
8
+ require_relative 'type/raw'
9
+
10
+ module Lib
11
+ module DHCP
12
+ class Option123 < Option
13
+ #TODO Option123
14
+ include Lib::DHCP::Option::Type::Raw
15
+ end
16
+ end
17
+ end