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,5 +1,5 @@
1
1
  require 'pio/open_flow'
2
- require 'pio/open_flow13/buffer_id'
2
+ require 'pio/open_flow/buffer_id'
3
3
  require 'pio/open_flow13/match'
4
4
 
5
5
  module Pio
@@ -14,7 +14,7 @@ module Pio
14
14
  modify_strict: 2,
15
15
  delete: 3,
16
16
  delete_strict: 4
17
- }
17
+ }.freeze
18
18
 
19
19
  uint8 :command
20
20
 
@@ -36,7 +36,7 @@ module Pio
36
36
  uint32 :out_port, initial_value: ANY
37
37
 
38
38
  def get
39
- (out_port == ANY) ? :any : out_port
39
+ out_port == ANY ? :any : out_port
40
40
  end
41
41
 
42
42
  def set(value)
@@ -53,7 +53,7 @@ module Pio
53
53
  uint32 :out_group, initial_value: ANY
54
54
 
55
55
  def get
56
- (out_group == ANY) ? :any : out_group
56
+ out_group == ANY ? :any : out_group
57
57
  end
58
58
 
59
59
  def set(value)
@@ -76,7 +76,7 @@ module Pio
76
76
  def get
77
77
  list = []
78
78
  tmp = instructions
79
- while tmp.length > 0
79
+ until tmp.empty?
80
80
  instruction_type = BinData::Uint16be.read(tmp)
81
81
  instruction = case instruction_type
82
82
  when 1
@@ -88,7 +88,7 @@ module Pio
88
88
  when 6
89
89
  Meter.read(tmp)
90
90
  else
91
- fail "Unsupported instruction #{instruction_type}"
91
+ raise "Unsupported instruction #{instruction_type}"
92
92
  end
93
93
  tmp = tmp[instruction.instruction_length..-1]
94
94
  list << instruction
@@ -102,18 +102,8 @@ module Pio
102
102
  end
103
103
  end
104
104
 
