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
@@ -0,0 +1,25 @@
1
+ module Pio
2
+ module OpenFlow10
3
+ class PacketIn < OpenFlow::Message
4
+ # Why is this packet being sent to the controller?
5
+ # (enum ofp_packet_in_reason)
6
+ class Reason < BinData::Primitive
7
+ REASONS = { no_match: 0, action: 1 }.freeze
8
+
9
+ uint8 :reason
10
+
11
+ def get
12
+ REASONS.invert.fetch(reason)
13
+ end
14
+
15
+ def set(value)
16
+ self.reason = REASONS.fetch(value)
17
+ end
18
+
19
+ def to_bytes
20
+ reason.to_hex
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,18 +1,17 @@
1
- require 'pio/open_flow'
1
+ require 'pio/open_flow/message'
2
2
  require 'pio/open_flow10/actions'
3
3
 
4
- # Base module.
5
4
  module Pio
6
5
  module OpenFlow10
7
6
  # OpenFlow 1.0 Packet-Out message
8
7
  class PacketOut < OpenFlow::Message
9
8
  open_flow_header version: 1,
10
- message_type: 13,
11
- message_length: -> { 16 + actions_len + raw_data.length }
9
+ type: 13,
10
+ length: -> { 16 + actions_length + raw_data.length }
12
11
  uint32 :buffer_id
13
12
  uint16 :in_port
14
- uint16 :actions_len, initial_value: -> { actions.binary.length }
15
- actions :actions, length: -> { actions_len }
13
+ uint16 :actions_length, initial_value: -> { actions.binary.length }
14
+ actions10 :actions, length: -> { actions_length }
16
15
  rest :raw_data
17
16
  end
18
17
  end
@@ -1,4 +1,5 @@
1
1
  require 'bindata'
2
+ require 'pio/open_flow/flags'
2
3
  require 'pio/type/mac_address'
3
4
 
4
5
  module Pio
@@ -7,84 +8,61 @@ module Pio
7
8
  class PhyPort16 < BinData::Record
8
9
  extend OpenFlow::Flags
9
10
 
10
- # enum ofp_port_config
11
- flags_32bit :port_config,
11
+ endian :big
12
+
13
+ uint16 :number
14
+ mac_address :mac_address
15
+ string :name, length: 16, trim_padding: true
16
+ flags_32bit :config,
12
17
  [:port_down,
13
18
  :no_stp,
14
- :no_recv,
15
- :no_recv_stp,
19
+ :no_receive,
20
+ :no_receive_stp,
16
21
  :no_flood,
17
- :no_fwd,
22
+ :no_forward,
18
23
  :no_packet_in]
19
-
20
- # enum ofp_port_state
21
- flags_32bit :port_state,
24
+ flags_32bit :state,
22
25
  link_down: 1 << 0,
23
26
  stp_listen: 0 << 8,
24
27
  stp_learn: 1 << 8,
25
28
  stp_forward: 2 << 8,
26
29
  stp_block: 3 << 8
27
30
 
28
- # enum ofp_port_features
29
- flags_32bit :port_feature,
30
- [:port_10mb_hd,
31
- :port_10mb_fd,
32
- :port_100mb_hd,
33
- :port_100mb_fd,
34
- :port_1gb_hd,
35
- :port_1gb_fd,
36
- :port_10gb_fd,
37
- :port_copper,
38
- :port_fiber,
39
- :port_autoneg,
40
- :port_pause,
41
- :port_pause_asym]
42
-
43
- endian :big
44
-
45
- uint16 :port_no
46
- mac_address :hardware_address
47
- string :name, length: 16, trim_padding: true
48
- port_config :config
49
- port_state :state
31
+ define_flags_32bit :port_feature,
32
+ [:port_10mb_hd,
33
+ :port_10mb_fd,
34
+ :port_100mb_hd,
35
+ :port_100mb_fd,
36
+ :port_1gb_hd,
37
+ :port_1gb_fd,
38
+ :port_10gb_fd,
39
+ :port_copper,
40
+ :port_fiber,
41
+ :port_autoneg,
42
+ :port_pause,
43
+ :port_pause_asym]
50
44
  port_feature :curr
