pio 0.30.0 → 0.30.1

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 (442) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -0
  3. data/README.md +6 -49
  4. data/Rakefile +4 -4
  5. data/features/{arp.feature → arp/arp.feature} +14 -30
  6. data/features/arp/arp_reply.feature +69 -0
  7. data/features/arp/arp_request.feature +67 -0
  8. data/features/dhcp.feature +157 -162
  9. data/features/ethernet_header.feature +149 -0
  10. data/features/icmp/icmp.feature +47 -0
  11. data/features/icmp/icmp_reply.feature +93 -0
  12. data/features/icmp/icmp_request.feature +89 -0
  13. data/features/ipv4_header.feature +89 -0
  14. data/features/lldp.feature +5 -8
  15. data/features/open_flow/header.feature +13 -0
  16. data/features/open_flow/nicira_resubmit.feature +4 -22
  17. data/features/open_flow/nicira_resubmit_table.feature +6 -16
  18. data/features/open_flow10/aggregate_stats_reply.feature +5 -7
  19. data/features/open_flow10/aggregate_stats_request.feature +12 -14
  20. data/features/open_flow10/bad_request.feature +7 -24
  21. data/features/open_flow10/barrier_reply.feature +14 -25
  22. data/features/open_flow10/barrier_request.feature +12 -25
  23. data/features/open_flow10/description_stats_reply.feature +9 -7
  24. data/features/open_flow10/description_stats_request.feature +12 -25
  25. data/features/open_flow10/echo_reply.feature +14 -35
  26. data/features/open_flow10/echo_request.feature +16 -39
  27. data/features/open_flow10/enqueue.feature +3 -4
  28. data/features/open_flow10/exact_match.feature +5 -5
  29. data/features/open_flow10/features_reply.feature +28 -73
  30. data/features/open_flow10/features_request.feature +10 -28
  31. data/features/open_flow10/flow_mod.feature +4 -188
  32. data/features/open_flow10/flow_removed.feature +28 -30
  33. data/features/open_flow10/flow_stats_reply.feature +5 -89
  34. data/features/open_flow10/flow_stats_request.feature +12 -42
  35. data/features/open_flow10/hello.feature +10 -32
  36. data/features/open_flow10/hello_failed.feature +7 -57
  37. data/features/open_flow10/packet_in.feature +130 -49
  38. data/features/open_flow10/packet_out.feature +29 -18
  39. data/features/open_flow10/port_stats_request.feature +8 -29
  40. data/features/open_flow10/port_status.feature +22 -21
  41. data/features/open_flow10/queue_stats_request.feature +12 -30
  42. data/features/open_flow10/send_out_port.feature +17 -25
  43. data/features/open_flow10/set_destination_mac_address.feature +3 -4
  44. data/features/open_flow10/set_ip_destination_address.feature +3 -4
  45. data/features/open_flow10/set_source_ip_address.feature +3 -4
  46. data/features/open_flow10/set_source_mac_address.feature +3 -4
  47. data/features/open_flow10/set_tos.feature +3 -4
  48. data/features/open_flow10/set_transport_destination_port.feature +3 -4
  49. data/features/open_flow10/set_transport_source_port.feature +3 -4
  50. data/features/open_flow10/set_vlan_priority.feature +3 -4
  51. data/features/open_flow10/set_vlan_vid.feature +3 -4
  52. data/features/open_flow10/strip_vlan_header.feature +3 -4
  53. data/features/open_flow10/table_stats_request.feature +11 -13
  54. data/features/open_flow10/vendor_action.feature +4 -5
  55. data/features/open_flow13/apply_actions.feature +15 -18
  56. data/features/open_flow13/bad_request.feature +7 -13
  57. data/features/open_flow13/copy_ttl_inwards.feature +13 -0
  58. data/features/open_flow13/copy_ttl_outwards.feature +13 -0
  59. data/features/open_flow13/decrement_ip_ttl.feature +11 -0
  60. data/features/open_flow13/echo_reply.feature +16 -42
  61. data/features/open_flow13/echo_request.feature +16 -42
  62. data/features/open_flow13/features_reply.feature +4 -25
  63. data/features/open_flow13/features_request.feature +7 -36
  64. data/features/open_flow13/flow_mod.feature +16 -76
  65. data/features/open_flow13/goto_table.feature +18 -20
  66. data/features/open_flow13/hello.feature +7 -37
  67. data/features/open_flow13/hello_failed.feature +7 -30
  68. data/features/open_flow13/match.feature +239 -248
  69. data/features/open_flow13/meter.feature +18 -20
  70. data/features/open_flow13/nicira_conjunction.feature +15 -0
  71. data/features/open_flow13/nicira_reg_load.feature +27 -42
  72. data/features/open_flow13/nicira_reg_move.feature +41 -35
  73. data/features/open_flow13/nicira_send_out_port.feature +21 -13
  74. data/features/open_flow13/nicira_stack_pop.feature +26 -0
  75. data/features/open_flow13/nicira_stack_push.feature +26 -0
  76. data/features/open_flow13/packet_in.feature +7 -34
  77. data/features/open_flow13/packet_out.feature +7 -45
  78. data/features/open_flow13/send_out_port.feature +19 -28
  79. data/features/open_flow13/set_arp_operation.feature +4 -5
  80. data/features/open_flow13/set_arp_sender_hardware_address.feature +3 -4
  81. data/features/open_flow13/set_arp_sender_protocol_address.feature +3 -4
  82. data/features/open_flow13/set_destination_mac_address.feature +3 -4
  83. data/features/open_flow13/set_ip_ttl.feature +12 -0
  84. data/features/open_flow13/set_metadata.feature +3 -4
  85. data/features/open_flow13/set_source_mac_address.feature +3 -4
  86. data/features/open_flow13/stats_request.feature +4 -7
  87. data/features/open_flow13/write_metadata.feature +20 -22
  88. data/features/open_flow_read.feature +24 -5
  89. data/features/open_flow_version.feature +1 -1
  90. data/features/parser.feature +8 -9
  91. data/features/step_definitions/open_flow_steps.rb +11 -16
  92. data/features/step_definitions/packet_data_steps.rb +16 -32
  93. data/features/step_definitions/ruby_steps.rb +7 -0
  94. data/features/step_definitions/show_stats_steps.rb +3 -3
  95. data/features/support/env.rb +1 -0
  96. data/features/support/hooks.rb +2 -2
  97. data/features/udp.feature +26 -27
  98. data/lib/pio.rb +1 -1
  99. data/lib/pio/arp.rb +9 -6
  100. data/lib/pio/arp/format.rb +3 -7
  101. data/lib/pio/arp/message.rb +8 -4
  102. data/lib/pio/arp/reply.rb +9 -32
  103. data/lib/pio/arp/request.rb +9 -33
  104. data/lib/pio/class_inspector.rb +18 -0
  105. data/lib/pio/dhcp.rb +2 -2
  106. data/lib/pio/dhcp/frame.rb +4 -4
  107. data/lib/pio/dhcp/optional_tlv.rb +3 -3
  108. data/lib/pio/ethernet_frame.rb +20 -0
  109. data/lib/pio/ethernet_header.rb +35 -13
  110. data/lib/pio/icmp.rb +8 -5
  111. data/lib/pio/icmp/format.rb +19 -22
  112. data/lib/pio/icmp/message.rb +18 -4
  113. data/lib/pio/icmp/reply.rb +8 -34
  114. data/lib/pio/icmp/request.rb +8 -43
  115. data/lib/pio/instance_inspector.rb +14 -0
  116. data/lib/pio/ipv4_address.rb +11 -11
  117. data/lib/pio/ipv4_header.rb +24 -2
  118. data/lib/pio/lldp/frame.rb +2 -2
  119. data/lib/pio/lldp/optional_tlv.rb +2 -2
  120. data/lib/pio/mac.rb +7 -3
  121. data/lib/pio/message.rb +50 -0
  122. data/lib/pio/monkey_patch/bindata_record.rb +6 -0
  123. data/lib/pio/monkey_patch/bindata_string.rb +10 -0
  124. data/lib/pio/monkey_patch/integer/base_conversions.rb +1 -1
  125. data/lib/pio/monkey_patch/uint.rb +9 -0
  126. data/lib/pio/monkey_patch/uint/base_conversions.rb +14 -0
  127. data/lib/pio/open_flow.rb +38 -52
  128. data/lib/pio/open_flow/action.rb +8 -4
  129. data/lib/pio/open_flow/buffer_id.rb +19 -0
  130. data/lib/pio/open_flow/datapath_id.rb +3 -3
  131. data/lib/pio/open_flow/error_message.rb +32 -0
  132. data/lib/pio/open_flow/flags.rb +15 -6
  133. data/lib/pio/open_flow/flow_match.rb +10 -0
  134. data/lib/pio/open_flow/header.rb +26 -0
  135. data/lib/pio/open_flow/hello_failed_code.rb +1 -1
  136. data/lib/pio/open_flow/instruction.rb +10 -0
  137. data/lib/pio/open_flow/message.rb +49 -14
  138. data/lib/pio/open_flow/nicira_resubmit.rb +13 -11
  139. data/lib/pio/open_flow/nicira_resubmit_table.rb +17 -10
  140. data/lib/pio/open_flow/parser.rb +19 -0
  141. data/lib/pio/open_flow/port.rb +2 -2
  142. data/lib/pio/open_flow/transaction_id.rb +2 -2
  143. data/lib/pio/open_flow/version.rb +22 -0
  144. data/lib/pio/open_flow10/actions.rb +16 -16
  145. data/lib/pio/open_flow10/aggregate_stats/reply.rb +2 -1
  146. data/lib/pio/open_flow10/aggregate_stats/request.rb +1 -3
  147. data/lib/pio/open_flow10/barrier/reply.rb +1 -1
  148. data/lib/pio/open_flow10/barrier/request.rb +1 -1
  149. data/lib/pio/open_flow10/description_stats/reply.rb +1 -1
  150. data/lib/pio/open_flow10/description_stats/request.rb +1 -3
  151. data/lib/pio/open_flow10/echo/reply.rb +3 -3
  152. data/lib/pio/open_flow10/echo/request.rb +3 -3
  153. data/lib/pio/open_flow10/enqueue.rb +3 -3
  154. data/lib/pio/open_flow10/error.rb +3 -13
  155. data/lib/pio/open_flow10/error/bad_request.rb +5 -29
  156. data/lib/pio/open_flow10/error/bad_request/bad_request_code.rb +35 -0
  157. data/lib/pio/open_flow10/error/error_type10.rb +1 -1
  158. data/lib/pio/open_flow10/error/hello_failed.rb +6 -4
  159. data/lib/pio/open_flow10/exact_match.rb +12 -10
  160. data/lib/pio/open_flow10/features/reply.rb +16 -31
  161. data/lib/pio/open_flow10/features/request.rb +1 -4
  162. data/lib/pio/open_flow10/flow_mod.rb +8 -33
  163. data/lib/pio/open_flow10/flow_mod/command.rb +28 -0
  164. data/lib/pio/open_flow10/flow_removed.rb +2 -17
  165. data/lib/pio/open_flow10/flow_removed/reason.rb +22 -0
  166. data/lib/pio/open_flow10/flow_stats/reply.rb +3 -4
  167. data/lib/pio/open_flow10/flow_stats/request.rb +1 -3
  168. data/lib/pio/open_flow10/hello.rb +1 -4
  169. data/lib/pio/open_flow10/match.rb +13 -12
  170. data/lib/pio/open_flow10/packet_in.rb +32 -28
  171. data/lib/pio/open_flow10/packet_in/reason.rb +25 -0
  172. data/lib/pio/open_flow10/packet_out.rb +5 -6
  173. data/lib/pio/open_flow10/phy_port16.rb +36 -58
  174. data/lib/pio/open_flow10/port_stats/request.rb +1 -3
  175. data/lib/pio/open_flow10/port_status.rb +23 -30
  176. data/lib/pio/open_flow10/port_status/reason.rb +21 -0
  177. data/lib/pio/open_flow10/queue_stats/request.rb +1 -3
  178. data/lib/pio/open_flow10/send_out_port.rb +2 -2
  179. data/lib/pio/open_flow10/set_tos.rb +2 -2
  180. data/lib/pio/open_flow10/set_transport_port.rb +4 -2
  181. data/lib/pio/open_flow10/set_vlan_priority.rb +1 -1
  182. data/lib/pio/open_flow10/set_vlan_vid.rb +1 -1
  183. data/lib/pio/open_flow10/stats_reply.rb +7 -10
  184. data/lib/pio/open_flow10/stats_request.rb +16 -15
  185. data/lib/pio/open_flow10/stats_type.rb +1 -1
  186. data/lib/pio/open_flow10/table_stats/request.rb +1 -3
  187. data/lib/pio/open_flow10/vendor_action.rb +22 -20
  188. data/lib/pio/open_flow13.rb +7 -0
  189. data/lib/pio/open_flow13/actions.rb +34 -32
  190. data/lib/pio/open_flow13/apply.rb +25 -22
  191. data/lib/pio/open_flow13/copy_ttl_inwards.rb +15 -0
  192. data/lib/pio/open_flow13/copy_ttl_outwards.rb +15 -0
  193. data/lib/pio/open_flow13/decrement_ip_ttl.rb +15 -0
  194. data/lib/pio/open_flow13/echo/reply.rb +3 -3
  195. data/lib/pio/open_flow13/echo/request.rb +3 -3
  196. data/lib/pio/open_flow13/error.rb +7 -18
  197. data/lib/pio/open_flow13/error/bad_request.rb +4 -3
  198. data/lib/pio/open_flow13/error/error_type13.rb +1 -1
  199. data/lib/pio/open_flow13/error/hello_failed.rb +3 -2
  200. data/lib/pio/open_flow13/features/reply.rb +9 -16
  201. data/lib/pio/open_flow13/features/request.rb +1 -1
  202. data/lib/pio/open_flow13/flow_mod.rb +14 -19
  203. data/lib/pio/open_flow13/goto_table.rb +26 -24
  204. data/lib/pio/open_flow13/hello.rb +3 -4
  205. data/lib/pio/open_flow13/match.rb +173 -9
  206. data/lib/pio/open_flow13/meter.rb +23 -20
  207. data/lib/pio/open_flow13/nicira_conjunction.rb +26 -0
  208. data/lib/pio/open_flow13/nicira_reg_load.rb +44 -24
  209. data/lib/pio/open_flow13/nicira_reg_move.rb +77 -35
  210. data/lib/pio/open_flow13/nicira_send_out_port.rb +37 -21
  211. data/lib/pio/open_flow13/nicira_stack_pop.rb +49 -0
  212. data/lib/pio/open_flow13/nicira_stack_push.rb +49 -0
  213. data/lib/pio/open_flow13/packet_in.rb +11 -8
  214. data/lib/pio/open_flow13/packet_out.rb +9 -8
  215. data/lib/pio/open_flow13/set_ip_ttl.rb +16 -0
  216. data/lib/pio/open_flow13/stats_request.rb +2 -4
  217. data/lib/pio/open_flow13/write_metadata.rb +40 -38
  218. data/lib/pio/options.rb +8 -3
  219. data/lib/pio/parser.rb +7 -16
  220. data/lib/pio/ruby_dumper.rb +69 -0
  221. data/lib/pio/type/ether_type.rb +31 -0
  222. data/lib/pio/type/ip_address.rb +8 -0
  223. data/lib/pio/type/mac_address.rb +10 -0
  224. data/lib/pio/udp.rb +3 -3
  225. data/lib/pio/udp_header.rb +1 -1
  226. data/lib/pio/version.rb +1 -1
  227. data/pio.gemspec +5 -38
  228. data/spec/pio/arp/reply_spec.rb +0 -4
  229. data/spec/pio/arp/request_spec.rb +0 -4
  230. data/spec/pio/arp_spec.rb +0 -4
  231. data/spec/pio/icmp/reply_spec.rb +4 -8
  232. data/spec/pio/icmp/request_spec.rb +6 -10
  233. data/spec/pio/icmp_spec.rb +8 -12
  234. data/spec/pio/monkey_patch/integer_spec.rb +23 -0
  235. data/spec/pio/open_flow/nicira_resubmit_spec.rb +19 -0
  236. data/spec/pio/open_flow/nicira_resubmit_table_spec.rb +20 -0
  237. data/spec/pio/open_flow10/error/hello_failed_spec.rb +2 -2
  238. data/spec/pio/open_flow10/flow_mod_spec.rb +24 -24
  239. data/spec/pio/open_flow10/flow_stats_request_spec.rb +3 -3
  240. data/spec/pio/open_flow10/hello_spec.rb +0 -2
  241. data/spec/pio/open_flow10/match_spec.rb +38 -38
  242. data/spec/pio/open_flow10/packet_out_spec.rb +0 -349
  243. data/spec/pio/open_flow10/phy_port16_spec.rb +5 -5
  244. data/spec/pio/open_flow13/error/hello_failed_spec.rb +2 -2
  245. data/spec/pio/open_flow13/goto_table_spec.rb +2 -2
  246. data/spec/pio/open_flow13/hello_spec.rb +15 -15
  247. data/spec/pio/open_flow13/match_spec.rb +29 -29
  248. data/spec/pio/open_flow13/meter_spec.rb +2 -2
  249. data/spec/pio/open_flow13/nicira_reg_load_spec.rb +71 -0
  250. data/spec/pio/open_flow13/nicira_reg_move_spec.rb +40 -0
  251. data/spec/pio/open_flow13/nicira_send_out_port_spec.rb +29 -0
  252. data/spec/pio/open_flow13/write_metadata_spec.rb +3 -3
  253. data/spec/pio/open_flow_spec.rb +6 -6
  254. data/spec/spec_helper.rb +1 -1
  255. data/spec/support/shared_examples_for_openflow_messages.rb +5 -13
  256. metadata +191 -790
  257. data/LICENSE +0 -674
  258. data/bin/_guard-core +0 -16
  259. data/bin/byebug +0 -16
  260. data/bin/cc-tddium-post-worker +0 -16
  261. data/bin/cdiff +0 -16
  262. data/bin/coderay +0 -16
  263. data/bin/colortab +0 -16
  264. data/bin/coveralls +0 -16
  265. data/bin/cucumber +0 -16
  266. data/bin/decolor +0 -16
  267. data/bin/flay +0 -16
  268. data/bin/flog +0 -16
  269. data/bin/guard +0 -16
  270. data/bin/htmldiff +0 -16
  271. data/bin/inch +0 -16
  272. data/bin/ldiff +0 -16
  273. data/bin/listen +0 -16
  274. data/bin/minitar +0 -16
  275. data/bin/pry +0 -16
  276. data/bin/rake +0 -16
  277. data/bin/reek +0 -16
  278. data/bin/relish +0 -16
  279. data/bin/restclient +0 -16
  280. data/bin/rspec +0 -16
  281. data/bin/rubocop +0 -16
  282. data/bin/ruby-parse +0 -16
  283. data/bin/ruby-rewrite +0 -16
  284. data/bin/ruby_parse +0 -16
  285. data/bin/ruby_parse_extract_error +0 -16
  286. data/bin/sparkr +0 -16
  287. data/bin/term_display +0 -16
  288. data/bin/term_mandel +0 -16
  289. data/bin/terminal-notifier +0 -16
  290. data/bin/thor +0 -16
  291. data/bin/unparser +0 -16
  292. data/bin/yard +0 -16
  293. data/bin/yardoc +0 -16
  294. data/bin/yri +0 -16
  295. data/features/arp-storm.pcap +0 -0
  296. data/features/arp.pcap +0 -0
  297. data/features/dhcp.pcap +0 -0
  298. data/features/icmp.feature +0 -130
  299. data/features/icmp.pcap +0 -0
  300. data/features/icmpv6.pcap +0 -0
  301. data/features/lldp.detailed.pcap +0 -0
  302. data/features/lldp.minimal.pcap +0 -0
  303. data/features/open_flow10/aggregate_stats_reply.raw +0 -0
  304. data/features/open_flow10/aggregate_stats_request.raw +0 -0
  305. data/features/open_flow10/bad_request.raw +0 -0
  306. data/features/open_flow10/barrier_reply.raw +0 -0
  307. data/features/open_flow10/barrier_request.raw +0 -0
  308. data/features/open_flow10/description_stats_reply.raw +0 -0
  309. data/features/open_flow10/description_stats_request.raw +0 -0
  310. data/features/open_flow10/echo_reply.raw +0 -0
  311. data/features/open_flow10/echo_request.raw +0 -0
  312. data/features/open_flow10/error.raw +0 -0
  313. data/features/open_flow10/features_reply.raw +0 -0
  314. data/features/open_flow10/features_request.raw +0 -0
  315. data/features/open_flow10/flow_mod_add.raw +0 -0
  316. data/features/open_flow10/flow_mod_delete.raw +0 -0
  317. data/features/open_flow10/flow_mod_delete_strict.raw +0 -0
  318. data/features/open_flow10/flow_mod_modify.raw +0 -0
  319. data/features/open_flow10/flow_mod_modify_strict.raw +0 -0
  320. data/features/open_flow10/flow_removed.raw +0 -0
  321. data/features/open_flow10/flow_stats_reply.raw +0 -0
  322. data/features/open_flow10/flow_stats_request.raw +0 -0
  323. data/features/open_flow10/get_config_reply.raw +0 -0
  324. data/features/open_flow10/get_config_request.raw +0 -0
  325. data/features/open_flow10/hello.raw +0 -0
  326. data/features/open_flow10/hello_failed.raw +0 -0
  327. data/features/open_flow10/nx_flow_mod_add.raw +0 -0
  328. data/features/open_flow10/nx_flow_mod_delete.raw +0 -0
  329. data/features/open_flow10/nx_flow_mod_delete_strict.raw +0 -0
  330. data/features/open_flow10/nx_flow_mod_modify.raw +0 -0
  331. data/features/open_flow10/nx_flow_mod_modify_strict.raw +0 -0
  332. data/features/open_flow10/nxast_learn.raw +0 -0
  333. data/features/open_flow10/packet_in.raw +0 -0
  334. data/features/open_flow10/packet_in_arp_reply.raw +0 -0
  335. data/features/open_flow10/packet_in_arp_request.raw +0 -0
  336. data/features/open_flow10/packet_in_cbench.raw +0 -0
  337. data/features/open_flow10/packet_out.raw +0 -0
  338. data/features/open_flow10/port_mod.raw +0 -0
  339. data/features/open_flow10/port_stats_reply.raw +0 -0
  340. data/features/open_flow10/port_stats_request.raw +0 -0
  341. data/features/open_flow10/port_status.raw +0 -0
  342. data/features/open_flow10/queue_get_config_reply.raw +0 -0
  343. data/features/open_flow10/queue_get_config_request.raw +0 -0
  344. data/features/open_flow10/queue_stats_request.raw +0 -0
  345. data/features/open_flow10/set_config.raw +0 -0
  346. data/features/open_flow10/table_stats_reply.raw +0 -0
  347. data/features/open_flow10/table_stats_request.raw +0 -0
  348. data/features/open_flow10/vendor.raw +0 -0
  349. data/features/open_flow10/vendor_stats_request.raw +0 -0
  350. data/features/open_flow13/action_copy_ttl_in.raw +0 -0
  351. data/features/open_flow13/action_copy_ttl_out.raw +0 -0
  352. data/features/open_flow13/action_dec_mpls_ttl.raw +0 -0
  353. data/features/open_flow13/action_dec_nw_ttl.raw +0 -0
  354. data/features/open_flow13/action_group.raw +0 -0
  355. data/features/open_flow13/action_pop_mpls.raw +0 -0
  356. data/features/open_flow13/action_pop_pbb.raw +0 -0
  357. data/features/open_flow13/action_pop_vlan.raw +0 -0
  358. data/features/open_flow13/action_push_mpls.raw +0 -0
  359. data/features/open_flow13/action_push_pbb.raw +0 -0
  360. data/features/open_flow13/action_push_vlan.raw +0 -0
  361. data/features/open_flow13/action_set_field.raw +0 -0
  362. data/features/open_flow13/action_set_mpls_ttl.raw +0 -0
  363. data/features/open_flow13/action_set_nw_ttl.raw +0 -0
  364. data/features/open_flow13/action_set_queue.raw +0 -0
  365. data/features/open_flow13/apply_actions.raw +0 -0
  366. data/features/open_flow13/bad_request.raw +0 -0
  367. data/features/open_flow13/echo_reply_body.raw +0 -0
  368. data/features/open_flow13/echo_reply_no_body.raw +0 -0
  369. data/features/open_flow13/echo_request_body.raw +0 -0
  370. data/features/open_flow13/echo_request_no_body.raw +0 -0
  371. data/features/open_flow13/features_reply.raw +0 -0
  372. data/features/open_flow13/features_request.raw +0 -0
  373. data/features/open_flow13/flow_add_apply_no_match.raw +0 -0
  374. data/features/open_flow13/flow_mod_add_apply_no_match.raw +0 -0
  375. data/features/open_flow13/flow_mod_no_match_or_instructions.raw +0 -0
  376. data/features/open_flow13/hello_failed.raw +0 -0
  377. data/features/open_flow13/hello_no_version_bitmap.raw +0 -0
  378. data/features/open_flow13/hello_version_bitmap.raw +0 -0
  379. data/features/open_flow13/instruction_clear_actions.raw +0 -0
  380. data/features/open_flow13/instruction_goto_table.raw +0 -0
  381. data/features/open_flow13/instruction_meter.raw +0 -0
  382. data/features/open_flow13/instruction_write_actions.raw +0 -0
  383. data/features/open_flow13/instruction_write_metadata.raw +0 -0
  384. data/features/open_flow13/oxm_arp_op_field.raw +0 -0
  385. data/features/open_flow13/oxm_arp_sha_field.raw +0 -0
  386. data/features/open_flow13/oxm_arp_spa_field.raw +0 -0
  387. data/features/open_flow13/oxm_arp_tha_field.raw +0 -0
  388. data/features/open_flow13/oxm_arp_tpa_field.raw +0 -0
  389. data/features/open_flow13/oxm_ether_destination_field.raw +0 -0
  390. data/features/open_flow13/oxm_ether_source_field.raw +0 -0
  391. data/features/open_flow13/oxm_ether_type_field.raw +0 -0
  392. data/features/open_flow13/oxm_experimenter_stratos_basic_dot11.raw +0 -0
  393. data/features/open_flow13/oxm_icmpv4_code_field.raw +0 -0
  394. data/features/open_flow13/oxm_icmpv4_type_field.raw +0 -0
  395. data/features/open_flow13/oxm_in_phy_port_field.raw +0 -0
  396. data/features/open_flow13/oxm_in_port_field.raw +0 -0
  397. data/features/open_flow13/oxm_invalid_field.raw +0 -0
  398. data/features/open_flow13/oxm_ip_dscp_field.raw +0 -0
  399. data/features/open_flow13/oxm_ip_ecn_field.raw +0 -0
  400. data/features/open_flow13/oxm_ipv4_destination_field.raw +0 -0
  401. data/features/open_flow13/oxm_ipv4_source_field.raw +0 -0
  402. data/features/open_flow13/oxm_ipv6_destination_field.raw +0 -0
  403. data/features/open_flow13/oxm_ipv6_source_field.raw +0 -0
  404. data/features/open_flow13/oxm_masked_arp_sha_field.raw +0 -0
  405. data/features/open_flow13/oxm_masked_arp_spa_field.raw +0 -0
  406. data/features/open_flow13/oxm_masked_arp_tha_field.raw +0 -0
  407. data/features/open_flow13/oxm_masked_arp_tpa_field.raw +0 -0
  408. data/features/open_flow13/oxm_masked_ether_destination_field.raw +0 -0
  409. data/features/open_flow13/oxm_masked_ether_source_field.raw +0 -0
  410. data/features/open_flow13/oxm_masked_ipv4_destination_field.raw +0 -0
  411. data/features/open_flow13/oxm_masked_ipv4_source_field.raw +0 -0
  412. data/features/open_flow13/oxm_masked_ipv6_destination_field.raw +0 -0
  413. data/features/open_flow13/oxm_masked_ipv6_source_field.raw +0 -0
  414. data/features/open_flow13/oxm_masked_tunnel_id_field.raw +0 -0
  415. data/features/open_flow13/oxm_metadata_field.raw +0 -0
  416. data/features/open_flow13/oxm_metadata_masked_field.raw +0 -0
  417. data/features/open_flow13/oxm_no_fields.raw +0 -0
  418. data/features/open_flow13/oxm_sctp_destination_field.raw +0 -0
  419. data/features/open_flow13/oxm_sctp_source_field.raw +0 -0
  420. data/features/open_flow13/oxm_tcp_destination_field.raw +0 -0
  421. data/features/open_flow13/oxm_tcp_field.raw +0 -0
  422. data/features/open_flow13/oxm_tcp_source_field.raw +0 -0
  423. data/features/open_flow13/oxm_tunnel_id_field.raw +0 -0
  424. data/features/open_flow13/oxm_udp_destination_field.raw +0 -0
  425. data/features/open_flow13/oxm_udp_field.raw +0 -0
  426. data/features/open_flow13/oxm_udp_source_field.raw +0 -0
  427. data/features/open_flow13/oxm_vlan_pcp_field.raw +0 -0
  428. data/features/open_flow13/oxm_vlan_vid_field.raw +0 -0
  429. data/features/open_flow13/packet_in.raw +0 -0
  430. data/features/open_flow13/packet_out.raw +0 -0
  431. data/features/open_flow13/send_out_port.raw +0 -0
  432. data/features/open_flow13/table_stats_reply.raw +0 -0
  433. data/features/open_flow13/table_stats_request.raw +0 -0
  434. data/features/step_definitions/LICENSE +0 -675
  435. data/features/udp_no_payload.raw +0 -0
  436. data/features/udp_with_payload.raw +0 -0
  437. data/lib/pio/icmp/options.rb +0 -21
  438. data/lib/pio/open_flow/error.rb +0 -19
  439. data/lib/pio/open_flow/open_flow_header.rb +0 -31
  440. data/lib/pio/open_flow13/buffer_id.rb +0 -17
  441. data/spec/pio/arp/reply/options_spec.rb +0 -143
  442. data/spec/pio/arp/request/options_spec.rb +0 -113