105
- extend OpenFlow::Flags
106
-
107
- flags_16bit :flags,
108
- [:send_flow_rem,
109
- :check_overwrap,
110
- :reset_counts,
111
- :no_packet_counts,
112
- :no_byte_counts]
113
-
114
- open_flow_header(version: 4,
115
- message_type: 14,
116
- message_length: lambda do
105
+ open_flow_header(version: 4, type: 14,
106
+ length: lambda do
117
107
  48 + match.length + instructions.length
118
108
  end)
119
109
  uint64 :cookie
@@ -126,7 +116,12 @@ module Pio
126
116
  buffer_id :buffer_id
127
117
  out_port :out_port
128
118
  out_group :out_group
129
- flags :flags
119
+ flags_16bit :flags,
120
+ [:send_flow_rem,
121
+ :check_overwrap,
122
+ :reset_counts,
123
+ :no_packet_counts,
124
+ :no_byte_counts]
130
125
  string :padding, length: 2
131
126
  hide :padding
132
127
  oxm :match
@@ -1,37 +1,39 @@
1
1
  require 'bindata'
2
2
  require 'forwardable'
3
+ require 'pio/open_flow/instruction'
3
4
 
4
- # Base module.
5
5
  module Pio
6
- # Resubmit to the table_id
7
- class GotoTable
8
- # OpenFlow 1.3.4 OFPIT_GOTO_TABLE instruction format
9
- class Format < BinData::Record
10
- endian :big
6
+ module OpenFlow13
7
+ # Resubmit to the table_id
8
+ class GotoTable < OpenFlow::Instruction
9
+ # OpenFlow 1.3.4 OFPIT_GOTO_TABLE instruction format
10
+ class Format < BinData::Record
11
+ endian :big
11
12
 
12
- uint16 :instruction_type, value: 1
13
- uint16 :instruction_length, value: 8
14
- uint8 :table_id
15
- bit24 :padding
16
- hide :padding
17
- end
13
+ uint16 :instruction_type, value: 1
14
+ uint16 :instruction_length, value: 8
15
+ uint8 :table_id
16
+ bit24 :padding
17
+ hide :padding
18
+ end
18
19
 
19
- def self.read(raw_data)
20
- allocate.tap do |goto_table|
21
- goto_table.instance_variable_set :@format, Format.read(raw_data)
20
+ def self.read(raw_data)
21
+ allocate.tap do |goto_table|
22
+ goto_table.instance_variable_set :@format, Format.read(raw_data)
23
+ end
22
24
  end
23
- end
24
25
 
25
- extend Forwardable
26
+ extend Forwardable
26
27
 
27
- def_delegators :@format, :instruction_type
28
- def_delegators :@format, :instruction_length
29
- def_delegators :@format, :table_id
30
- def_delegators :@format, :to_binary_s
31
- def_delegator :@format, :to_binary_s, :to_binary
28
+ def_delegators :@format, :instruction_type
29
+ def_delegators :@format, :instruction_length
30
+ def_delegators :@format, :table_id
31
+ def_delegators :@format, :to_binary_s
32
+ def_delegator :@format, :to_binary_s, :to_binary
32
33
 
33
- def initialize(table_id)
34
- @format = Format.new(table_id: table_id)
34
+ def initialize(table_id)
35
+ @format = Format.new(table_id: table_id)
36
+ end
35
37
  end
36
38
  end
37
39
  end
@@ -41,8 +41,8 @@ module Pio
41
41
  end
42
42
  end
43
43
 
44
- open_flow_header version: 4, message_type: 0
45
- body :body
44
+ open_flow_header version: 4, type: 0
45
+ body :body, read_length: -> { length - header_length }
46
46
 
47
47
  def elements
48
48
  body.elements
@@ -68,11 +68,10 @@ module Pio
68
68
  end
69
69
 
70
70
  def initialize(user_options = {})
71
- validate_user_options user_options
72
71
  body_options = { elements: [{ element_type: VERSION_BITMAP,
73
72
  element_length: 8,
74
73
  element_value: 0b10000 }] }
75
- @format = Format.new(user_options.merge(body: body_options))
74
+ super user_options.merge(body: body_options)
76
75
  end
77
76
  end
78
77
  end
@@ -1,4 +1,5 @@
1
1
  require 'bindata'
2
+ require 'pio/open_flow/flow_match'
2
3
  require 'pio/type/ip_address'
3
4
  require 'pio/type/ipv6_address'
4
5
  require 'pio/type/mac_address'
@@ -11,7 +12,7 @@ module Pio
11
12
  MATCH_TYPE_OXM = 1
12
13
 
13
14
  # OpenFlow eXtensible Match (OXM)
14
- class Match
15
+ class Match < OpenFlow::FlowMatch
15
16
  # OFPXMC_NXM_1 TLV value
16
17
  class NiciraMatchExtensionValue < BinData::Record
17
18
  OXM_CLASS = 0x1
@@ -22,6 +23,11 @@ module Pio
22
23
  OXM_CLASS = 0x8000
23
24
  end
24
25
 
26
+ # OFPXMC_PACKET_REGS TLV value
27
+ class PacketRegistersValue < BinData::Record
28
+ OXM_CLASS = 0x8001
29
+ end
30
+
25
31
  # OFPXMC_EXPERIMENTER TLV value
26
32
  class ExperimenterValue < BinData::Record
27
33
  OXM_CLASS = 0xFFFF
@@ -759,6 +765,105 @@ module Pio
759
765
  end
760
766
  end
761
767
 
768
+ # OXM_PACKET_REG0 match field
769
+ class PacketReg0 < PacketRegistersValue
770
+ OXM_FIELD = 0
771
+
772
+ endian :big
773
+
774
+ uint64 :packet_reg0
775
+
776
+ def length
777
+ 8
778
+ end
779
+ end
780
+
781
+ # Masked OXM_PACKET_REG0 match field
782
+ class MaskedPacketReg0 < PacketRegistersValue
783
+ endian :big
784
+
785
+ uint64 :packet_reg0
786
+ uint64 :packet_reg0_mask
787
+
788
+ def length
789
+ 16
790
+ end
791
+ end
792
+ # OXM_PACKET_REG1 match field
793
+ class PacketReg1 < PacketRegistersValue
794
+ OXM_FIELD = 1
795
+
796
+ endian :big
797
+
798
+ uint64 :packet_reg1
799
+
800
+ def length
801
+ 8
802
+ end
803
+ end
804
+
805
+ # Masked OXM_PACKET_REG1 match field
806
+ class MaskedPacketReg1 < PacketRegistersValue
807
+ endian :big
808
+
809
+ uint64 :packet_reg1
810
+ uint64 :packet_reg1_mask
811
+
812
+ def length
813
+ 16
814
+ end
815
+ end
816
+
817
+ # OXM_PACKET_REG2 match field
818
+ class PacketReg2 < PacketRegistersValue
819
+ OXM_FIELD = 2
820
+
821
+ endian :big
822
+
823
+ uint64 :packet_reg2
824
+
825
+ def length
826
+ 8
827
+ end
828
+ end
829
+
830
+ # Masked OXM_PACKET_REG2 match field
831
+ class MaskedPacketReg2 < PacketRegistersValue
832
+ endian :big
833
+
834
+ uint64 :packet_reg2
835
+ uint64 :packet_reg2_mask
836
+
837
+ def length
838
+ 16
839
+ end
840
+ end
841
+
842
+ # OXM_PACKET_REG3 match field
843
+ class PacketReg3 < PacketRegistersValue
844
+ OXM_FIELD = 3
845
+
846
+ endian :big
847
+
848
+ uint64 :packet_reg3
849
+
850
+ def length
851
+ 8
852
+ end
853
+ end
854
+
855
+ # Masked OXM_PACKET_REG3 match field
856
+ class MaskedPacketReg3 < PacketRegistersValue
857
+ endian :big
858
+
859
+ uint64 :packet_reg3
860
+ uint64 :packet_reg3_mask
861
+
862
+ def length
863
+ 16
864
+ end
865
+ end
866
+
762
867
  # OXM format
763
868
  class Oxm < BinData::Record
764
869
  # Experimenter part, data will use oxm_length
@@ -840,7 +945,7 @@ module Pio
840
945
  when Reg7::OXM_FIELD
841
946
  masked? ? MaskedReg7 : Reg7
842
947
  else
843
- fail "Unknown OXM field value: #{oxm_field}"
948
+ raise "Unknown OXM field value: #{oxm_field}"
844
949
  end
845
950
  end
846
951
  # rubocop:enable AbcSize
@@ -998,7 +1103,7 @@ module Pio
998
1103
  when TunnelId::OXM_FIELD
999
1104
  masked? ? MaskedTunnelId : TunnelId
1000
1105
  else
1001
- fail "Unknown OXM field value: #{oxm_field}"
1106
+ raise "Unknown OXM field value: #{oxm_field}"
1002
1107
  end
1003
1108
  end
1004
1109
  # rubocop:enable MethodLength
@@ -1008,6 +1113,58 @@ module Pio
1008
1113
  end
1009
1114
  # rubocop:enable MethodLength
1010
1115
 
1116
+ # Packet Register match field.
1117
+ class PacketRegisters < BinData::Record
1118
+ endian :big
1119
+
1120
+ bit7 :oxm_field
1121
+ bit1 :oxm_hasmask
1122
+ uint8 :oxm_length, value: -> { tlv_value.length }
1123
+ choice :tlv_value, selection: :choose_tlv_value do
1124
+ packet_reg0 PacketReg0
1125
+ masked_packet_reg0 MaskedPacketReg0
1126
+ packet_reg1 PacketReg1
1127
+ masked_packet_reg1 MaskedPacketReg1
1128
+ packet_reg2 PacketReg2
1129
+ masked_packet_reg2 MaskedPacketReg2
1130
+ packet_reg3 PacketReg3
1131
+ masked_packet_reg3 MaskedPacketReg3
1132
+ end
1133
+
1134
+ def length
1135
+ tlv_value.length + 2
1136
+ end
1137
+
1138
+ def masked?
1139
+ oxm_hasmask == 1
1140
+ end
1141
+
1142
+ def method_missing(method, *args, &block)
1143
+ tlv_value.__send__ method, *args, &block
1144
+ end
1145
+
1146
+ private
1147
+
1148
+ # rubocop:disable CyclomaticComplexity
1149
+ # rubocop:disable MethodLength
1150
+ def choose_tlv_value
1151
+ case oxm_field
1152
+ when PacketReg0::OXM_FIELD
1153
+ masked? ? MaskedPacketReg0 : PacketReg0
1154
+ when PacketReg1::OXM_FIELD
1155
+ masked? ? MaskedPacketReg1 : PacketReg1
1156
+ when PacketReg2::OXM_FIELD
1157
+ masked? ? MaskedPacketReg2 : PacketReg2
1158
+ when PacketReg3::OXM_FIELD
1159
+ masked? ? MaskedPacketReg3 : PacketReg3
1160
+ else
1161
+ raise "Unknown OXM field value: #{oxm_field}"
1162
+ end
1163
+ end
1164
+ # rubocop:enable CyclomaticComplexity
1165
+ # rubocop:enable MethodLength
1166
+ end
1167
+
1011
1168
  # OXM match field.
1012
1169
  class MatchField < BinData::Record
1013
1170
  endian :big
@@ -1017,6 +1174,7 @@ module Pio
1017
1174
  NiciraMatchExtension NiciraMatchExtensionValue::OXM_CLASS
1018
1175
  OpenflowBasic OpenFlowBasicValue::OXM_CLASS
1019
1176
  Experimenter ExperimenterValue::OXM_CLASS
1177
+ PacketRegisters PacketRegistersValue::OXM_CLASS
1020
1178
  end
1021
1179
 
1022
1180
  def oxm_field
@@ -1041,8 +1199,10 @@ module Pio
1041
1199
  return class_payload.tlv_value.__send__(method, *args, &block)
1042
1200
  when ExperimenterValue::OXM_CLASS
1043
1201
  return class_payload.__send__(method, *args, &block)
1202
+ when PacketRegistersValue::OXM_CLASS
1203
+ return class_payload.__send__(method, *args, &block)
1044
1204
  else
1045
- fail NoMethodError, method.to_s
1205
+ raise NoMethodError, method.to_s
1046
1206
  end
1047
1207
  end
1048
1208
  end
@@ -1062,18 +1222,21 @@ module Pio
1062
1222
  match_length + padding_length
1063
1223
  end
1064
1224
 
1225
+ # rubocop:disable AbcSize
1065
1226
  # rubocop:disable Next
1066
1227
  # rubocop:disable LineLength
1067
1228
  def method_missing(method, *args, &block)
1068
1229
  match_fields.each do |each|
1069
- if each.oxm_class == OpenFlowBasicValue::OXM_CLASS || each.oxm_class == NiciraMatchExtensionValue::OXM_CLASS
1230
+ if each.oxm_class == OpenFlowBasicValue::OXM_CLASS || each.oxm_class == NiciraMatchExtensionValue::OXM_CLASS || each.oxm_class == PacketRegistersValue::OXM_CLASS
1070
1231
  next unless each.class_payload.tlv_value.respond_to?(method)
1071
1232
  return each.class_payload.tlv_value.__send__(
1072
- method, *args, &block)
1233
+ method, *args, &block
1234
+ )
1073
1235
  end
