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,7 +1,7 @@
1
1
  @open_flow13
2
- Feature: Pio::Features::Reply
2
+ Feature: Features::Reply
3
3
  Scenario: new
4
- When I try to create an OpenFlow message with:
4
+ When I create an OpenFlow message with:
5
5
  """
6
6
  Pio::Features::Reply.new(
7
7
  datapath_id: 0x123,
@@ -10,12 +10,9 @@ Feature: Pio::Features::Reply
10
10
  capabilities: [:flow_stats, :table_stats, :port_stats, :group_stats, :ip_reasm, :queue_stats, :port_blocked]
11
11
  )
12
12
  """
13
- Then it should finish successfully
14
- And the message has the following fields and values:
13
+ Then the message has the following fields and values:
15
14
  | field | value |
16
- | ofp_version | 4 |
17
- | message_type | 6 |
18
- | message_length | 32 |
15
+ | version | 4 |
19
16
  | transaction_id | 0 |
20
17
  | xid | 0 |
21
18
  | datapath_id | 291 |
@@ -25,21 +22,3 @@ Feature: Pio::Features::Reply
25
22
  | auxiliary_id | 0 |
26
23
  | capabilities | [:flow_stats, :table_stats, :port_stats, :group_stats, :ip_reasm, :queue_stats, :port_blocked] |
27
24
  | reserved | 0 |
28
-
29
- Scenario: read
30
- When I try to parse a file named "open_flow13/features_reply.raw" with "Pio::Features::Reply" class
31
- Then it should finish successfully
32
- And the message has the following fields and values:
33
- | field | value |
34
- | ofp_version | 4 |
35
- | message_type | 6 |
36
- | message_length | 32 |
37
- | transaction_id | 0 |
38
- | xid | 0 |
39
- | datapath_id | 281474976710657 |
40
- | dpid | 281474976710657 |
41
- | n_buffers | 256 |
42
- | n_tables | 1 |
43
- | auxiliary_id | 0 |
44
- | capabilities | [:flow_stats, :table_stats, :port_stats, :group_stats, :ip_reasm, :queue_stats, :port_blocked] |
45
- | reserved | 0 |
@@ -1,54 +1,25 @@
1
1
  @open_flow13
2
- Feature: Pio::Features::Request
2
+ Feature: Features::Request
3
3
  Scenario: new
4
- When I try to create an OpenFlow message with:
4
+ When I create an OpenFlow message with:
5
5
  """
6
6
  Pio::Features::Request.new
7
7
  """
8
- Then it should finish successfully
9
- And the message has the following fields and values:
8
+ Then the message has the following fields and values:
10
9
  | field | value |
11
- | ofp_version | 4 |
12
- | message_type | 5 |
13
- | message_length | 8 |
10
+ | version | 4 |
14
11
  | transaction_id | 0 |
15
12
  | xid | 0 |
16
13
  | body | |
17
14
 
18
15
  Scenario: new(transaction_id: 123)
19
- When I try to create an OpenFlow message with:
16
+ When I create an OpenFlow message with:
20
17
  """
21
18
  Pio::Features::Request.new(transaction_id: 123)
22
19
  """
23
- Then it should finish successfully
24
- And the message has the following fields and values:
20
+ Then the message has the following fields and values:
25
21
  | field | value |
26
- | ofp_version | 4 |
27
- | message_type | 5 |
28
- | message_length | 8 |
22
+ | version | 4 |
29
23
  | transaction_id | 123 |
30
24
  | xid | 123 |
31
25
  | body | |
32
-
33
- Scenario: new(unknown_attr: 'foo') and error
34
- When I try to create an OpenFlow message with:
35
- """
36
- Pio::Features::Request.new(unknown_attr: 'foo')
37
- """
38
- Then it should fail with "RuntimeError", "Unknown option: unknown_attr"
39
-
40
- Scenario: read
41
- When I try to parse a file named "open_flow13/features_request.raw" with "Pio::Features::Request" class
42
- Then it should finish successfully
43
- And the message has the following fields and values:
44
- | field | value |
45
- | ofp_version | 4 |
46
- | message_type | 5 |
47
- | message_length | 8 |
48
- | transaction_id | 0 |
49
- | xid | 0 |
50
- | body | |
51
-
52
- Scenario: parse error
53
- When I try to parse a file named "open_flow10/hello.raw" with "Pio::Features::Request" class
54
- Then it should fail with "Pio::ParseError", "Invalid OpenFlow13 Features Request message."
@@ -1,16 +1,13 @@
1
1
  @open_flow13
2
- Feature: Pio::FlowMod
2
+ Feature: FlowMod
3
3
  Scenario: new
4
- When I try to create an OpenFlow message with:
4
+ When I create an OpenFlow message with:
5
5
  """
6
6
  Pio::FlowMod.new
7
7
  """
8
- Then it should finish successfully
9
- And the message has the following fields and values:
8
+ Then the message has the following fields and values:
10
9
  | field | value |
11
- | ofp_version | 4 |
12
- | message_type | 14 |
13
- | message_length | 56 |
10
+ | version | 4 |
14
11
  | to_binary.length | 56 |
15
12
  | transaction_id | 0 |
16
13
  | xid | 0 |
@@ -28,17 +25,14 @@ Feature: Pio::FlowMod
28
25
  | match.match_fields | [] |
29
26
  | instructions | [] |
30
27
 
31
- Scenario: new(instructions: Pio::Apply.new(SendOutPort.new(1)))
32
- When I try to create an OpenFlow message with:
28
+ Scenario: new(instructions: Pio::Apply.new(Pio::SendOutPort.new(1)))
29
+ When I create an OpenFlow message with:
33
30
  """
34
- Pio::FlowMod.new(instructions: Pio::Apply.new(SendOutPort.new(1)))
31
+ Pio::FlowMod.new(instructions: Pio::Apply.new(Pio::SendOutPort.new(1)))
35
32
  """
36
- Then it should finish successfully
37
- And the message has the following fields and values:
33
+ Then the message has the following fields and values:
38
34
  | field | value |
39
- | ofp_version | 4 |
40
- | message_type | 14 |
41
- | message_length | 80 |
35
+ | version | 4 |
42
36
  | transaction_id | 0 |
43
37
  | xid | 0 |
44
38
  | cookie | 0 |
@@ -54,21 +48,18 @@ Feature: Pio::FlowMod
54
48
  | flags | [] |
55
49
  | match.match_fields | [] |
56
50
  | instructions.size | 1 |
57
- | instructions.at(0).class | Pio::Apply |
51
+ | instructions.at(0).class | Pio::OpenFlow13::Apply |
58
52
  | instructions.at(0).actions.at(0).class | Pio::OpenFlow13::SendOutPort |
59
53
  | instructions.at(0).actions.at(0).port | 1 |
60
54
 
61
- Scenario: new(match: Pio::Match.new(in_port: 1), instructions: Pio::Apply.new(SendOutPort.new(1)))
62
- When I try to create an OpenFlow message with:
55
+ Scenario: new(match: Pio::Match.new(in_port: 1), instructions: Pio::Apply.new(Pio::SendOutPort.new(1)))
56
+ When I create an OpenFlow message with:
63
57
  """
64
- Pio::FlowMod.new(match: Pio::Match.new(in_port: 1), instructions: Pio::Apply.new(SendOutPort.new(1)))
58
+ Pio::FlowMod.new(match: Pio::Match.new(in_port: 1), instructions: Pio::Apply.new(Pio::SendOutPort.new(1)))
65
59
  """
66
- Then it should finish successfully
67
- And the message has the following fields and values:
60
+ Then the message has the following fields and values:
68
61
  | field | value |
69
- | ofp_version | 4 |
70
- | message_type | 14 |
71
- | message_length | 88 |
62
+ | version | 4 |
72
63
  | transaction_id | 0 |
73
64
  | xid | 0 |
74
65
  | cookie | 0 |
@@ -84,57 +75,6 @@ Feature: Pio::FlowMod
84
75
  | flags | [] |
85
76
  | match.in_port | 1 |
86
77
  | instructions.size | 1 |