@@ -1,18 +1,20 @@
1
1
  require 'pio/open_flow/nicira_action'
2
- require 'pio/open_flow10/port16'
3
2
 
4
3
  module Pio
5
- # NXAST_RESUBMIT action
6
- class NiciraResubmit < OpenFlow::NiciraAction
7
- nicira_action_header action_type: 0xffff,
8
- action_length: 16,
9
- subtype: 1
10
- port16 :in_port
11
- string :padding, length: 4
12
- hide :padding
4
+ module OpenFlow
5
+ # NXAST_RESUBMIT action
6
+ class NiciraResubmit < OpenFlow::NiciraAction
7
+ nicira_action_header action_type: 0xffff,
8
+ action_length: 16,
9
+ subtype: 1
10
+ uint16 :in_port
11
+ string :padding, length: 4
12
+ hide :padding
13
13
 
14
- def initialize(port_number)
15
- super(in_port: port_number)
14
+ def initialize(port_number)
15
+ super(in_port: port_number)
16
+ end
16
17
  end
17
18
  end
19
+ NiciraResubmit = OpenFlow::NiciraResubmit
18
20
  end
@@ -1,15 +1,22 @@
1
1
  require 'pio/open_flow/nicira_action'
2
- require 'pio/open_flow10/port16'
3
2
 