1074
1236
  end
1075
- fail NoMethodError, method.to_s
1237
+ raise NoMethodError, method.to_s
1076
1238
  end
1239
+ # rubocop:enable AbcSize
1077
1240
  # rubocop:enable Next
1078
1241
  # rubocop:enable LineLength
1079
1242
 
@@ -1084,7 +1247,7 @@ module Pio
1084
1247
  end
1085
1248
 
1086
1249
  def tlv_total_length
1087
- if match_fields.size > 0
1250
+ if !match_fields.empty?
1088
1251
  match_fields.map(&:length).inject(&:+)
1089
1252
  else
1090
1253
  0
@@ -1121,7 +1284,8 @@ module Pio
1121
1284
  :arp_sender_protocol_address, :arp_target_protocol_address,
1122
1285
  :arp_sender_hardware_address, :arp_target_hardware_address,
1123
1286
  :ipv6_source_address, :ipv6_destination_address, :tunnel_id,
1124
- :reg0, :reg1, :reg2, :reg3, :reg4, :reg5, :reg6, :reg7].each do |each|
1287
+ :reg0, :reg1, :reg2, :reg3, :reg4, :reg5, :reg6, :reg7,
1288
+ :packet_reg0, :packet_reg1, :packet_reg2, :packet_reg3].each do |each|
1125
1289
  next unless user_attrs.key?(each)