87
- | instructions.at(0).class | Pio::Apply |
88
- | instructions.at(0).actions.at(0).class | Pio::OpenFlow13::SendOutPort |
89
- | instructions.at(0).actions.at(0).port | 1 |
90
-
91
- Scenario: read (no match or instructions)
92
- When I try to parse a file named "open_flow13/flow_mod_no_match_or_instructions.raw" with "Pio::FlowMod" class
93
- Then it should finish successfully
94
- And the message has the following fields and values:
95
- | field | value |
96
- | ofp_version | 4 |
97
- | message_type | 14 |
98
- | message_length | 56 |
99
- | transaction_id | 0 |
100
- | xid | 0 |
101
- | cookie | 0 |
102
- | cookie_mask | 0 |
103
- | table_id | 0 |
104
- | command | :add |
105
- | idle_timeout | 0 |
106
- | hard_timeout | 0 |
107
- | priority.to_hex | 0xffff |
108
- | buffer_id | :no_buffer |
109
- | out_port | :any |
110
- | out_group | :any |
111
- | flags | [] |
112
- | match.match_fields | [] |
113
- | instructions | [] |
114
-
115
- Scenario: read (instruction = apply, action = SendOutPort(port: 1))
116
- When I try to parse a file named "open_flow13/flow_mod_add_apply_no_match.raw" with "Pio::FlowMod" class
117
- Then it should finish successfully
118
- And the message has the following fields and values:
119
- | field | value |
120
- | ofp_version | 4 |
121
- | message_type | 14 |
122
- | message_length | 80 |
123
- | transaction_id | 0 |
124
- | xid | 0 |
125
- | cookie | 0 |
126
- | cookie_mask | 0 |
127
- | table_id | 0 |
128
- | command | :add |
129
- | idle_timeout | 0 |
130
- | hard_timeout | 0 |
131
- | priority.to_hex | 0xffff |
132
- | buffer_id | :no_buffer |
133
- | out_port | :any |
134
- | out_group | :any |
135
- | flags | [] |
136
- | match.match_fields | [] |
137
- | instructions.size | 1 |
138
- | instructions.at(0).class | Pio::Apply |
78
+ | instructions.at(0).class | Pio::OpenFlow13::Apply |
139
79
  | instructions.at(0).actions.at(0).class | Pio::OpenFlow13::SendOutPort |
140
80
  | instructions.at(0).actions.at(0).port | 1 |
@@ -1,26 +1,24 @@
1
1
  @open_flow13
2
- Feature: Pio::GotoTable
2
+ Feature: GotoTable
3
3
  Scenario: new(1)
4
- When I try to create an OpenFlow instruction with:
4
+ When I create an OpenFlow instruction with:
5
5
  """
6
- Pio::GotoTable.new(1)
6
+ Pio::OpenFlow13::GotoTable.new(1)
7
7
  """
8
- Then it should finish successfully
9
- And the message has the following fields and values:
10
- | field | value |
11
- | class | Pio::GotoTable |
12
- | instruction_type | 1 |
13
- | instruction_length | 8 |
14
- | to_binary_s.length | 8 |
15
- | table_id | 1 |
8
+ Then the message has the following fields and values:
9
+ | field | value |
10
+ | class | Pio::OpenFlow13::GotoTable |
11
+ | instruction_type | 1 |
12
+ | instruction_length | 8 |
13
+ | to_binary_s.length | 8 |
14
+ | table_id | 1 |
16
15
 
17
16
  Scenario: read
18
- When I try to parse a file named "open_flow13/instruction_goto_table.raw" with "Pio::GotoTable" class
19
- Then it should finish successfully
20
- And the message has the following fields and values:
21
- | field | value |
22
- | class | Pio::GotoTable |
23
- | instruction_type | 1 |
24
- | instruction_length | 8 |
25
- | to_binary_s.length | 8 |
26
- | table_id | 1 |
17
+ When I parse a file named "open_flow13/instruction_goto_table.raw" with "Pio::OpenFlow13::GotoTable" class
18
+ Then the message has the following fields and values:
19
+ | field | value |
20
+ | class | Pio::OpenFlow13::GotoTable |
21
+ | instruction_type | 1 |
22
+ | instruction_length | 8 |
23
+ | to_binary_s.length | 8 |
24
+ | table_id | 1 |
@@ -1,55 +1,25 @@
1
1
  @open_flow13
2
- Feature: Pio::Hello
2
+ Feature: Hello
3
3
  Scenario: new
4
- When I try to create an OpenFlow message with:
4
+ When I create an OpenFlow message with:
5
5
  """
6
6
  Pio::Hello.new
7
7
  """
8
- Then it should finish successfully
9
- And the message has the following fields and values:
8
+ Then the message has the following fields and values:
10
9
  | field | value |
11
- | ofp_version | 4 |
12
- | message_type | 0 |
13
- | message_length | 16 |
10
+ | version | 4 |
14
11
  | transaction_id | 0 |
15
12
  | xid | 0 |
16
13
  | supported_versions | [:open_flow13] |
17
14
 
18
15
  Scenario: new(transaction_id: 123)
19
- When I try to create an OpenFlow message with:
16
+ When I create an OpenFlow message with:
20
17
  """
21
18
  Pio::Hello.new(transaction_id: 123)
22
19
  """
23
- Then it should finish successfully
24
- And the message has the following fields and values:
20
+ Then the message has the following fields and values:
25
21
  | field | value |
26
- | ofp_version | 4 |
27
- | message_type | 0 |
28
- | message_length | 16 |
22
+ | version | 4 |
29
23
  | transaction_id | 123 |
30
24
  | xid | 123 |
31
25
  | supported_versions | [:open_flow13] |
32
-
33
- Scenario: read (no version bitmap)
34
- When I try to parse a file named "open_flow13/hello_no_version_bitmap.raw" with "Pio::Hello" class
35
- Then it should finish successfully
36
- And the message has the following fields and values:
37
- | field | value |
38
- | ofp_version | 4 |
39
- | message_type | 0 |
40
- | message_length | 8 |
41
- | transaction_id | 0 |
42
- | xid | 0 |
43
- | supported_versions | [] |
44
-
45
- Scenario: read
46
- When I try to parse a file named "open_flow13/hello_version_bitmap.raw" with "Pio::Hello" class
47
- Then it should finish successfully
48
- And the message has the following fields and values:
49
- | field | value |
50
- | ofp_version | 4 |
51
- | message_type | 0 |
52
- | message_length | 16 |
53
- | transaction_id | 0 |
54
- | xid | 0 |
55
- | supported_versions | [:open_flow10, :open_flow13] |
@@ -1,19 +1,16 @@
1
1
  @open_flow13
2
- Feature: Pio::Error::HelloFailed
2
+ Feature: Error::HelloFailed
3
3
 
4
4
  Hello protocol failed
5
5
 
6
6
  Scenario: new
7
- When I try to create an OpenFlow message with:
7
+ When I create an OpenFlow message with:
8
8
  """
9
9
  Pio::Error::HelloFailed.new
10
10
  """
11
- Then it should finish successfully
12
11
  And the message has the following fields and values:
13
12
  | field | value |
14
- | ofp_version | 4 |
15
- | message_type | 1 |
16
- | message_length | 12 |
13
+ | version | 4 |
17
14
  | transaction_id | 0 |
18
15
  | xid | 0 |
19
16
  | error_type | :hello_failed |
@@ -21,16 +18,13 @@ Feature: Pio::Error::HelloFailed
21
18
  | description | |
22
19
 
23
20
  Scenario: new(description: 'error description')
24
- When I try to create an OpenFlow message with:
21
+ When I create an OpenFlow message with:
25
22
  """
26
23
  Pio::Error::HelloFailed.new(description: 'error description')
27
24
  """
28
- Then it should finish successfully
29
25
  And the message has the following fields and values:
30
26
  | field | value |
31
- | ofp_version | 4 |
32
- | message_type | 1 |
33
- | message_length | 29 |
27
+ | version | 4 |
34
28
  | transaction_id | 0 |
35
29
  | xid | 0 |
36
30
  | error_type | :hello_failed |
@@ -38,32 +32,15 @@ Feature: Pio::Error::HelloFailed
38
32
  | description | error description |
39
33
 
40
34
  Scenario: new(error_code: :permissions_error)
41
- When I try to create an OpenFlow message with:
35
+ When I create an OpenFlow message with:
42
36
  """
43
37
  Pio::Error::HelloFailed.new(error_code: :permissions_error)
44
38
  """
45
- Then it should finish successfully
46
39
  And the message has the following fields and values:
47
40
  | field | value |
48
- | ofp_version | 4 |
49
- | message_type | 1 |
50
- | message_length | 12 |
41
+ | version | 4 |
51
42
  | transaction_id | 0 |
52
43
  | xid | 0 |
53
44
  | error_type | :hello_failed |
54
45
  | error_code | :permissions_error |
55
46
  | description | |
56
-
57
- Scenario: read
58
- When I try to parse a file named "open_flow13/hello_failed.raw" with "Pio::Error::HelloFailed" class
59
- Then it should finish successfully
60
- And the message has the following fields and values:
61
- | field | value |
62
- | ofp_version | 4 |
63
- | message_type | 1 |
64
- | message_length | 29 |
65
- | transaction_id | 0 |
66
- | xid | 0 |
67
- | error_type | :hello_failed |
68
- | error_code | :incompatible |
69
- | description | error description |
@@ -1,789 +1,780 @@
1
1
  @open_flow13
2
- Feature: Pio::Match
2
+ Feature: Match
3
3
  Scenario: new
4
- When I try to create an OpenFlow message with:
4
+ When I create an OpenFlow message with:
5
5
  """
6
6
  Pio::Match.new
7
7
  """