4
3
  module Pio
5
- # NXAST_RESUBMIT_TABLE action
6
- class NiciraResubmitTable < OpenFlow::NiciraAction
7
- nicira_action_header action_type: 0xffff,
8
- action_length: 16,
9
- subtype: 14
10
- port16 :in_port
11
- uint8 :table, initial_value: 0xff
12
- string :padding, length: 3
13
- hide :padding
4
+ module OpenFlow
5
+ # NXAST_RESUBMIT_TABLE action
6
+ class NiciraResubmitTable < OpenFlow::NiciraAction
7
+ nicira_action_header action_type: 0xffff,
8
+ action_length: 16,
9
+ subtype: 14
10
+ uint16 :in_port
11
+ uint8 :table, initial_value: 0xff
12
+ string :padding, length: 3
13
+ hide :padding
14
+
15
+ def initialize(options)
16
+ raise ':in_port option is a mandatory' unless options.key?(:in_port)
17
+ super options
18
+ end
19
+ end
14
20
  end
21
+ NiciraResubmitTable = OpenFlow::NiciraResubmitTable
15
22
  end
@@ -0,0 +1,19 @@
1
+ require 'pio/open_flow10'
2
+ require 'pio/open_flow13'
3
+
4
+ module Pio
5
+ module OpenFlow
6
+ # Collection class of OpenFlow message parser class
7
+ class Parser
8
+ def self.find_by_type!(type)
9
+ message_class = [Hello, Error, Echo::Request, Echo::Reply,
10
+ Features::Request, Features::Reply, PacketIn,
11
+ PacketOut, FlowMod, PortStatus, Stats::Request,
12
+ Stats::Reply, Barrier::Request, Barrier::Reply]
13
+ message_class.each_with_object({}) do |each, hash|
14
+ hash[each.type] = each
15
+ end.fetch(type)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -57,9 +57,9 @@ module Pio
57
57
  self.port = reserved_port_number(port)