51
45
  port_feature :advertised
52
46
  port_feature :supported
53
47
  port_feature :peer
54
48
 
55
- # rubocop:disable MethodLength
56
- def snapshot
57
- super.tap do |ss|
58
- def ss.datapath_id
59
- @datapath_id || fail
60
- end
61
-
62
- def ss.dpid
63
- @datapath_id || fail
64
- end
49
+ cattr_reader(:length) { 48 }
65
50
 
66
- def ss.number
67
- port_no
68
- end
51
+ attr_accessor :datapath_id
52
+ alias dpid datapath_id
53
+ alias dpid= datapath_id=
69
54
 
70
- def ss.mac_address
71
- hardware_address
72
- end
73
-
74
- def ss.up?
75
- !down?
76
- end
55
+ def up?
56
+ !down?
57
+ end
77
58
 
78
- def ss.down?
79
- config.include?(:port_down) || state.include?(:link_down)
80
- end
59
+ def down?
60
+ config.include?(:port_down) || state.include?(:link_down)
61
+ end
81
62
 
82
- def ss.local?
83
- port_no == OpenFlow10::Port16.reserved_port_number(:local)
84
- end
85
- end
63
+ def local?
64
+ number == OpenFlow10::Port16.reserved_port_number(:local)
86
65
  end
87
- # rubocop:enable MethodLength
88
66
  end
89
67
  end
90
68
  end
@@ -6,9 +6,7 @@ module Pio
6
6
  class PortStats
7
7
  # Port Stats Request message
8
8
  class Request < OpenFlow::Message
9
- open_flow_header version: 1,
10
- message_type: 16,
11
- message_length: 20
9
+ open_flow_header version: 1, type: 16, length: 20
12
10
 
13
11
  stats_type :stats_type, value: -> { :port }
14
12
  uint16 :flags
@@ -1,43 +1,36 @@
1
+ require 'active_support/core_ext/module/delegation'
1
2
  require 'pio/open_flow/message'
3
+ require 'pio/open_flow10/phy_port16'
4
+ require 'pio/open_flow10/port_status/reason'
2
5
 
3
6
  module Pio
4
7
  module OpenFlow10
5
8
  # OpenFlow 1.0 Port Status message
6
9
  class PortStatus < OpenFlow::Message
7
- # What changed about the physical port
8
- class Reason < BinData::Primitive
9
- REASONS = { add: 0, delete: 1, modify: 2 }
10
+ open_flow_header version: 1, type: 12,
11
+ length: -> { header_length + 8 + PhyPort16.length }
10
12
 
11
- uint8 :reason
12
-
13
- def get
14
- REASONS.invert.fetch(reason)
15
- end
16
-
17
- def set(value)
18
- self.reason = REASONS.fetch(value)
19
- end
20
- end
21
-
22
- open_flow_header version: 1,
23
- message_type: 12,
24
- message_length: 10
25
13
  reason :reason
26
14
  uint56 :padding
27
15
  hide :padding
28
- phy_port16 :desc
29
-
30
- def reason
31
- @format.reason.to_sym
32
- end
33
-
34
- attr_writer :datapath_id
35
-
36
- def desc
37
- @desc ||= @format.desc.snapshot
38
- @desc.instance_variable_set :@datapath_id, @datapath_id
39
- @desc
40
- end
16
+ phy_port16 :description
17
+
18
+ attr_accessor :datapath_id
19
+ alias dpid datapath_id
20
+ alias dpid= datapath_id=
21
+
22
+ delegate :number, to: :description
23
+ delegate :mac_address, to: :description
24
+ delegate :name, to: :description
25
+ delegate :config, to: :description
26
+ delegate :state, to: :description
27
+ delegate :curr, to: :description
28
+ delegate :advertised, to: :description
29
+ delegate :supported, to: :description
30
+ delegate :peer, to: :description
31
+ delegate :up?, to: :description
32
+ delegate :down?, to: :description
33
+ delegate :local?, to: :description
41
34
  end