8
- Then it should finish successfully
9
- And the message has the following fields and values:
8
+ Then the message has the following fields and values:
10
9
  | field | value |
11
10
  | match_fields | [] |
12
11
 
13
12
  Scenario: new(in_port: 1)
14
- When I try to create an OpenFlow message with:
13
+ When I create an OpenFlow message with:
15
14
  """
16
15
  Pio::Match.new(in_port: 1)
17
16
  """
18
- Then it should finish successfully
19
- And the message has the following fields and values:
17
+ Then the message has the following fields and values:
20
18
  | field | value |
21
19
  | in_port | 1 |
22
20
 
23
21
  Scenario: new(metadata: 1)
24
- When I try to create an OpenFlow message with:
22
+ When I create an OpenFlow message with:
25
23
  """
26
24
  Pio::Match.new(metadata: 1)
27
25
  """
28
- Then it should finish successfully
29
- And the message has the following fields and values:
26
+ Then the message has the following fields and values:
30
27
  | field | value |
31
28
  | metadata | 1 |
32
29
 
33
30
  Scenario: new(metadata: 1, metadata_mask: 1)
34
- When I try to create an OpenFlow message with:
31
+ When I create an OpenFlow message with:
35
32
  """
36
33
  Pio::Match.new(metadata: 1, metadata_mask: 1)
37
34
  """
38
- Then it should finish successfully
39
- And the message has the following fields and values:
35
+ Then the message has the following fields and values:
40
36
  | field | value |
41
37
  | metadata | 1 |
42
38
  | metadata_mask | 1 |
43
39
 
44
40
  Scenario: new(source_mac_address: '01:02:03:04:05:06')
45
- When I try to create an OpenFlow message with:
41
+ When I create an OpenFlow message with:
46
42
  """
47
43
  Pio::Match.new(source_mac_address: '01:02:03:04:05:06')
48
44
  """
49
- Then it should finish successfully
50
- And the message has the following fields and values:
45
+ Then the message has the following fields and values:
51
46
  | field | value |
52
47
  | source_mac_address | 01:02:03:04:05:06 |
53
48
 
54
49
  Scenario: new(destination_mac_address: '01:02:03:04:05:06')
55
- When I try to create an OpenFlow message with:
50
+ When I create an OpenFlow message with:
56
51
  """
57
52
  Pio::Match.new(destination_mac_address: '01:02:03:04:05:06')
58
53
  """
59
- Then it should finish successfully
60
- And the message has the following fields and values:
54
+ Then the message has the following fields and values:
61
55
  | field | value |
62
56
  | destination_mac_address | 01:02:03:04:05:06 |
63
57
 
64
58
  Scenario: new(source_mac_address: '01:02:03:04:05:06', source_mac_address_mask: 'ff:ff:ff:00:00:00')
65
- When I try to create an OpenFlow message with:
59
+ When I create an OpenFlow message with:
66
60
  """
67
61
  Pio::Match.new(source_mac_address: '01:02:03:04:05:06', source_mac_address_mask: 'ff:ff:ff:00:00:00')
68
62
  """
69
- Then it should finish successfully
70
- And the message has the following fields and values:
63
+ Then the message has the following fields and values:
71
64
  | field | value |
72
65
  | source_mac_address | 01:02:03:04:05:06 |
73
66
  | source_mac_address_mask | ff:ff:ff:00:00:00 |
74
67
 
75
68
  Scenario: new(destination_mac_address: '01:02:03:04:05:06', destination_mac_address_mask: 'ff:ff:ff:00:00:00')
76
- When I try to create an OpenFlow message with:
69
+ When I create an OpenFlow message with:
77
70
  """
78
71
  Pio::Match.new(destination_mac_address: '01:02:03:04:05:06', destination_mac_address_mask: 'ff:ff:ff:00:00:00')
79
72
  """
80
- Then it should finish successfully
81
- And the message has the following fields and values:
73
+ Then the message has the following fields and values:
82
74
  | field | value |
83
75
  | destination_mac_address | 01:02:03:04:05:06 |
84
76
  | destination_mac_address_mask | ff:ff:ff:00:00:00 |
85
77
 
86
78
  Scenario: new(ether_type: 0x0800)
87
- When I try to create an OpenFlow message with:
79
+ When I create an OpenFlow message with:
88
80
  """
89
81
  Pio::Match.new(ether_type: 0x0800)
90
82
  """
91
- Then it should finish successfully
92
- And the message has the following fields and values:
83
+ Then the message has the following fields and values:
93
84
  | field | value |
94
85
  | ether_type | 2048 |
95
86
 
96
87
  Scenario: new(vlan_vid: 10)
97
- When I try to create an OpenFlow message with:
88
+ When I create an OpenFlow message with:
98
89
  """
99
90
  Pio::Match.new(vlan_vid: 10)
100
91
  """
101
- Then it should finish successfully
102
- And the message has the following fields and values:
92
+ Then the message has the following fields and values:
103
93
  | field | value |
104
94
  | vlan_vid | 10 |
105
95
 
106
96
  Scenario: new(vlan_vid: 10, vlan_pcp: 5)
107
- When I try to create an OpenFlow message with:
97
+ When I create an OpenFlow message with:
108
98
  """
109
99
  Pio::Match.new(vlan_vid: 10, vlan_pcp: 5)
110
100
  """
111
- Then it should finish successfully
112
- And the message has the following fields and values:
101
+ Then the message has the following fields and values:
113
102
  | field | value |
114
103
  | vlan_vid | 10 |
115
104
  | vlan_pcp | 5 |
116
105
 
117
106
  Scenario: new(eth_type: 2048, ip_dscp: 46)
118
- When I try to create an OpenFlow message with:
107
+ When I create an OpenFlow message with:
119
108
  """
120
109
  Pio::Match.new(ether_type: 2048, ip_dscp: 46)
121
110
  """
122
- Then it should finish successfully
123
- And the message has the following fields and values:
111
+ Then the message has the following fields and values:
124
112
  | field | value |
125
113
  | ether_type | 2048 |
126
114
  | ip_dscp | 46 |
127
115
 
128
116
  Scenario: new(eth_type: 2048, ip_ecn: 3)
129
- When I try to create an OpenFlow message with:
117
+ When I create an OpenFlow message with:
130
118
  """
131
119
  Pio::Match.new(ether_type: 2048, ip_ecn: 46)
132
120
  """
133
- Then it should finish successfully
134
- And the message has the following fields and values:
121
+ Then the message has the following fields and values:
135
122
  | field | value |
136
123
  | ether_type | 2048 |
137
124
  | ip_ecn | 3 |
138
125
 
139
126
  Scenario: new(ether_type: 0x0800, ipv4_source_address: '192.168.0.1')
140
- When I try to create an OpenFlow message with:
127
+ When I create an OpenFlow message with:
141
128
  """
142
129
  Pio::Match.new(ether_type: 0x0800, ipv4_source_address: '192.168.0.1')
143
130
  """
144
- Then it should finish successfully
145
- And the message has the following fields and values:
131
+ Then the message has the following fields and values:
146
132
  | field | value |
147
133
  | ether_type | 2048 |
148
134
  | ipv4_source_address | 192.168.0.1 |
149
135
 
150
136
  Scenario: new(ether_type: 0x0800, ipv4_destination_address: '192.168.0.1')
151
- When I try to create an OpenFlow message with:
137
+ When I create an OpenFlow message with:
152
138
  """
153
139
  Pio::Match.new(ether_type: 0x0800, ipv4_destination_address: '192.168.0.1')
154
140
  """
155
- Then it should finish successfully
156
- And the message has the following fields and values:
141
+ Then the message has the following fields and values:
157
142
  | field | value |
158
143
  | ether_type | 2048 |
159
144
  | ipv4_destination_address | 192.168.0.1 |
160
145
 
161
146
  Scenario: new(ether_type: 0x0800, ipv4_source_address: '192.168.0.1', ivp4_source_address_mask: '255.255.0.0')
162
- When I try to create an OpenFlow message with:
147
+ When I create an OpenFlow message with:
163
148
  """
164
149
  Pio::Match.new(ether_type: 0x0800, ipv4_source_address: '192.168.0.1', ipv4_source_address_mask: '255.255.0.0')
165
150
  """
166
- Then it should finish successfully
167
- And the message has the following fields and values:
151
+ Then the message has the following fields and values:
168
152
  | field | value |
169
153
  | ether_type | 2048 |
170
154
  | ipv4_source_address | 192.168.0.1 |
171
155
  | ipv4_source_address_mask | 255.255.0.0 |
172
156
 
173
157
  Scenario: new(ether_type: 0x0800, ipv4_destination_address: '192.168.0.1', ivp4_destination_address_mask: '255.255.0.0')