1126
1290
  klass = Match.const_get(each.to_s.split('_').map(&:capitalize).join)
1127
1291
  mask_key = "#{each}_mask".to_sym
@@ -1,33 +1,36 @@
1
1
  require 'forwardable'
2
+ require 'pio/open_flow/instruction'
2
3
 
3
4
  # Base module.
4
5
  module Pio
5
- # Apply meter (rate limiter)
6
- class Meter
7
- # OpenFlow 1.3.4 OFPIT_METER instruction format
8
- class Format < BinData::Record
9
- endian :big
6
+ module OpenFlow13
7
+ # Apply meter (rate limiter)
8
+ class Meter < OpenFlow::Instruction
9
+ # OpenFlow 1.3.4 OFPIT_METER instruction format
10
+ class Format < BinData::Record
11
+ endian :big
10
12
 
11
- uint16 :instruction_type, value: 6
12
- uint16 :instruction_length, value: 8
13
- uint32 :meter_id
14
- end
13
+ uint16 :instruction_type, value: 6
14
+ uint16 :instruction_length, value: 8
15
+ uint32 :meter_id
16
+ end
15
17
 
16
- def self.read(raw_data)
17
- allocate.tap do |meter|
18
- meter.instance_variable_set :@format, Format.read(raw_data)
18
+ def self.read(raw_data)
19
+ allocate.tap do |meter|
20
+ meter.instance_variable_set :@format, Format.read(raw_data)
21
+ end
19
22
  end
20
- end
21
23
 
22
- extend Forwardable
24
+ extend Forwardable
23
25
 
24
- def_delegators :@format, :instruction_type
25
- def_delegators :@format, :instruction_length
26
- def_delegators :@format, :meter_id
27
- def_delegators :@format, :to_binary_s
26
+ def_delegators :@format, :instruction_type
27
+ def_delegators :@format, :instruction_length
28
+ def_delegators :@format, :meter_id
29
+ def_delegators :@format, :to_binary_s
28
30
 
29
- def initialize(meter_id)
30
- @format = Format.new(meter_id: meter_id)
31
+ def initialize(meter_id)
32
+ @format = Format.new(meter_id: meter_id)
33
+ end
31
34
  end
32
35
  end
33
36
  end