42
35
  end
43
36
  end
@@ -0,0 +1,21 @@
1
+ module Pio
2
+ module OpenFlow10
3
+ # OpenFlow 1.0 Port Status message
4
+ class PortStatus < OpenFlow::Message
5
+ # What changed about the physical port
6
+ class Reason < BinData::Primitive
7
+ REASONS = { add: 0, delete: 1, modify: 2 }.freeze
8
+
9
+ uint8 :reason
10
+
11
+ def get
12
+ REASONS.invert.fetch(reason)
13
+ end
14
+
15
+ def set(value)
16
+ self.reason = REASONS.fetch(value)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -6,9 +6,7 @@ module Pio
6
6
  class QueueStats
7
7
  # Queue Stats Request message
8
8
  class Request < OpenFlow::Message
9
- open_flow_header version: 1,
10
- message_type: 16,
11
- message_length: 20
9
+ open_flow_header version: 1, type: 16, length: 20
12
10
 
13
11
  stats_type :stats_type, value: -> { :queue }
14
12
  uint16 :flags
@@ -21,8 +21,8 @@ module Pio
21
21
  end
22
22
  max_length = options[:max_length]
23
23
  if max_length && !max_length.unsigned_16bit?
24
- fail(ArgumentError,
25
- 'The max_length should be an unsigned 16bit integer.')
24
+ raise(ArgumentError,
25
+ 'The max_length should be an unsigned 16bit integer.')
26
26
  end
27
27
  super(options)
28
28
  end
@@ -14,8 +14,8 @@ module Pio
14
14
  # tos (IP ToS) value consists of 8 bits, of which only the
15
15
  # 6 high-order bits belong to DSCP, the 2 low-order bits must
16
16
  # be zero.
17
- unless type_of_service.unsigned_8bit? && type_of_service % 4 == 0
18
- fail ArgumentError, 'Invalid type_of_service (ToS) value.'
17
+ unless type_of_service.unsigned_8bit? && (type_of_service % 4).zero?
18
+ raise ArgumentError, 'Invalid type_of_service (ToS) value.'
19
19
  end
20
20
  super(type_of_service: type_of_service)
21
21
  end
@@ -13,7 +13,8 @@ module Pio
13
13
  def initialize(number)
14
14
  port = number.to_i
15
15
  unless port.unsigned_16bit?
16
- fail ArgumentError, 'TCP/UDP port must be an unsigned 16-bit integer.'
16
+ raise ArgumentError,
17
+ 'TCP/UDP port must be an unsigned 16-bit integer.'
17
18
  end
18
19
  super(port: port)
19
20
  rescue NoMethodError
@@ -31,7 +32,8 @@ module Pio
31
32
  def initialize(number)
32
33
  port = number.to_i
33
34
  unless port.unsigned_16bit?
34
- fail ArgumentError, 'TCP/UDP port must be an unsigned 16-bit integer.'
35
+ raise ArgumentError,
36
+ 'TCP/UDP port must be an unsigned 16-bit integer.'
35
37
  end
36
38
  super(port: port)
37
39
  rescue NoMethodError
@@ -12,7 +12,7 @@ module Pio
12
12
  def initialize(number)
13
13
  priority = number.to_i
14
14
  if priority < 0 || priority > 7
15
- fail ArgumentError, 'VLAN priority must be between 0 and 7 inclusive'
15
+ raise ArgumentError, 'VLAN priority must be between 0 and 7 inclusive'
16
16
  end
17
17
  super(vlan_priority: priority)
18
18
  rescue NoMethodError
@@ -12,7 +12,7 @@ module Pio
12
12
  def initialize(number)
13
13
  vlan_id = number.to_i
14
14
  unless vlan_id >= 1 && vlan_id <= 4095