174
- When I try to create an OpenFlow message with:
158
+ When I create an OpenFlow message with:
175
159
  """
176
160
  Pio::Match.new(ether_type: 0x0800, ipv4_destination_address: '192.168.0.1', ipv4_destination_address_mask: '255.255.0.0')
177
161
  """
178
- Then it should finish successfully
179
- And the message has the following fields and values:
162
+ Then the message has the following fields and values:
180
163
  | field | value |
181
164
  | ether_type | 2048 |
182
165
  | ipv4_destination_address | 192.168.0.1 |
183
166
  | ipv4_destination_address_mask | 255.255.0.0 |
184
167
 
185
168
  Scenario: new(ether_type: 0x0800, ip_protocol: 6, tcp_source_port: 1111)
186
- When I try to create an OpenFlow message with:
169
+ When I create an OpenFlow message with:
187
170
  """
188
171
  Pio::Match.new(ether_type: 0x0800, ip_protocol: 6, tcp_source_port: 1111)
189
172
  """
190
- Then it should finish successfully
191
- And the message has the following fields and values:
173
+ Then the message has the following fields and values:
192
174
  | field | value |
193
175
  | ether_type | 2048 |
194
176
  | ip_protocol | 6 |
195
177
  | tcp_source_port | 1111 |
196
178
 
197
179
  Scenario: new(ether_type: 0x0800, ip_protocol: 6, tcp_destination_port: 80)
198
- When I try to create an OpenFlow message with:
180
+ When I create an OpenFlow message with:
199
181
  """
200
182
  Pio::Match.new(ether_type: 0x0800, ip_protocol: 6, tcp_destination_port: 80)
201
183
  """
202
- Then it should finish successfully
203
- And the message has the following fields and values:
184
+ Then the message has the following fields and values:
204
185
  | field | value |
205
186
  | ether_type | 2048 |
206
187
  | ip_protocol | 6 |
207
188
  | tcp_destination_port | 80 |
208
189
 
209
190
  Scenario: new(ether_type: 0x0800, ip_protocol: 17, udp_source_port: 2222)
210
- When I try to create an OpenFlow message with:
191
+ When I create an OpenFlow message with:
211
192
  """
212
193
  Pio::Match.new(ether_type: 0x0800, ip_protocol: 17, udp_source_port: 2222)
213
194
  """
214
- Then it should finish successfully
215
- And the message has the following fields and values:
195
+ Then the message has the following fields and values:
216
196
  | field | value |
217
197
  | ether_type | 2048 |
218
198
  | ip_protocol | 17 |
219
199
  | udp_source_port | 2222 |
220
200
 
221
201
  Scenario: new(ether_type: 0x0800, ip_protocol: 17, udp_destination_port: 3333)
222
- When I try to create an OpenFlow message with:
202
+ When I create an OpenFlow message with:
223
203
  """
224
204
  Pio::Match.new(ether_type: 0x0800, ip_protocol: 17, udp_destination_port: 3333)
225
205
  """
226
- Then it should finish successfully
227
- And the message has the following fields and values:
206
+ Then the message has the following fields and values:
228
207
  | field | value |
229
208
  | ether_type | 2048 |
230
209
  | ip_protocol | 17 |
231
210
  | udp_destination_port | 3333 |
232
211
 
233
212
  Scenario: new(ether_type: 0x0800, ip_protocol: 132, sctp_source_port: 22)
234
- When I try to create an OpenFlow message with:
213
+ When I create an OpenFlow message with:
235
214
  """
236
215
  Pio::Match.new(ether_type: 0x0800, ip_protocol: 132, sctp_source_port: 22)
237
216
  """
238
- Then it should finish successfully
239
- And the message has the following fields and values:
217
+ Then the message has the following fields and values:
240
218
  | field | value |
241
219
  | ether_type | 2048 |
242
220
  | ip_protocol | 132 |
243
221
  | sctp_source_port | 22 |
244
222
 
245
223
  Scenario: new(ether_type: 0x0800, ip_protocol: 132, sctp_destination_port: 22)
246
- When I try to create an OpenFlow message with:
224
+ When I create an OpenFlow message with:
247
225
  """
248
226
  Pio::Match.new(ether_type: 0x0800, ip_protocol: 132, sctp_destination_port: 22)
249
227
  """
250
- Then it should finish successfully
251
- And the message has the following fields and values:
228
+ Then the message has the following fields and values:
252
229
  | field | value |
253
230
  | ether_type | 2048 |
254
231
  | ip_protocol | 132 |
255
232
  | sctp_destination_port | 22 |
256
233
 
257
234
  Scenario: new(ether_type: 0x0800, ip_protocol: 1, icmpv4_type: 8)
258
- When I try to create an OpenFlow message with:
235
+ When I create an OpenFlow message with:
259
236
  """
260
237
  Pio::Match.new(ether_type: 0x0800, ip_protocol: 1, icmpv4_type: 8)
261
238
  """
262
- Then it should finish successfully
263
- And the message has the following fields and values:
239
+ Then the message has the following fields and values:
264
240
  | field | value |
265
241
  | ether_type | 2048 |
266
242
  | ip_protocol | 1 |
267
243
  | icmpv4_type | 8 |
268
244
 
269
245
  Scenario: new(ether_type: 0x0800, ip_protocol: 1, icmpv4_code: 0)
270
- When I try to create an OpenFlow message with:
246
+ When I create an OpenFlow message with:
271
247
  """
272
248
  Pio::Match.new(ether_type: 0x0800, ip_protocol: 1, icmpv4_code: 0)
273
249
  """
274
- Then it should finish successfully
275
- And the message has the following fields and values:
250
+ Then the message has the following fields and values:
276
251
  | field | value |
277
252
  | ether_type | 2048 |
278
253
  | ip_protocol | 1 |
279
254
  | icmpv4_code | 0 |
280
255
 
281
256
  Scenario: new(eth_type: 2054, arp_operation: 1)
282
- When I try to create an OpenFlow message with:
257
+ When I create an OpenFlow message with:
283
258
  """
284
259
  Pio::Match.new(ether_type: 2054, arp_operation: 1)
285
260
  """
286
- Then it should finish successfully
287
- And the message has the following fields and values:
261
+ Then the message has the following fields and values:
288
262
  | field | value |
289
263
  | ether_type | 2054 |
290
264
  | arp_operation | 1 |
291
265
 
292
266
  Scenario: new(eth_type: 2054, arp_sender_protocol_address: '1.2.3.4')
293
- When I try to create an OpenFlow message with:
267
+ When I create an OpenFlow message with:
294
268
  """
295
269
  Pio::Match.new(ether_type: 2054, arp_sender_protocol_address: '1.2.3.4')
296
270
  """
297
- Then it should finish successfully
298
- And the message has the following fields and values:
271
+ Then the message has the following fields and values:
299
272
  | field | value |
300
273
  | ether_type | 2054 |
301
274
  | arp_sender_protocol_address | 1.2.3.4 |
302
275
 
303
276
  Scenario: new(eth_type: 2054, arp_sender_protocol_address: '1.2.3.4', arp_sender_protocol_address_mask: '255.255.0.0')
304
- When I try to create an OpenFlow message with:
277
+ When I create an OpenFlow message with:
305
278
  """
306
279
  Pio::Match.new(ether_type: 2054, arp_sender_protocol_address: '1.2.3.4', arp_sender_protocol_address_mask: '255.255.0.0')
307
280
  """
308
- Then it should finish successfully
309
- And the message has the following fields and values:
281
+ Then the message has the following fields and values:
310
282
  | field | value |
311
283
  | ether_type | 2054 |
312
284
  | arp_sender_protocol_address | 1.2.3.4 |
313
285
  | arp_sender_protocol_address_mask | 255.255.0.0 |
314
286
 
315
287
  Scenario: new(eth_type: 2054, arp_target_protocol_address: '1.2.3.4')
316
- When I try to create an OpenFlow message with:
288
+ When I create an OpenFlow message with:
317
289
  """
318
290
  Pio::Match.new(ether_type: 2054, arp_target_protocol_address: '1.2.3.4')
319
291
  """
320
- Then it should finish successfully
321
- And the message has the following fields and values:
292
+ Then the message has the following fields and values:
322
293
  | field | value |
323
294
  | ether_type | 2054 |
324
295
  | arp_target_protocol_address | 1.2.3.4 |
325
296
 
326
297
  Scenario: new(eth_type: 2054, arp_target_protocol_address: '1.2.3.4', arp_target_protocol_address_mask: '255.255.0.0')
327
- When I try to create an OpenFlow message with:
298
+ When I create an OpenFlow message with:
328
299
  """
329
300
  Pio::Match.new(ether_type: 2054, arp_target_protocol_address: '1.2.3.4', arp_target_protocol_address_mask: '255.255.0.0')
330
301
  """
331
- Then it should finish successfully
332
- And the message has the following fields and values:
302
+ Then the message has the following fields and values:
333
303
  | field | value |
334
304
  | ether_type | 2054 |
335
305
  | arp_target_protocol_address | 1.2.3.4 |