58
58
  else
59
59
  port_num = port.to_i
60
- fail ArgumentError, 'The port should be > 0' if port_num < 1
60
+ raise ArgumentError, 'The port should be > 0' if port_num < 1
61
61
  if port_num >= max
62
- fail ArgumentError, "The port should be < #{max.to_hex}"
62
+ raise ArgumentError, "The port should be < #{max.to_hex}"
63
63
  end
64
64
  self.port = port_num
65
65
  end
@@ -11,8 +11,8 @@ module Pio
11
11
 
12
12
  def set(value)
13
13
  unless value.unsigned_32bit?
14
- fail(ArgumentError,
15
- 'Transaction ID should be an unsigned 32-bit integer.')
14
+ raise(ArgumentError,
15
+ 'Transaction ID should be an unsigned 32-bit integer.')
16
16
  end
17
17
  self.xid = value
18
18
  end
@@ -0,0 +1,22 @@
1
+ module Pio
2
+ module OpenFlow
3
+ # OpenFlow version
4
+ class Version < BinData::Primitive
5
+ VERSIONS = { 1 => :OpenFlow10, 4 => :OpenFlow13 }.freeze
6
+
7
+ uint8 :version
8
+
9
+ def get
10
+ VERSIONS.fetch(version)
11
+ end
12
+
13
+ def set(value)
14
+ self.version = VERSIONS.invert.fetch(value)
15
+ end
16
+
17
+ def to_bytes
18
+ version.to_hex
19
+ end
20
+ end
21
+ end
22
+ end
@@ -15,22 +15,22 @@ require 'pio/open_flow10/vendor_action'
15
15
  module Pio