15
- fail ArgumentError, 'VLAN ID must be between 1 and 4095 inclusive'
15
+ raise ArgumentError, 'VLAN ID must be between 1 and 4095 inclusive'
16
16
  end
17
17
  super(vlan_id: vlan_id)
18
18
  rescue NoMethodError
@@ -7,21 +7,18 @@ module Pio
7
7
  module OpenFlow10
8
8
  class Stats
9
9
  # Stats reply parser.
10
- class Reply
11
- TYPES = {
10
+ class Reply < OpenFlow::Message
11
+ open_flow_header version: 1, type: 17, length: 10
12
+ stats_type :stats_type
13
+
14
+ TYPE = {
12
15
  description: OpenFlow10::DescriptionStats::Reply,
13
16
  flow: OpenFlow10::FlowStats::Reply,
14
17
  aggregate: OpenFlow10::AggregateStats::Reply
15
- }
16
-
17
- # Stats reply format.
18
- class Format < OpenFlow::Message
19
- open_flow_header version: 1, message_type: 17, message_length: 10
20
- stats_type :stats_type
21
- end
18
+ }.freeze
22
19
 
23
20
  def self.read(binary)
24
- TYPES.fetch(Format.read(binary).stats_type.to_sym).read(binary)
21
+ TYPE.fetch(Format.read(binary).stats_type.to_sym).read(binary)
25
22
  rescue KeyError
26
23
  raise "Unknown stats type: #{stats_type}"
27
24
  end
@@ -1,28 +1,29 @@
1
- require 'pio/open_flow10/table_stats/request'
2
- require 'pio/open_flow10/port_stats/request'
3
1
  require 'pio/open_flow/message'
2
+ require 'pio/open_flow10/aggregate_stats/request'
3
+ require 'pio/open_flow10/flow_stats/request'
4
+ require 'pio/open_flow10/port_stats/request'
5
+ require 'pio/open_flow10/queue_stats/request'
6
+ require 'pio/open_flow10/table_stats/request'
4
7
 
5
8
  module Pio
6
9
  module OpenFlow10
7
10
  class Stats
8
11
  # Stats request parser.
9
- class Request
10
- TYPES = {
12
+ class Request < OpenFlow::Message
13
+ open_flow_header version: 1, type: 16, length: 10
14
+ stats_type :stats_type
15
+
16
+ TYPE = {
17
+ aggregate: OpenFlow10::AggregateStats::Request,
11
18
  description: OpenFlow10::DescriptionStats::Request,
12
19
  flow: OpenFlow10::FlowStats::Request,
13
- aggregate: OpenFlow10::AggregateStats::Request,
14
- table: OpenFlow10::TableStats::Request,
15
- port: OpenFlow10::PortStats::Request
16
- }
17
-
18
- # Stats request format.
19
- class Format < OpenFlow::Message
20
- open_flow_header version: 1, message_type: 16, message_length: 10
21
- stats_type :stats_type
22
- end
20
+ port: OpenFlow10::PortStats::Request,
21
+ queue: OpenFlow10::QueueStats::Request,
22
+ table: OpenFlow10::TableStats::Request
23
+ }.freeze
23
24
 
24
25
  def self.read(binary)
25
- TYPES.fetch(Format.read(binary).stats_type.to_sym).read(binary)
26
+ TYPE.fetch(Format.read(binary).stats_type.to_sym).read(binary)
26
27
  rescue KeyError
27
28
  raise "Unknown stats type: #{stats_type}"
28
29
  end
@@ -10,7 +10,7 @@ module Pio
10
10
  port: 4,
11
11
  queue: 5,
12
12
  vendor: 0xffff
13
- }
13
+ }.freeze
14
14
 
15
15
  endian :big
16
16
  uint16 :command
@@ -7,9 +7,7 @@ module Pio
7
7
  module TableStats
8
8
  # OpenFlow 1.0 Table 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: -> { :table }
14
12
  uint16 :flags
15
13
  string :body, value: ''