336
306
  | arp_target_protocol_address_mask | 255.255.0.0 |
337
307
 
338
308
  Scenario: new(eth_type: 2054, arp_sender_hardware_address: '11:22:33:44:55:66')
339
- When I try to create an OpenFlow message with:
309
+ When I create an OpenFlow message with:
340
310
  """
341
311
  Pio::Match.new(ether_type: 2054, arp_sender_hardware_address: '11:22:33:44:55:66')
342
312
  """
343
- Then it should finish successfully
344
- And the message has the following fields and values:
313
+ Then the message has the following fields and values:
345
314
  | field | value |
346
315
  | ether_type | 2054 |
347
316
  | arp_sender_hardware_address | 11:22:33:44:55:66 |
348
317
 
349
318
  Scenario: new(eth_type: 2054, arp_sender_hardware_address: '11:22:33:44:55:66', arp_sender_hardware_address_mask: 'ff:ff:ff:00:00:00')
350
- When I try to create an OpenFlow message with:
319
+ When I create an OpenFlow message with:
351
320
  """
352
321
  Pio::Match.new(ether_type: 2054, arp_sender_hardware_address: '11:22:33:44:55:66', arp_sender_hardware_address_mask: 'ff:ff:ff:00:00:00')
353
322
  """
354
- Then it should finish successfully
355
- And the message has the following fields and values:
323
+ Then the message has the following fields and values:
356
324
  | field | value |
357
325
  | ether_type | 2054 |
358
326
  | arp_sender_hardware_address | 11:22:33:44:55:66 |
359
327
  | arp_sender_hardware_address_mask | ff:ff:ff:00:00:00 |
360
328
 
361
329
  Scenario: new(eth_type: 2054, arp_target_hardware_address: '11:22:33:44:55:66')
362
- When I try to create an OpenFlow message with:
330
+ When I create an OpenFlow message with:
363
331
  """
364
332
  Pio::Match.new(ether_type: 2054, arp_target_hardware_address: '11:22:33:44:55:66')
365
333
  """
366
- Then it should finish successfully
367
- And the message has the following fields and values:
334
+ Then the message has the following fields and values:
368
335
  | field | value |
369
336
  | ether_type | 2054 |
370
337
  | arp_target_hardware_address | 11:22:33:44:55:66 |
371
338
 
372
339
  Scenario: new(eth_type: 2054, arp_target_hardware_address: '11:22:33:44:55:66', arp_target_hardware_address_mask: 'ff:ff:ff:00:00:00')
373
- When I try to create an OpenFlow message with:
340
+ When I create an OpenFlow message with:
374
341
  """
375
342
  Pio::Match.new(ether_type: 2054, arp_target_hardware_address: '11:22:33:44:55:66', arp_target_hardware_address_mask: 'ff:ff:ff:00:00:00')
376
343
  """
377
- Then it should finish successfully
378
- And the message has the following fields and values:
344
+ Then the message has the following fields and values:
379
345
  | field | value |
380
346
  | ether_type | 2054 |
381
347
  | arp_target_hardware_address | 11:22:33:44:55:66 |
382
348
  | arp_target_hardware_address_mask | ff:ff:ff:00:00:00 |
383
349
 
384
350
  Scenario: new(ether_type: 0x86dd, ipv6_source_address: '2001:db8:bd05:1d2:288a:1fc0:1:10ee')
385
- When I try to create an OpenFlow message with:
351
+ When I create an OpenFlow message with:
386
352
  """
387
353
  Pio::Match.new(ether_type: 0x86dd, ipv6_source_address: '2001:db8:bd05:1d2:288a:1fc0:1:10ee')
388
354
  """
389
- Then it should finish successfully
390
- And the message has the following fields and values:
355
+ Then the message has the following fields and values:
391
356
  | field | value |
392
357
  | ether_type | 34525 |
393
358
  | ipv6_source_address | 2001:db8:bd05:1d2:288a:1fc0:1:10ee |
394
359
 
395
360
  Scenario: new(ether_type: 0x86dd, ipv6_source_address: '2001:db8:bd05:1d2:288a:1fc0:1:10ee', ipv6_source_address_mask: 'ffff:ffff:ffff:ffff::')
396
- When I try to create an OpenFlow message with:
361
+ When I create an OpenFlow message with:
397
362
  """
398
363
  Pio::Match.new(ether_type: 0x86dd, ipv6_source_address: '2001:db8:bd05:1d2:288a:1fc0:1:10ee', ipv6_source_address_mask: 'ffff:ffff:ffff:ffff::')
399
364
  """
400
- Then it should finish successfully
401
- And the message has the following fields and values:
365
+ Then the message has the following fields and values:
402
366
  | field | value |
403
367
  | ether_type | 34525 |
404
368
  | ipv6_source_address | 2001:db8:bd05:1d2:288a:1fc0:1:10ee |
405
369
  | ipv6_source_address_mask | ffff:ffff:ffff:ffff:: |
406
370
 
407
371
  Scenario: new(ether_type: 0x86dd, ipv6_destination_address: '2001:db8:bd05:1d2:288a:1fc0:1:10ee')
408
- When I try to create an OpenFlow message with:
372
+ When I create an OpenFlow message with:
409
373
  """
410
374
  Pio::Match.new(ether_type: 0x86dd, ipv6_destination_address: '2001:db8:bd05:1d2:288a:1fc0:1:10ee')
411
375
  """
412
- Then it should finish successfully
413
- And the message has the following fields and values:
376
+ Then the message has the following fields and values:
414
377
  | field | value |
415
378
  | ether_type | 34525 |
416
379
  | ipv6_destination_address | 2001:db8:bd05:1d2:288a:1fc0:1:10ee |
417
380
 
418
381
  Scenario: new(ether_type: 0x86dd, ipv6_destination_address: '2001:db8:bd05:1d2:288a:1fc0:1:10ee', ipv6_destination_address_mask: 'ffff:ffff:ffff:ffff::')
419
- When I try to create an OpenFlow message with:
382
+ When I create an OpenFlow message with:
420
383
  """
421
384
  Pio::Match.new(ether_type: 0x86dd, ipv6_destination_address: '2001:db8:bd05:1d2:288a:1fc0:1:10ee', ipv6_destination_address_mask: 'ffff:ffff:ffff:ffff::')
422
385
  """
423
- Then it should finish successfully
424
- And the message has the following fields and values:
386
+ Then the message has the following fields and values:
425
387
  | field | value |
426
388
  | ether_type | 34525 |
427
389
  | ipv6_destination_address | 2001:db8:bd05:1d2:288a:1fc0:1:10ee |
428
390
  | ipv6_destination_address_mask | ffff:ffff:ffff:ffff:: |
429
391
 
430
392
  Scenario: new(tunnel_id: 1)
431
- When I try to create an OpenFlow message with:
393
+ When I create an OpenFlow message with:
432
394
  """
433
395
  Pio::Match.new(tunnel_id: 1)
434
396
  """
435
- Then it should finish successfully
436
- And the message has the following fields and values:
397
+ Then the message has the following fields and values:
437
398
  | field | value |
438
399
  | tunnel_id | 1 |
439
400
 
440
401
  Scenario: new(tunnel_id: 1, tunnel_id_mask: 9223372036854775808)
441
- When I try to create an OpenFlow message with:
402
+ When I create an OpenFlow message with:
442
403
  """
443
404
  Pio::Match.new(tunnel_id: 1, tunnel_id_mask: 9223372036854775808)
444
405
  """
445
- Then it should finish successfully
446
- And the message has the following fields and values:
406
+ Then the message has the following fields and values:
447
407
  | field | value |
448
408
  | tunnel_id | 1 |
449
409
  | tunnel_id_mask | 9223372036854775808 |
450
410
 