16
16
  module OpenFlow
17
17
  # Actions list.
18
- class Actions < BinData::Primitive
18
+ class Actions10 < BinData::Primitive
19
19
  ACTION_CLASS = {
20
- 0 => Pio::OpenFlow10::SendOutPort,
21
- 1 => Pio::OpenFlow10::SetVlanVid,
22
- 2 => Pio::OpenFlow10::SetVlanPriority,
23
- 3 => Pio::OpenFlow10::StripVlanHeader,
24
- 4 => Pio::OpenFlow10::SetSourceMacAddress,
25
- 5 => Pio::OpenFlow10::SetDestinationMacAddress,
26
- 6 => Pio::OpenFlow10::SetSourceIpAddress,
27
- 7 => Pio::OpenFlow10::SetDestinationIpAddress,
28
- 8 => Pio::OpenFlow10::SetTos,
29
- 9 => Pio::OpenFlow10::SetTransportSourcePort,
30
- 10 => Pio::OpenFlow10::SetTransportDestinationPort,
31
- 11 => Pio::OpenFlow10::Enqueue,
32
- 0xffff => Pio::VendorAction
33
- }
20
+ 0 => OpenFlow10::SendOutPort,
21
+ 1 => OpenFlow10::SetVlanVid,
22
+ 2 => OpenFlow10::SetVlanPriority,
23
+ 3 => OpenFlow10::StripVlanHeader,
24
+ 4 => OpenFlow10::SetSourceMacAddress,
25
+ 5 => OpenFlow10::SetDestinationMacAddress,
26
+ 6 => OpenFlow10::SetSourceIpAddress,
27
+ 7 => OpenFlow10::SetDestinationIpAddress,
28
+ 8 => OpenFlow10::SetTos,
29
+ 9 => OpenFlow10::SetTransportSourcePort,
30
+ 10 => OpenFlow10::SetTransportDestinationPort,
31
+ 11 => OpenFlow10::Enqueue,
32
+ 0xffff => OpenFlow10::VendorAction
33
+ }.freeze
34
34
 
35
35
  mandatory_parameter :length
36
36
 
@@ -47,7 +47,7 @@ module Pio
47
47
  def get
48
48
  actions = []
49
49
  tmp = binary
50
- while tmp.length > 0
50
+ until tmp.empty?
51
51
  type = BinData::Uint16be.read(tmp)
52
52
  begin
53
53
  action = ACTION_CLASS.fetch(type).read(tmp)
@@ -1,3 +1,4 @@
1
+ require 'pio/open_flow/message'
1
2
  require 'pio/open_flow10/stats_type'
2
3
 
3
4
  module Pio
@@ -6,7 +7,7 @@ module Pio
6
7
  module AggregateStats
7
8
  # Aggregate Stats Reply message
8
9
  class Reply < OpenFlow::Message
9
- open_flow_header version: 1, message_type: 17, message_length: 32
10
+ open_flow_header version: 1, type: 17, length: 32
10
11
  stats_type :stats_type, value: -> { :aggregate }
11
12
  uint16 :flags
12
13
  uint64 :packet_count
@@ -9,9 +9,7 @@ module Pio
9
9
  module AggregateStats
10
10
  # OpenFlow 1.0 Aggregate Stats Request message
11
11
  class Request < OpenFlow::Message
12
- open_flow_header version: 1,
13
- message_type: 16,
14
- message_length: 56
12
+ open_flow_header version: 1, type: 16, length: 56
15
13
  stats_type :stats_type, value: -> { :aggregate }