411
+ Scenario: new(packet_reg0: 1)
412
+ When I create an OpenFlow message with:
413
+ """
414
+ Pio::Match.new(packet_reg0: 1)
415
+ """
416
+ Then the message has the following fields and values:
417
+ | field | value |
418
+ | packet_reg0 | 1 |
419
+
420
+ Scenario: new(packet_reg0: 1, packet_reg0_mask: 1)
421
+ When I create an OpenFlow message with:
422
+ """
423
+ Pio::Match.new(packet_reg0: 1, packet_reg0_mask: 1)
424
+ """
425
+ Then the message has the following fields and values:
426
+ | field | value |
427
+ | packet_reg0 | 1 |
428
+ | packet_reg0_mask | 1 |
429
+
430
+ Scenario: new(packet_reg1: 1)
431
+ When I create an OpenFlow message with:
432
+ """
433
+ Pio::Match.new(packet_reg1: 1)
434
+ """
435
+ Then the message has the following fields and values:
436
+ | field | value |
437
+ | packet_reg1 | 1 |
438
+
439
+ Scenario: new(packet_reg1: 1, packet_reg1_mask: 1)
440
+ When I create an OpenFlow message with:
441
+ """
442
+ Pio::Match.new(packet_reg1: 1, packet_reg1_mask: 1)
443
+ """
444
+ Then the message has the following fields and values:
445
+ | field | value |
446
+ | packet_reg1 | 1 |
447
+ | packet_reg1_mask | 1 |
448
+
449
+ Scenario: new(packet_reg2: 1)
450
+ When I create an OpenFlow message with:
451
+ """
452
+ Pio::Match.new(packet_reg2: 1)
453
+ """
454
+ Then the message has the following fields and values:
455
+ | field | value |
456
+ | packet_reg2 | 1 |
457
+
458
+ Scenario: new(packet_reg2: 1, packet_reg2_mask: 1)
459
+ When I create an OpenFlow message with:
460
+ """
461
+ Pio::Match.new(packet_reg2: 1, packet_reg2_mask: 1)
462
+ """
463
+ Then the message has the following fields and values:
464
+ | field | value |
465
+ | packet_reg2 | 1 |
466
+ | packet_reg2_mask | 1 |
467
+
468
+ Scenario: new(packet_reg3: 1)
469
+ When I create an OpenFlow message with:
470
+ """
471
+ Pio::Match.new(packet_reg3: 1)
472
+ """
473
+ Then the message has the following fields and values:
474
+ | field | value |
475
+ | packet_reg3 | 1 |
476
+
477
+ Scenario: new(packet_reg3: 1, packet_reg3_mask: 1)
478
+ When I create an OpenFlow message with:
479
+ """
480
+ Pio::Match.new(packet_reg3: 1, packet_reg3_mask: 1)
481
+ """
482
+ Then the message has the following fields and values:
483
+ | field | value |
484
+ | packet_reg3 | 1 |
485
+ | packet_reg3_mask | 1 |
486
+
451
487
  Scenario: read (file: open_flow13/oxm_no_fields.raw)
452
- When I try to parse a file named "open_flow13/oxm_no_fields.raw" with "Pio::Match" class
453
- Then it should finish successfully
454
- And the message has the following fields and values:
488
+ When I parse a file named "open_flow13/oxm_no_fields.raw" with "Pio::Match" class
489
+ Then the message has the following fields and values:
455
490
  | field | value |
456
491
  | match_fields | [] |
457
492
 
458
493
  Scenario: read (file: open_flow13/oxm_in_port_field.raw)
459
- When I try to parse a file named "open_flow13/oxm_in_port_field.raw" with "Pio::Match" class
460
- Then it should finish successfully
461
- And the message has the following fields and values:
494
+ When I parse a file named "open_flow13/oxm_in_port_field.raw" with "Pio::Match" class
495
+ Then the message has the following fields and values:
462
496
  | field | value |
463
497
  | in_port | 1 |
464
498
 
465
499
  Scenario: read (file: open_flow13/oxm_metadata_field.raw)
466
- When I try to parse a file named "open_flow13/oxm_metadata_field.raw" with "Pio::Match" class
467
- Then it should finish successfully
468
- And the message has the following fields and values:
500
+ When I parse a file named "open_flow13/oxm_metadata_field.raw" with "Pio::Match" class
501
+ Then the message has the following fields and values:
469
502
  | field | value |
470
503
  | metadata | 1 |
471
504
 
472
505
  Scenario: read (file: open_flow13/oxm_metadata_masked_field.raw)
473
- When I try to parse a file named "open_flow13/oxm_metadata_masked_field.raw" with "Pio::Match" class
474
- Then it should finish successfully
475
- And the message has the following fields and values:
506
+ When I parse a file named "open_flow13/oxm_metadata_masked_field.raw" with "Pio::Match" class
507
+ Then the message has the following fields and values:
476
508
  | field | value |
477
509
  | metadata | 1 |
478
510
  | metadata_mask | 18446744069414584320 |
479
511
 
480
512
  Scenario: read (file: open_flow13/oxm_ether_destination_field.raw)
481
- When I try to parse a file named "open_flow13/oxm_ether_destination_field.raw" with "Pio::Match" class
482
- Then it should finish successfully
483
- And the message has the following fields and values:
513
+ When I parse a file named "open_flow13/oxm_ether_destination_field.raw" with "Pio::Match" class
514
+ Then the message has the following fields and values:
484
515
  | field | value |
485
516
  | destination_mac_address | ff:ff:ff:ff:ff:ff |
486
517
 
487
518
  Scenario: read (file: open_flow13/oxm_ether_source_field.raw)
488
- When I try to parse a file named "open_flow13/oxm_ether_source_field.raw" with "Pio::Match" class
489
- Then it should finish successfully
490
- And the message has the following fields and values:
519
+ When I parse a file named "open_flow13/oxm_ether_source_field.raw" with "Pio::Match" class
520
+ Then the message has the following fields and values:
491
521
  | field | value |
492
522
  | source_mac_address | 01:02:03:04:05:06 |
493
523
 
494
524
  Scenario: read (file: open_flow13/oxm_masked_ether_destination_field.raw)
495
- When I try to parse a file named "open_flow13/oxm_masked_ether_destination_field.raw" with "Pio::Match" class
496
- Then it should finish successfully
497
- And the message has the following fields and values:
525
+ When I parse a file named "open_flow13/oxm_masked_ether_destination_field.raw" with "Pio::Match" class
526
+ Then the message has the following fields and values:
498
527
  | field | value |
499
528
  | destination_mac_address | ff:ff:ff:ff:ff:ff |
500
529
  | destination_mac_address_mask | ff:ff:ff:00:00:00 |
501
530
 
502
531
  Scenario: read (file: open_flow13/oxm_masked_ether_source_field.raw)
503
- When I try to parse a file named "open_flow13/oxm_masked_ether_source_field.raw" with "Pio::Match" class
504
- Then it should finish successfully
505
- And the message has the following fields and values:
532
+ When I parse a file named "open_flow13/oxm_masked_ether_source_field.raw" with "Pio::Match" class
533
+ Then the message has the following fields and values:
506
534
  | field | value |
507
535
  | source_mac_address | 01:02:03:04:05:06 |
508
536
  | source_mac_address_mask | ff:ff:ff:00:00:00 |
509
537
 
510
538
  Scenario: read (file: open_flow13/oxm_ether_type_field.raw)
511
- When I try to parse a file named "open_flow13/oxm_ether_type_field.raw" with "Pio::Match" class
512
- Then it should finish successfully
513
- And the message has the following fields and values:
539
+ When I parse a file named "open_flow13/oxm_ether_type_field.raw" with "Pio::Match" class
540
+ Then the message has the following fields and values:
514
541
  | field | value |
515
542
  | ether_type | 0 |
516
543
 
517
544
  Scenario: read (file: open_flow13/oxm_vlan_vid_field.raw)
518
- When I try to parse a file named "open_flow13/oxm_vlan_vid_field.raw" with "Pio::Match" class
519
- Then it should finish successfully
520
- And the message has the following fields and values:
545
+ When I parse a file named "open_flow13/oxm_vlan_vid_field.raw" with "Pio::Match" class
546
+ Then the message has the following fields and values:
521
547
  | field | value |
522
548
  | vlan_vid | 10 |
523
549
 
524
550
  Scenario: read (file: open_flow13/oxm_vlan_pcp_field.raw)
525
- When I try to parse a file named "open_flow13/oxm_vlan_pcp_field.raw" with "Pio::Match" class
526
- Then it should finish successfully
527
- And the message has the following fields and values:
551
+ When I parse a file named "open_flow13/oxm_vlan_pcp_field.raw" with "Pio::Match" class
552
+ Then the message has the following fields and values:
528
553
  | field | value |
529
554
  | vlan_vid | 10 |
530
555
  | vlan_pcp | 5 |
531
556
 
532
557
  Scenario: read (file: open_flow13/oxm_ip_dscp_field.raw)
533
- When I try to parse a file named "open_flow13/oxm_ip_dscp_field.raw" with "Pio::Match" class
534
- Then it should finish successfully
535
- And the message has the following fields and values:
558
+ When I parse a file named "open_flow13/oxm_ip_dscp_field.raw" with "Pio::Match" class
559
+ Then the message has the following fields and values:
536
560
  | field | value |
537
561
  | ether_type | 2048 |
538
562
  | ip_dscp | 46 |
539
563
 
540
564
  Scenario: read (file: open_flow13/oxm_ip_ecn_field.raw)
541
- When I try to parse a file named "open_flow13/oxm_ip_ecn_field.raw" with "Pio::Match" class
542
- Then it should finish successfully
543
- And the message has the following fields and values:
565
+ When I parse a file named "open_flow13/oxm_ip_ecn_field.raw" with "Pio::Match" class
566
+ Then the message has the following fields and values:
544
567
  | field | value |
545
568
  | ether_type | 2048 |
546
569
  | ip_ecn | 3 |
547
570
 