16
14
  uint16 :flags
17
15
  match10 :match
@@ -6,7 +6,7 @@ module Pio
6
6
  module Barrier
7
7
  # OpenFlow 1.0 Barrier Request message
8
8
  class Reply < OpenFlow::Message
9
- open_flow_header version: 1, message_type: 19
9
+ open_flow_header version: 1, type: 19
10
10
  string :body, value: ''
11
11
  end
12
12
  end
@@ -6,7 +6,7 @@ module Pio
6
6
  module Barrier
7
7
  # OpenFlow 1.0 Barrier Request message
8
8
  class Request < OpenFlow::Message
9
- open_flow_header version: 1, message_type: 18
9
+ open_flow_header version: 1, type: 18
10
10
  string :body, value: ''
11
11
  end
12
12
  end
@@ -6,7 +6,7 @@ module Pio
6
6
  module DescriptionStats
7
7
  # OpenFlow 1.0 Description Stats Reply message
8
8
  class Reply < OpenFlow::Message
9
- open_flow_header version: 1, message_type: 17, message_length: 1068
9
+ open_flow_header version: 1, type: 17, length: 1068
10
10
  stats_type :stats_type, value: -> { :description }
11
11
  uint16 :flags
12
12
 
@@ -7,9 +7,7 @@ module Pio
7
7
  module DescriptionStats
8
8
  # OpenFlow 1.0 Description Stats Request message
9
9
  class Request < OpenFlow::Message
10
- open_flow_header version: 1,
11
- message_type: 16,
12
- message_length: 12
10
+ open_flow_header version: 1, type: 16, length: 12
13
11
  stats_type :stats_type, value: -> { :description }
14
12
  uint16 :flags
15
13
  string :body, value: ''
@@ -6,10 +6,10 @@ module Pio
6
6
  module Echo
7
7
  # OpenFlow 1.0 Echo Reply message.
8
8
  class Reply < OpenFlow::Message
9
- open_flow_header version: 1, message_type: 3
10
- string :body, read_length: -> { message_length - 8 }
9
+ open_flow_header version: 1, type: 3
10
+ string :body, read_length: -> { length - header_length }
11
11
 
12
- alias_method :user_data, :body
12
+ alias user_data body
13
13
  end
14
14
  end
15
15
  end
@@ -6,10 +6,10 @@ module Pio
6
6
  module Echo
7
7
  # OpenFlow 1.0 Echo Request message.
8
8
  class Request < OpenFlow::Message
9
- open_flow_header version: 1, message_type: 2
10
- string :body, read_length: -> { message_length - 8 }
9
+ open_flow_header version: 1, type: 2
10
+ string :body, read_length: -> { length - header_length }
11
11
 
12
- alias_method :user_data, :body
12
+ alias user_data body
13
13
  end
14
14
  end
15
15
  end
@@ -24,8 +24,8 @@ module Pio
24
24
  def validate_port(user_options)
25
25
  port = user_options.fetch(:port)
26
26
  if port.is_a?(Symbol) && port != :in_port
27
- fail(ArgumentError,
28
- ':port must be a valid physical port or :in_port')
27
+ raise(ArgumentError,
28
+ ':port must be a valid physical port or :in_port')
29
29
  end
30
30
  rescue KeyError
31
31
  raise ArgumentError, ':port is a mandatory option'
@@ -33,7 +33,7 @@ module Pio
33
33
 
34
34
  def validate_queue_id(user_options)
35
35
  unless user_options.fetch(:queue_id).unsigned_32bit?
36
- fail ArgumentError, ':queue_id must be an unsigned 32-bit integer'
36
+ raise ArgumentError, ':queue_id must be an unsigned 32-bit integer'
37
37
  end
38
38
  rescue KeyError
39
39
  raise ArgumentError, ':queue_id is a mandatory option'
@@ -1,28 +1,18 @@
1
+ require 'pio/open_flow/error_message'
1
2
  require 'pio/open_flow10/error/error_type10'
2
3
 
3
4
  module Pio
4
5
  module OpenFlow10
5
6
  # Error message parser
6
7
  module Error
8
+ extend OpenFlow::ErrorMessage
9
+
7
10
  # Error message body parser.
8
11
  class BodyParser < BinData::Record
9
12
  endian :big
10
13
  error_type10 :error_type
11
14
  uint16 :error_code
12
15
  end
13
-
14
- def self.read(binary)
15
- body = OpenFlowHeaderParser.read(binary).body
16
- klass = case BodyParser.read(body).snapshot.error_type
17
- when :hello_failed
18
- HelloFailed
19
- when :bad_request
20
- BadRequest
21
- else
22
- fail 'Unknown error message.'
23
- end
24
- klass.read binary
25
- end
26
16
  end
27
17
  end
28
18
  end
@@ -1,4 +1,6 @@
1
+ require 'pio/open_flow/error_message'
1
2
  require 'pio/open_flow/message'
3
+ require 'pio/open_flow10/error/bad_request/bad_request_code'
2
4
  require 'pio/open_flow10/error/error_type10'
3
5
 
4
6
  module Pio
@@ -6,38 +8,12 @@ module Pio
6
8
  module Error
7
9
  # Bad request error.
8
10
  class BadRequest < OpenFlow::Message
9
- # enum ofp_bad_request_code
10
- class BadRequestCode < BinData::Primitive
11
- ERROR_CODES = {
12
- bad_version: 0,
13
- bad_type: 1,
14
- bad_stats: 2,
15
- bad_vendor: 3,
16
- bad_subtype: 4,
17
- permissions_error: 5,
18
- bad_length: 6,
19
- buffer_empty: 7,
20
- buffer_unknown: 8
21
- }
22
-
23
- endian :big
24
- uint16 :error_code
25
-
26
- def get
27
- ERROR_CODES.invert.fetch(error_code)
28
- end
29
-
30
- def set(value)
31
- self.error_code = ERROR_CODES.fetch(value)
32
- end
33
- end
34
-
35
11
  open_flow_header version: 1,
36
- message_type: 1,
37
- message_length: -> { 12 + raw_data.length }
12
+ type: OpenFlow::ErrorMessage.type,
13
+ length: -> { header_length + 4 + raw_data.length }
38
14
  error_type10 :error_type, value: -> { :bad_request }
39
15
  bad_request_code :error_code
40
- rest :raw_data
16
+ string :raw_data, read_length: -> { length - header_length - 4 }
41
17
  end
42
18
  end
43
19
  end
@@ -0,0 +1,35 @@
1
+ require 'bindata'
2
+
3
+ module Pio
4
+ module OpenFlow10
5
+ module Error
6
+ class BadRequest < OpenFlow::Message
7
+ # enum ofp_bad_request_code
8
+ class BadRequestCode < BinData::Primitive
9
+ ERROR_CODES = {
10
+ bad_version: 0,
11
+ bad_type: 1,
12
+ bad_stats: 2,
13
+ bad_vendor: 3,
14
+ bad_subtype: 4,
15
+ permissions_error: 5,
16
+ bad_length: 6,
17
+ buffer_empty: 7,
18
+ buffer_unknown: 8
19
+ }.freeze
20
+
21
+ endian :big
22
+ uint16 :error_code
23
+
24
+ def get
25
+ ERROR_CODES.invert.fetch(error_code)
26
+ end
27
+
28
+ def set(value)
29
+ self.error_code = ERROR_CODES.fetch(value)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -10,7 +10,7 @@ module Pio
10
10
  flow_mod_failed: 3,
11
11
  port_mod_failed: 4,
12
12
  queue_operation_failed: 5
13
- }
13
+ }.freeze
14
14
 
15
15
  endian :big
16
16
  uint16 :error_type
@@ -1,3 +1,4 @@
1
+ require 'pio/open_flow/error_message'
1
2
  require 'pio/open_flow/hello_failed_code'
2
3
  require 'pio/open_flow/message'
3
4
  require 'pio/open_flow10/error/error_type10'
@@ -8,11 +9,12 @@ module Pio
8
9
  # Hello failed error.
9
10
  class HelloFailed < OpenFlow::Message
10
11
  open_flow_header version: 1,
11
- message_type: 1,
12
- message_length: -> { 12 + description.length }
13
- error_type10 :error_type
12
+ type: OpenFlow::ErrorMessage.type,
13
+ length: -> { header_length + 4 + description.length }
14
+
15
+ error_type10 :error_type, value: -> { :hello_failed }
14
16
  hello_failed_code :error_code
15
- rest :description
17
+ string :description, read_length: -> { length - header_length - 4 }
16
18
  end
17
19
  end
18
20
  end