548
571
  Scenario: read (file: open_flow13/oxm_ipv4_source_field.raw)
549
- When I try to parse a file named "open_flow13/oxm_ipv4_source_field.raw" with "Pio::Match" class
550
- Then it should finish successfully
551
- And the message has the following fields and values:
572
+ When I parse a file named "open_flow13/oxm_ipv4_source_field.raw" with "Pio::Match" class
573
+ Then the message has the following fields and values:
552
574
  | field | value |
553
575
  | ether_type | 2048 |
554
576
  | ipv4_source_address | 1.2.3.4 |
555
577
 
556
578
  Scenario: read (file: open_flow13/oxm_ipv4_destination_field.raw)
557
- When I try to parse a file named "open_flow13/oxm_ipv4_destination_field.raw" with "Pio::Match" class
558
- Then it should finish successfully
559
- And the message has the following fields and values:
579
+ When I parse a file named "open_flow13/oxm_ipv4_destination_field.raw" with "Pio::Match" class
580
+ Then the message has the following fields and values:
560
581
  | field | value |
561
582
  | ether_type | 2048 |
562
583
  | ipv4_destination_address | 11.22.33.44 |
563
584
 
564
585
  Scenario: read (file: open_flow13/oxm_masked_ipv4_source_field.raw)
565
- When I try to parse a file named "open_flow13/oxm_masked_ipv4_source_field.raw" with "Pio::Match" class
566
- Then it should finish successfully
567
- And the message has the following fields and values:
586
+ When I parse a file named "open_flow13/oxm_masked_ipv4_source_field.raw" with "Pio::Match" class
587
+ Then the message has the following fields and values:
568
588
  | field | value |
569
589
  | ether_type | 2048 |
570
590
  | ipv4_source_address | 1.2.3.4 |
571
591
  | ipv4_source_address_mask | 255.255.0.0 |
572
592
 
573
593
  Scenario: read (file: open_flow13/oxm_masked_ipv4_destination_field.raw)
574
- When I try to parse a file named "open_flow13/oxm_masked_ipv4_destination_field.raw" with "Pio::Match" class
575
- Then it should finish successfully
576
- And the message has the following fields and values:
594
+ When I parse a file named "open_flow13/oxm_masked_ipv4_destination_field.raw" with "Pio::Match" class
595
+ Then the message has the following fields and values:
577
596
  | field | value |
578
597
  | ether_type | 2048 |
579
598
  | ipv4_destination_address | 11.22.33.44 |
580
599
  | ipv4_destination_address_mask | 255.255.255.0 |
581
600
 
582
601
  Scenario: read (file: open_flow13/oxm_tcp_source_field.raw)
583
- When I try to parse a file named "open_flow13/oxm_tcp_source_field.raw" with "Pio::Match" class
584
- Then it should finish successfully
585
- And the message has the following fields and values:
602
+ When I parse a file named "open_flow13/oxm_tcp_source_field.raw" with "Pio::Match" class
603
+ Then the message has the following fields and values:
586
604
  | field | value |
587
605
  | ether_type | 2048 |
588
606
  | ip_protocol | 6 |
589
607
  | tcp_source_port | 1111 |
590
608
 
591
609
  Scenario: read (file: open_flow13/oxm_tcp_destination_field.raw)
592
- When I try to parse a file named "open_flow13/oxm_tcp_destination_field.raw" with "Pio::Match" class
593
- Then it should finish successfully
594
- And the message has the following fields and values:
610
+ When I parse a file named "open_flow13/oxm_tcp_destination_field.raw" with "Pio::Match" class
611
+ Then the message has the following fields and values:
595
612
  | field | value |
596
613
  | ether_type | 2048 |
597
614
  | ip_protocol | 6 |
598
615
  | tcp_destination_port | 80 |
599
616
 
600
617
  Scenario: read (file: open_flow13/oxm_udp_source_field.raw)
601
- When I try to parse a file named "open_flow13/oxm_udp_source_field.raw" with "Pio::Match" class
602
- Then it should finish successfully
603
- And the message has the following fields and values:
618
+ When I parse a file named "open_flow13/oxm_udp_source_field.raw" with "Pio::Match" class
619
+ Then the message has the following fields and values:
604
620
  | field | value |
605
621
  | ether_type | 2048 |
606
622
  | ip_protocol | 17 |
607
623
  | udp_source_port | 2222 |
608
624
 
609
625
  Scenario: read (file: open_flow13/oxm_udp_destination_field.raw)
610
- When I try to parse a file named "open_flow13/oxm_udp_destination_field.raw" with "Pio::Match" class
611
- Then it should finish successfully
612
- And the message has the following fields and values:
626
+ When I parse a file named "open_flow13/oxm_udp_destination_field.raw" with "Pio::Match" class
627
+ Then the message has the following fields and values:
613
628
  | field | value |
614
629
  | ether_type | 2048 |
615
630
  | ip_protocol | 17 |
616
631
  | udp_destination_port | 3333 |
617
632
 
618
633
  Scenario: read (file: open_flow13/oxm_sctp_source_field.raw)
619
- When I try to parse a file named "open_flow13/oxm_sctp_source_field.raw" with "Pio::Match" class
620
- Then it should finish successfully
621
- And the message has the following fields and values:
634
+ When I parse a file named "open_flow13/oxm_sctp_source_field.raw" with "Pio::Match" class
635
+ Then the message has the following fields and values:
622
636
  | field | value |
623
637
  | ether_type | 2048 |
624
638
  | ip_protocol | 132 |
625
639
  | sctp_source_port | 22 |
626
640
 
627
641
  Scenario: read (file: open_flow13/oxm_sctp_destination_field.raw)
628
- When I try to parse a file named "open_flow13/oxm_sctp_destination_field.raw" with "Pio::Match" class
629
- Then it should finish successfully
630
- And the message has the following fields and values:
642
+ When I parse a file named "open_flow13/oxm_sctp_destination_field.raw" with "Pio::Match" class
643
+ Then the message has the following fields and values:
631
644
  | field | value |
632
645
  | ether_type | 2048 |
633
646
  | ip_protocol | 132 |
634
647
  | sctp_destination_port | 22 |
635
648
 
636
649
  Scenario: read (file: open_flow13/oxm_icmpv4_type_field.raw)
637
- When I try to parse a file named "open_flow13/oxm_icmpv4_type_field.raw" with "Pio::Match" class
638
- Then it should finish successfully
639
- And the message has the following fields and values:
650
+ When I parse a file named "open_flow13/oxm_icmpv4_type_field.raw" with "Pio::Match" class
651
+ Then the message has the following fields and values:
640
652
  | field | value |
641
653
  | ether_type | 2048 |
642
654
  | ip_protocol | 1 |
643
655
  | icmpv4_type | 8 |
644
656
 
645
657
  Scenario: read (file: open_flow13/oxm_icmpv4_code_field.raw)
646
- When I try to parse a file named "open_flow13/oxm_icmpv4_code_field.raw" with "Pio::Match" class
647
- Then it should finish successfully
648
- And the message has the following fields and values:
658
+ When I parse a file named "open_flow13/oxm_icmpv4_code_field.raw" with "Pio::Match" class
659
+ Then the message has the following fields and values:
649
660
  | field | value |
650
661
  | ether_type | 2048 |
651
662
  | ip_protocol | 1 |
652
663
  | icmpv4_code | 0 |
653
664
 
654
665
  Scenario: read (file: open_flow13/oxm_arp_op_field.raw)
655
- When I try to parse a file named "open_flow13/oxm_arp_op_field.raw" with "Pio::Match" class
656
- Then it should finish successfully
657
- And the message has the following fields and values:
666
+ When I parse a file named "open_flow13/oxm_arp_op_field.raw" with "Pio::Match" class
667
+ Then the message has the following fields and values:
658
668
  | field | value |
659
669
  | ether_type | 2054 |
660
670
  | arp_operation | 1 |
661
671
 
662
672
  Scenario: read (file: open_flow13/oxm_arp_spa_field.raw)
663
- When I try to parse a file named "open_flow13/oxm_arp_spa_field.raw" with "Pio::Match" class
664
- Then it should finish successfully
665
- And the message has the following fields and values:
673
+ When I parse a file named "open_flow13/oxm_arp_spa_field.raw" with "Pio::Match" class
674
+ Then the message has the following fields and values:
666
675
  | field | value |
667
676
  | ether_type | 2054 |
668
677
  | arp_sender_protocol_address | 1.2.3.4 |
669
678
 
670
679
  Scenario: read (file: open_flow13/oxm_masked_arp_spa_field.raw)
671
- When I try to parse a file named "open_flow13/oxm_masked_arp_spa_field.raw" with "Pio::Match" class
672
- Then it should finish successfully
673
- And the message has the following fields and values:
680
+ When I parse a file named "open_flow13/oxm_masked_arp_spa_field.raw" with "Pio::Match" class
681
+ Then the message has the following fields and values:
674
682
  | field | value |
675
683
  | ether_type | 2054 |
676
684
  | arp_sender_protocol_address | 1.2.3.4 |
677
685
  | arp_sender_protocol_address_mask | 255.255.0.0 |
678
686
 
679
687
  Scenario: read (file: open_flow13/oxm_arp_tpa_field.raw)
680
- When I try to parse a file named "open_flow13/oxm_arp_tpa_field.raw" with "Pio::Match" class
681
- Then it should finish successfully
682
- And the message has the following fields and values:
688
+ When I parse a file named "open_flow13/oxm_arp_tpa_field.raw" with "Pio::Match" class
689
+ Then the message has the following fields and values:
683
690
  | field | value |
684
691
  | ether_type | 2054 |
685
692
  | arp_target_protocol_address | 1.2.3.4 |
686
693
 
687
694
  Scenario: read (file: open_flow13/oxm_masked_arp_tpa_field.raw)
688
- When I try to parse a file named "open_flow13/oxm_masked_arp_tpa_field.raw" with "Pio::Match" class
689
- Then it should finish successfully
690
- And the message has the following fields and values:
695
+ When I parse a file named "open_flow13/oxm_masked_arp_tpa_field.raw" with "Pio::Match" class
696
+ Then the message has the following fields and values:
691
697
  | field | value |
692
698
  | ether_type | 2054 |
693
699
  | arp_target_protocol_address | 1.2.3.4 |
694
700
  | arp_target_protocol_address_mask | 255.255.0.0 |
695
701
 
696
702
  Scenario: read (file: open_flow13/oxm_arp_sha_field.raw)
697
- When I try to parse a file named "open_flow13/oxm_arp_sha_field.raw" with "Pio::Match" class
698
- Then it should finish successfully
699
- And the message has the following fields and values:
703
+ When I parse a file named "open_flow13/oxm_arp_sha_field.raw" with "Pio::Match" class
704
+ Then the message has the following fields and values:
700
705
  | field | value |
701
706
  | ether_type | 2054 |
702
707
  | arp_sender_hardware_address | 11:22:33:44:55:66 |
703
708
 
704
709
  Scenario: read (file: open_flow13/oxm_masked_arp_sha_field.raw)
705
- When I try to parse a file named "open_flow13/oxm_masked_arp_sha_field.raw" with "Pio::Match" class
706
- Then it should finish successfully
707
- And the message has the following fields and values:
710
+ When I parse a file named "open_flow13/oxm_masked_arp_sha_field.raw" with "Pio::Match" class
711
+ Then the message has the following fields and values:
708
712
  | field | value |
709
713
  | ether_type | 2054 |
710
714
  | arp_sender_hardware_address | 11:22:33:44:55:66 |
711
715
  | arp_sender_hardware_address_mask | ff:ff:ff:ff:ff:ff |
712
716
 
713
717
  Scenario: read (file: open_flow13/oxm_arp_tha_field.raw)
714
- When I try to parse a file named "open_flow13/oxm_arp_tha_field.raw" with "Pio::Match" class
715
- Then it should finish successfully
716
- And the message has the following fields and values:
718
+ When I parse a file named "open_flow13/oxm_arp_tha_field.raw" with "Pio::Match" class
719
+ Then the message has the following fields and values:
717
720
  | field | value |
718
721
  | ether_type | 2054 |
719
722
  | arp_target_hardware_address | 11:22:33:44:55:66 |
720
723
 
721
724
  Scenario: read (file: open_flow13/oxm_masked_arp_tha_field.raw)
722
- When I try to parse a file named "open_flow13/oxm_masked_arp_tha_field.raw" with "Pio::Match" class
723
- Then it should finish successfully
724
- And the message has the following fields and values:
725
+ When I parse a file named "open_flow13/oxm_masked_arp_tha_field.raw" with "Pio::Match" class
726
+ Then the message has the following fields and values:
725
727
  | field | value |
726
728
  | ether_type | 2054 |
727
729
  | arp_target_hardware_address | 11:22:33:44:55:66 |
728
730
  | arp_target_hardware_address_mask | ff:ff:ff:ff:ff:ff |
729
731
 
730
732
  Scenario: read (file: open_flow13/oxm_ipv6_source_field.raw)
731
- When I try to parse a file named "open_flow13/oxm_ipv6_source_field.raw" with "Pio::Match" class
732
- Then it should finish successfully
733
- And the message has the following fields and values:
733
+ When I parse a file named "open_flow13/oxm_ipv6_source_field.raw" with "Pio::Match" class
734
+ Then the message has the following fields and values:
734
735
  | field | value |
735
736
  | ether_type | 34525 |
736
737
  | ipv6_source_address | 2001:db8:bd05:1d2:288a:1fc0:1:10ee |
737
738
 
738
739
  Scenario: read (file: open_flow13/oxm_masked_ipv6_source_field.raw)
739
- When I try to parse a file named "open_flow13/oxm_masked_ipv6_source_field.raw" with "Pio::Match" class
740
- Then it should finish successfully
741
- And the message has the following fields and values:
740
+ When I parse a file named "open_flow13/oxm_masked_ipv6_source_field.raw" with "Pio::Match" class
741
+ Then the message has the following fields and values:
742
742
  | field | value |
743
743
  | ether_type | 34525 |
744
744
  | ipv6_source_address | 2001:db8:bd05:1d2:288a:1fc0:1:10ee |
745
745
  | ipv6_source_address_mask | ffff:ffff:ffff:ffff:: |
746
746
 
747
747
  Scenario: read (file: open_flow13/oxm_ipv6_destination_field.raw)
748
- When I try to parse a file named "open_flow13/oxm_ipv6_destination_field.raw" with "Pio::Match" class
749
- Then it should finish successfully
750
- And the message has the following fields and values:
748
+ When I parse a file named "open_flow13/oxm_ipv6_destination_field.raw" with "Pio::Match" class
749
+ Then the message has the following fields and values:
751
750
  | field | value |
752
751
  | ether_type | 34525 |
753
752
  | ipv6_destination_address | 2001:db8:bd05:1d2:288a:1fc0:1:10ee |
754
753
 
755
754
  Scenario: read (file: open_flow13/oxm_masked_ipv6_destination_field.raw)
756
- When I try to parse a file named "open_flow13/oxm_masked_ipv6_destination_field.raw" with "Pio::Match" class
757
- Then it should finish successfully
758
- And the message has the following fields and values:
755
+ When I parse a file named "open_flow13/oxm_masked_ipv6_destination_field.raw" with "Pio::Match" class
756
+ Then the message has the following fields and values:
759
757
  | field | value |
760
758
  | ether_type | 34525 |
761
759
  | ipv6_destination_address | 2001:db8:bd05:1d2:288a:1fc0:1:10ee |
762
760
  | ipv6_destination_address_mask | ffff:ffff:ffff:ffff:: |
763
761
 
764
762
  Scenario: read (file: open_flow13/oxm_tunnel_id_field.raw)
765
- When I try to parse a file named "open_flow13/oxm_tunnel_id_field.raw" with "Pio::Match" class
766
- Then it should finish successfully
767
- And the message has the following fields and values:
763
+ When I parse a file named "open_flow13/oxm_tunnel_id_field.raw" with "Pio::Match" class
764
+ Then the message has the following fields and values:
768
765
  | field | value |
769
766
  | tunnel_id | 1 |
770
767
 
771
768
  Scenario: read (file: open_flow13/oxm_masked_tunnel_id_field.raw)
772
- When I try to parse a file named "open_flow13/oxm_masked_tunnel_id_field.raw" with "Pio::Match" class
773
- Then it should finish successfully
774
- And the message has the following fields and values:
769
+ When I parse a file named "open_flow13/oxm_masked_tunnel_id_field.raw" with "Pio::Match" class
770
+ Then the message has the following fields and values:
775
771
  | field | value |
776
772
  | tunnel_id | 1 |
777
773
  | tunnel_id_mask | 9223372036854775808 |
778
774
 
779
- Scenario: read (file: open_flow13/oxm_invalid_field.raw)
780
- When I try to parse a file named "open_flow13/oxm_invalid_field.raw" with "Pio::Match" class
781
- Then it should fail with "RuntimeError", "Unknown OXM field value: 40"
782
-
783
775
  Scenario: read (file: open_flow13/oxm_experimenter_stratos_basic_dot11.raw)
784
- When I try to parse a file named "open_flow13/oxm_experimenter_stratos_basic_dot11.raw" with "Pio::Match" class
785
- Then it should finish successfully
786
- And the message has the following fields and values:
776
+ When I parse a file named "open_flow13/oxm_experimenter_stratos_basic_dot11.raw" with "Pio::Match" class
777
+ Then the message has the following fields and values:
787
778
  | field | value |
788
779
  | match_fields.at(0).oxm_field | 0 |
789
780
  | match_fields.at(0).experimenter | 4278247501 |