pio 0.30.0 → 0.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -0
  3. data/README.md +6 -49
  4. data/Rakefile +4 -4
  5. data/features/{arp.feature → arp/arp.feature} +14 -30
  6. data/features/arp/arp_reply.feature +69 -0
  7. data/features/arp/arp_request.feature +67 -0
  8. data/features/dhcp.feature +157 -162
  9. data/features/ethernet_header.feature +149 -0
  10. data/features/icmp/icmp.feature +47 -0
  11. data/features/icmp/icmp_reply.feature +93 -0
  12. data/features/icmp/icmp_request.feature +89 -0
  13. data/features/ipv4_header.feature +89 -0
  14. data/features/lldp.feature +5 -8
  15. data/features/open_flow/header.feature +13 -0
  16. data/features/open_flow/nicira_resubmit.feature +4 -22
  17. data/features/open_flow/nicira_resubmit_table.feature +6 -16
  18. data/features/open_flow10/aggregate_stats_reply.feature +5 -7
  19. data/features/open_flow10/aggregate_stats_request.feature +12 -14
  20. data/features/open_flow10/bad_request.feature +7 -24
  21. data/features/open_flow10/barrier_reply.feature +14 -25
  22. data/features/open_flow10/barrier_request.feature +12 -25
  23. data/features/open_flow10/description_stats_reply.feature +9 -7
  24. data/features/open_flow10/description_stats_request.feature +12 -25
  25. data/features/open_flow10/echo_reply.feature +14 -35
  26. data/features/open_flow10/echo_request.feature +16 -39
  27. data/features/open_flow10/enqueue.feature +3 -4
  28. data/features/open_flow10/exact_match.feature +5 -5
  29. data/features/open_flow10/features_reply.feature +28 -73
  30. data/features/open_flow10/features_request.feature +10 -28
  31. data/features/open_flow10/flow_mod.feature +4 -188
  32. data/features/open_flow10/flow_removed.feature +28 -30
  33. data/features/open_flow10/flow_stats_reply.feature +5 -89
  34. data/features/open_flow10/flow_stats_request.feature +12 -42
  35. data/features/open_flow10/hello.feature +10 -32
  36. data/features/open_flow10/hello_failed.feature +7 -57
  37. data/features/open_flow10/packet_in.feature +130 -49
  38. data/features/open_flow10/packet_out.feature +29 -18
  39. data/features/open_flow10/port_stats_request.feature +8 -29
  40. data/features/open_flow10/port_status.feature +22 -21
  41. data/features/open_flow10/queue_stats_request.feature +12 -30
  42. data/features/open_flow10/send_out_port.feature +17 -25
  43. data/features/open_flow10/set_destination_mac_address.feature +3 -4
  44. data/features/open_flow10/set_ip_destination_address.feature +3 -4
  45. data/features/open_flow10/set_source_ip_address.feature +3 -4
  46. data/features/open_flow10/set_source_mac_address.feature +3 -4
  47. data/features/open_flow10/set_tos.feature +3 -4
  48. data/features/open_flow10/set_transport_destination_port.feature +3 -4
  49. data/features/open_flow10/set_transport_source_port.feature +3 -4
  50. data/features/open_flow10/set_vlan_priority.feature +3 -4
  51. data/features/open_flow10/set_vlan_vid.feature +3 -4
  52. data/features/open_flow10/strip_vlan_header.feature +3 -4
  53. data/features/open_flow10/table_stats_request.feature +11 -13
  54. data/features/open_flow10/vendor_action.feature +4 -5
  55. data/features/open_flow13/apply_actions.feature +15 -18
  56. data/features/open_flow13/bad_request.feature +7 -13
  57. data/features/open_flow13/copy_ttl_inwards.feature +13 -0
  58. data/features/open_flow13/copy_ttl_outwards.feature +13 -0
  59. data/features/open_flow13/decrement_ip_ttl.feature +11 -0
  60. data/features/open_flow13/echo_reply.feature +16 -42
  61. data/features/open_flow13/echo_request.feature +16 -42
  62. data/features/open_flow13/features_reply.feature +4 -25
  63. data/features/open_flow13/features_request.feature +7 -36
  64. data/features/open_flow13/flow_mod.feature +16 -76
  65. data/features/open_flow13/goto_table.feature +18 -20
  66. data/features/open_flow13/hello.feature +7 -37
  67. data/features/open_flow13/hello_failed.feature +7 -30
  68. data/features/open_flow13/match.feature +239 -248
  69. data/features/open_flow13/meter.feature +18 -20
  70. data/features/open_flow13/nicira_conjunction.feature +15 -0
  71. data/features/open_flow13/nicira_reg_load.feature +27 -42
  72. data/features/open_flow13/nicira_reg_move.feature +41 -35
  73. data/features/open_flow13/nicira_send_out_port.feature +21 -13
  74. data/features/open_flow13/nicira_stack_pop.feature +26 -0
  75. data/features/open_flow13/nicira_stack_push.feature +26 -0
  76. data/features/open_flow13/packet_in.feature +7 -34
  77. data/features/open_flow13/packet_out.feature +7 -45
  78. data/features/open_flow13/send_out_port.feature +19 -28
  79. data/features/open_flow13/set_arp_operation.feature +4 -5
  80. data/features/open_flow13/set_arp_sender_hardware_address.feature +3 -4
  81. data/features/open_flow13/set_arp_sender_protocol_address.feature +3 -4
  82. data/features/open_flow13/set_destination_mac_address.feature +3 -4
  83. data/features/open_flow13/set_ip_ttl.feature +12 -0
  84. data/features/open_flow13/set_metadata.feature +3 -4
  85. data/features/open_flow13/set_source_mac_address.feature +3 -4
  86. data/features/open_flow13/stats_request.feature +4 -7
  87. data/features/open_flow13/write_metadata.feature +20 -22
  88. data/features/open_flow_read.feature +24 -5
  89. data/features/open_flow_version.feature +1 -1
  90. data/features/parser.feature +8 -9
  91. data/features/step_definitions/open_flow_steps.rb +11 -16
  92. data/features/step_definitions/packet_data_steps.rb +16 -32
  93. data/features/step_definitions/ruby_steps.rb +7 -0
  94. data/features/step_definitions/show_stats_steps.rb +3 -3
  95. data/features/support/env.rb +1 -0
  96. data/features/support/hooks.rb +2 -2
  97. data/features/udp.feature +26 -27
  98. data/lib/pio.rb +1 -1
  99. data/lib/pio/arp.rb +9 -6
  100. data/lib/pio/arp/format.rb +3 -7
  101. data/lib/pio/arp/message.rb +8 -4
  102. data/lib/pio/arp/reply.rb +9 -32
  103. data/lib/pio/arp/request.rb +9 -33
  104. data/lib/pio/class_inspector.rb +18 -0
  105. data/lib/pio/dhcp.rb +2 -2
  106. data/lib/pio/dhcp/frame.rb +4 -4
  107. data/lib/pio/dhcp/optional_tlv.rb +3 -3
  108. data/lib/pio/ethernet_frame.rb +20 -0
  109. data/lib/pio/ethernet_header.rb +35 -13
  110. data/lib/pio/icmp.rb +8 -5
  111. data/lib/pio/icmp/format.rb +19 -22
  112. data/lib/pio/icmp/message.rb +18 -4
  113. data/lib/pio/icmp/reply.rb +8 -34
  114. data/lib/pio/icmp/request.rb +8 -43
  115. data/lib/pio/instance_inspector.rb +14 -0
  116. data/lib/pio/ipv4_address.rb +11 -11
  117. data/lib/pio/ipv4_header.rb +24 -2
  118. data/lib/pio/lldp/frame.rb +2 -2
  119. data/lib/pio/lldp/optional_tlv.rb +2 -2
  120. data/lib/pio/mac.rb +7 -3
  121. data/lib/pio/message.rb +50 -0
  122. data/lib/pio/monkey_patch/bindata_record.rb +6 -0
  123. data/lib/pio/monkey_patch/bindata_string.rb +10 -0
  124. data/lib/pio/monkey_patch/integer/base_conversions.rb +1 -1
  125. data/lib/pio/monkey_patch/uint.rb +9 -0
  126. data/lib/pio/monkey_patch/uint/base_conversions.rb +14 -0
  127. data/lib/pio/open_flow.rb +38 -52
  128. data/lib/pio/open_flow/action.rb +8 -4
  129. data/lib/pio/open_flow/buffer_id.rb +19 -0
  130. data/lib/pio/open_flow/datapath_id.rb +3 -3
  131. data/lib/pio/open_flow/error_message.rb +32 -0
  132. data/lib/pio/open_flow/flags.rb +15 -6
  133. data/lib/pio/open_flow/flow_match.rb +10 -0
  134. data/lib/pio/open_flow/header.rb +26 -0
  135. data/lib/pio/open_flow/hello_failed_code.rb +1 -1
  136. data/lib/pio/open_flow/instruction.rb +10 -0
  137. data/lib/pio/open_flow/message.rb +49 -14
  138. data/lib/pio/open_flow/nicira_resubmit.rb +13 -11
  139. data/lib/pio/open_flow/nicira_resubmit_table.rb +17 -10
  140. data/lib/pio/open_flow/parser.rb +19 -0
  141. data/lib/pio/open_flow/port.rb +2 -2
  142. data/lib/pio/open_flow/transaction_id.rb +2 -2
  143. data/lib/pio/open_flow/version.rb +22 -0
  144. data/lib/pio/open_flow10/actions.rb +16 -16
  145. data/lib/pio/open_flow10/aggregate_stats/reply.rb +2 -1
  146. data/lib/pio/open_flow10/aggregate_stats/request.rb +1 -3
  147. data/lib/pio/open_flow10/barrier/reply.rb +1 -1
  148. data/lib/pio/open_flow10/barrier/request.rb +1 -1
  149. data/lib/pio/open_flow10/description_stats/reply.rb +1 -1
  150. data/lib/pio/open_flow10/description_stats/request.rb +1 -3
  151. data/lib/pio/open_flow10/echo/reply.rb +3 -3
  152. data/lib/pio/open_flow10/echo/request.rb +3 -3
  153. data/lib/pio/open_flow10/enqueue.rb +3 -3
  154. data/lib/pio/open_flow10/error.rb +3 -13
  155. data/lib/pio/open_flow10/error/bad_request.rb +5 -29
  156. data/lib/pio/open_flow10/error/bad_request/bad_request_code.rb +35 -0
  157. data/lib/pio/open_flow10/error/error_type10.rb +1 -1
  158. data/lib/pio/open_flow10/error/hello_failed.rb +6 -4
  159. data/lib/pio/open_flow10/exact_match.rb +12 -10
  160. data/lib/pio/open_flow10/features/reply.rb +16 -31
  161. data/lib/pio/open_flow10/features/request.rb +1 -4
  162. data/lib/pio/open_flow10/flow_mod.rb +8 -33
  163. data/lib/pio/open_flow10/flow_mod/command.rb +28 -0
  164. data/lib/pio/open_flow10/flow_removed.rb +2 -17
  165. data/lib/pio/open_flow10/flow_removed/reason.rb +22 -0
  166. data/lib/pio/open_flow10/flow_stats/reply.rb +3 -4
  167. data/lib/pio/open_flow10/flow_stats/request.rb +1 -3
  168. data/lib/pio/open_flow10/hello.rb +1 -4
  169. data/lib/pio/open_flow10/match.rb +13 -12
  170. data/lib/pio/open_flow10/packet_in.rb +32 -28
  171. data/lib/pio/open_flow10/packet_in/reason.rb +25 -0
  172. data/lib/pio/open_flow10/packet_out.rb +5 -6
  173. data/lib/pio/open_flow10/phy_port16.rb +36 -58
  174. data/lib/pio/open_flow10/port_stats/request.rb +1 -3
  175. data/lib/pio/open_flow10/port_status.rb +23 -30
  176. data/lib/pio/open_flow10/port_status/reason.rb +21 -0
  177. data/lib/pio/open_flow10/queue_stats/request.rb +1 -3
  178. data/lib/pio/open_flow10/send_out_port.rb +2 -2
  179. data/lib/pio/open_flow10/set_tos.rb +2 -2
  180. data/lib/pio/open_flow10/set_transport_port.rb +4 -2
  181. data/lib/pio/open_flow10/set_vlan_priority.rb +1 -1
  182. data/lib/pio/open_flow10/set_vlan_vid.rb +1 -1
  183. data/lib/pio/open_flow10/stats_reply.rb +7 -10
  184. data/lib/pio/open_flow10/stats_request.rb +16 -15
  185. data/lib/pio/open_flow10/stats_type.rb +1 -1
  186. data/lib/pio/open_flow10/table_stats/request.rb +1 -3
  187. data/lib/pio/open_flow10/vendor_action.rb +22 -20
  188. data/lib/pio/open_flow13.rb +7 -0
  189. data/lib/pio/open_flow13/actions.rb +34 -32
  190. data/lib/pio/open_flow13/apply.rb +25 -22
  191. data/lib/pio/open_flow13/copy_ttl_inwards.rb +15 -0
  192. data/lib/pio/open_flow13/copy_ttl_outwards.rb +15 -0
  193. data/lib/pio/open_flow13/decrement_ip_ttl.rb +15 -0
  194. data/lib/pio/open_flow13/echo/reply.rb +3 -3
  195. data/lib/pio/open_flow13/echo/request.rb +3 -3
  196. data/lib/pio/open_flow13/error.rb +7 -18
  197. data/lib/pio/open_flow13/error/bad_request.rb +4 -3
  198. data/lib/pio/open_flow13/error/error_type13.rb +1 -1
  199. data/lib/pio/open_flow13/error/hello_failed.rb +3 -2
  200. data/lib/pio/open_flow13/features/reply.rb +9 -16
  201. data/lib/pio/open_flow13/features/request.rb +1 -1
  202. data/lib/pio/open_flow13/flow_mod.rb +14 -19
  203. data/lib/pio/open_flow13/goto_table.rb +26 -24
  204. data/lib/pio/open_flow13/hello.rb +3 -4
  205. data/lib/pio/open_flow13/match.rb +173 -9
  206. data/lib/pio/open_flow13/meter.rb +23 -20
  207. data/lib/pio/open_flow13/nicira_conjunction.rb +26 -0
  208. data/lib/pio/open_flow13/nicira_reg_load.rb +44 -24
  209. data/lib/pio/open_flow13/nicira_reg_move.rb +77 -35
  210. data/lib/pio/open_flow13/nicira_send_out_port.rb +37 -21
  211. data/lib/pio/open_flow13/nicira_stack_pop.rb +49 -0
  212. data/lib/pio/open_flow13/nicira_stack_push.rb +49 -0
  213. data/lib/pio/open_flow13/packet_in.rb +11 -8
  214. data/lib/pio/open_flow13/packet_out.rb +9 -8
  215. data/lib/pio/open_flow13/set_ip_ttl.rb +16 -0
  216. data/lib/pio/open_flow13/stats_request.rb +2 -4
  217. data/lib/pio/open_flow13/write_metadata.rb +40 -38
  218. data/lib/pio/options.rb +8 -3
  219. data/lib/pio/parser.rb +7 -16
  220. data/lib/pio/ruby_dumper.rb +69 -0
  221. data/lib/pio/type/ether_type.rb +31 -0
  222. data/lib/pio/type/ip_address.rb +8 -0
  223. data/lib/pio/type/mac_address.rb +10 -0
  224. data/lib/pio/udp.rb +3 -3
  225. data/lib/pio/udp_header.rb +1 -1
  226. data/lib/pio/version.rb +1 -1
  227. data/pio.gemspec +5 -38
  228. data/spec/pio/arp/reply_spec.rb +0 -4
  229. data/spec/pio/arp/request_spec.rb +0 -4
  230. data/spec/pio/arp_spec.rb +0 -4
  231. data/spec/pio/icmp/reply_spec.rb +4 -8
  232. data/spec/pio/icmp/request_spec.rb +6 -10
  233. data/spec/pio/icmp_spec.rb +8 -12
  234. data/spec/pio/monkey_patch/integer_spec.rb +23 -0
  235. data/spec/pio/open_flow/nicira_resubmit_spec.rb +19 -0
  236. data/spec/pio/open_flow/nicira_resubmit_table_spec.rb +20 -0
  237. data/spec/pio/open_flow10/error/hello_failed_spec.rb +2 -2
  238. data/spec/pio/open_flow10/flow_mod_spec.rb +24 -24
  239. data/spec/pio/open_flow10/flow_stats_request_spec.rb +3 -3
  240. data/spec/pio/open_flow10/hello_spec.rb +0 -2
  241. data/spec/pio/open_flow10/match_spec.rb +38 -38
  242. data/spec/pio/open_flow10/packet_out_spec.rb +0 -349
  243. data/spec/pio/open_flow10/phy_port16_spec.rb +5 -5
  244. data/spec/pio/open_flow13/error/hello_failed_spec.rb +2 -2
  245. data/spec/pio/open_flow13/goto_table_spec.rb +2 -2
  246. data/spec/pio/open_flow13/hello_spec.rb +15 -15
  247. data/spec/pio/open_flow13/match_spec.rb +29 -29
  248. data/spec/pio/open_flow13/meter_spec.rb +2 -2
  249. data/spec/pio/open_flow13/nicira_reg_load_spec.rb +71 -0
  250. data/spec/pio/open_flow13/nicira_reg_move_spec.rb +40 -0
  251. data/spec/pio/open_flow13/nicira_send_out_port_spec.rb +29 -0
  252. data/spec/pio/open_flow13/write_metadata_spec.rb +3 -3
  253. data/spec/pio/open_flow_spec.rb +6 -6
  254. data/spec/spec_helper.rb +1 -1
  255. data/spec/support/shared_examples_for_openflow_messages.rb +5 -13
  256. metadata +191 -790
  257. data/LICENSE +0 -674
  258. data/bin/_guard-core +0 -16
  259. data/bin/byebug +0 -16
  260. data/bin/cc-tddium-post-worker +0 -16
  261. data/bin/cdiff +0 -16
  262. data/bin/coderay +0 -16
  263. data/bin/colortab +0 -16
  264. data/bin/coveralls +0 -16
  265. data/bin/cucumber +0 -16
  266. data/bin/decolor +0 -16
  267. data/bin/flay +0 -16
  268. data/bin/flog +0 -16
  269. data/bin/guard +0 -16
  270. data/bin/htmldiff +0 -16
  271. data/bin/inch +0 -16
  272. data/bin/ldiff +0 -16
  273. data/bin/listen +0 -16
  274. data/bin/minitar +0 -16
  275. data/bin/pry +0 -16
  276. data/bin/rake +0 -16
  277. data/bin/reek +0 -16
  278. data/bin/relish +0 -16
  279. data/bin/restclient +0 -16
  280. data/bin/rspec +0 -16
  281. data/bin/rubocop +0 -16
  282. data/bin/ruby-parse +0 -16
  283. data/bin/ruby-rewrite +0 -16
  284. data/bin/ruby_parse +0 -16
  285. data/bin/ruby_parse_extract_error +0 -16
  286. data/bin/sparkr +0 -16
  287. data/bin/term_display +0 -16
  288. data/bin/term_mandel +0 -16
  289. data/bin/terminal-notifier +0 -16
  290. data/bin/thor +0 -16
  291. data/bin/unparser +0 -16
  292. data/bin/yard +0 -16
  293. data/bin/yardoc +0 -16
  294. data/bin/yri +0 -16
  295. data/features/arp-storm.pcap +0 -0
  296. data/features/arp.pcap +0 -0
  297. data/features/dhcp.pcap +0 -0
  298. data/features/icmp.feature +0 -130
  299. data/features/icmp.pcap +0 -0
  300. data/features/icmpv6.pcap +0 -0
  301. data/features/lldp.detailed.pcap +0 -0
  302. data/features/lldp.minimal.pcap +0 -0
  303. data/features/open_flow10/aggregate_stats_reply.raw +0 -0
  304. data/features/open_flow10/aggregate_stats_request.raw +0 -0
  305. data/features/open_flow10/bad_request.raw +0 -0
  306. data/features/open_flow10/barrier_reply.raw +0 -0
  307. data/features/open_flow10/barrier_request.raw +0 -0
  308. data/features/open_flow10/description_stats_reply.raw +0 -0
  309. data/features/open_flow10/description_stats_request.raw +0 -0
  310. data/features/open_flow10/echo_reply.raw +0 -0
  311. data/features/open_flow10/echo_request.raw +0 -0
  312. data/features/open_flow10/error.raw +0 -0
  313. data/features/open_flow10/features_reply.raw +0 -0
  314. data/features/open_flow10/features_request.raw +0 -0
  315. data/features/open_flow10/flow_mod_add.raw +0 -0
  316. data/features/open_flow10/flow_mod_delete.raw +0 -0
  317. data/features/open_flow10/flow_mod_delete_strict.raw +0 -0
  318. data/features/open_flow10/flow_mod_modify.raw +0 -0
  319. data/features/open_flow10/flow_mod_modify_strict.raw +0 -0
  320. data/features/open_flow10/flow_removed.raw +0 -0
  321. data/features/open_flow10/flow_stats_reply.raw +0 -0
  322. data/features/open_flow10/flow_stats_request.raw +0 -0
  323. data/features/open_flow10/get_config_reply.raw +0 -0
  324. data/features/open_flow10/get_config_request.raw +0 -0
  325. data/features/open_flow10/hello.raw +0 -0
  326. data/features/open_flow10/hello_failed.raw +0 -0
  327. data/features/open_flow10/nx_flow_mod_add.raw +0 -0
  328. data/features/open_flow10/nx_flow_mod_delete.raw +0 -0
  329. data/features/open_flow10/nx_flow_mod_delete_strict.raw +0 -0
  330. data/features/open_flow10/nx_flow_mod_modify.raw +0 -0
  331. data/features/open_flow10/nx_flow_mod_modify_strict.raw +0 -0
  332. data/features/open_flow10/nxast_learn.raw +0 -0
  333. data/features/open_flow10/packet_in.raw +0 -0
  334. data/features/open_flow10/packet_in_arp_reply.raw +0 -0
  335. data/features/open_flow10/packet_in_arp_request.raw +0 -0
  336. data/features/open_flow10/packet_in_cbench.raw +0 -0
  337. data/features/open_flow10/packet_out.raw +0 -0
  338. data/features/open_flow10/port_mod.raw +0 -0
  339. data/features/open_flow10/port_stats_reply.raw +0 -0
  340. data/features/open_flow10/port_stats_request.raw +0 -0
  341. data/features/open_flow10/port_status.raw +0 -0
  342. data/features/open_flow10/queue_get_config_reply.raw +0 -0
  343. data/features/open_flow10/queue_get_config_request.raw +0 -0
  344. data/features/open_flow10/queue_stats_request.raw +0 -0
  345. data/features/open_flow10/set_config.raw +0 -0
  346. data/features/open_flow10/table_stats_reply.raw +0 -0
  347. data/features/open_flow10/table_stats_request.raw +0 -0
  348. data/features/open_flow10/vendor.raw +0 -0
  349. data/features/open_flow10/vendor_stats_request.raw +0 -0
  350. data/features/open_flow13/action_copy_ttl_in.raw +0 -0
  351. data/features/open_flow13/action_copy_ttl_out.raw +0 -0
  352. data/features/open_flow13/action_dec_mpls_ttl.raw +0 -0
  353. data/features/open_flow13/action_dec_nw_ttl.raw +0 -0
  354. data/features/open_flow13/action_group.raw +0 -0
  355. data/features/open_flow13/action_pop_mpls.raw +0 -0
  356. data/features/open_flow13/action_pop_pbb.raw +0 -0
  357. data/features/open_flow13/action_pop_vlan.raw +0 -0
  358. data/features/open_flow13/action_push_mpls.raw +0 -0
  359. data/features/open_flow13/action_push_pbb.raw +0 -0
  360. data/features/open_flow13/action_push_vlan.raw +0 -0
  361. data/features/open_flow13/action_set_field.raw +0 -0
  362. data/features/open_flow13/action_set_mpls_ttl.raw +0 -0
  363. data/features/open_flow13/action_set_nw_ttl.raw +0 -0
  364. data/features/open_flow13/action_set_queue.raw +0 -0
  365. data/features/open_flow13/apply_actions.raw +0 -0
  366. data/features/open_flow13/bad_request.raw +0 -0
  367. data/features/open_flow13/echo_reply_body.raw +0 -0
  368. data/features/open_flow13/echo_reply_no_body.raw +0 -0
  369. data/features/open_flow13/echo_request_body.raw +0 -0
  370. data/features/open_flow13/echo_request_no_body.raw +0 -0
  371. data/features/open_flow13/features_reply.raw +0 -0
  372. data/features/open_flow13/features_request.raw +0 -0
  373. data/features/open_flow13/flow_add_apply_no_match.raw +0 -0
  374. data/features/open_flow13/flow_mod_add_apply_no_match.raw +0 -0
  375. data/features/open_flow13/flow_mod_no_match_or_instructions.raw +0 -0
  376. data/features/open_flow13/hello_failed.raw +0 -0
  377. data/features/open_flow13/hello_no_version_bitmap.raw +0 -0
  378. data/features/open_flow13/hello_version_bitmap.raw +0 -0
  379. data/features/open_flow13/instruction_clear_actions.raw +0 -0
  380. data/features/open_flow13/instruction_goto_table.raw +0 -0
  381. data/features/open_flow13/instruction_meter.raw +0 -0
  382. data/features/open_flow13/instruction_write_actions.raw +0 -0
  383. data/features/open_flow13/instruction_write_metadata.raw +0 -0
  384. data/features/open_flow13/oxm_arp_op_field.raw +0 -0
  385. data/features/open_flow13/oxm_arp_sha_field.raw +0 -0
  386. data/features/open_flow13/oxm_arp_spa_field.raw +0 -0
  387. data/features/open_flow13/oxm_arp_tha_field.raw +0 -0
  388. data/features/open_flow13/oxm_arp_tpa_field.raw +0 -0
  389. data/features/open_flow13/oxm_ether_destination_field.raw +0 -0
  390. data/features/open_flow13/oxm_ether_source_field.raw +0 -0
  391. data/features/open_flow13/oxm_ether_type_field.raw +0 -0
  392. data/features/open_flow13/oxm_experimenter_stratos_basic_dot11.raw +0 -0
  393. data/features/open_flow13/oxm_icmpv4_code_field.raw +0 -0
  394. data/features/open_flow13/oxm_icmpv4_type_field.raw +0 -0
  395. data/features/open_flow13/oxm_in_phy_port_field.raw +0 -0
  396. data/features/open_flow13/oxm_in_port_field.raw +0 -0
  397. data/features/open_flow13/oxm_invalid_field.raw +0 -0
  398. data/features/open_flow13/oxm_ip_dscp_field.raw +0 -0
  399. data/features/open_flow13/oxm_ip_ecn_field.raw +0 -0
  400. data/features/open_flow13/oxm_ipv4_destination_field.raw +0 -0
  401. data/features/open_flow13/oxm_ipv4_source_field.raw +0 -0
  402. data/features/open_flow13/oxm_ipv6_destination_field.raw +0 -0
  403. data/features/open_flow13/oxm_ipv6_source_field.raw +0 -0
  404. data/features/open_flow13/oxm_masked_arp_sha_field.raw +0 -0
  405. data/features/open_flow13/oxm_masked_arp_spa_field.raw +0 -0
  406. data/features/open_flow13/oxm_masked_arp_tha_field.raw +0 -0
  407. data/features/open_flow13/oxm_masked_arp_tpa_field.raw +0 -0
  408. data/features/open_flow13/oxm_masked_ether_destination_field.raw +0 -0
  409. data/features/open_flow13/oxm_masked_ether_source_field.raw +0 -0
  410. data/features/open_flow13/oxm_masked_ipv4_destination_field.raw +0 -0
  411. data/features/open_flow13/oxm_masked_ipv4_source_field.raw +0 -0
  412. data/features/open_flow13/oxm_masked_ipv6_destination_field.raw +0 -0
  413. data/features/open_flow13/oxm_masked_ipv6_source_field.raw +0 -0
  414. data/features/open_flow13/oxm_masked_tunnel_id_field.raw +0 -0
  415. data/features/open_flow13/oxm_metadata_field.raw +0 -0
  416. data/features/open_flow13/oxm_metadata_masked_field.raw +0 -0
  417. data/features/open_flow13/oxm_no_fields.raw +0 -0
  418. data/features/open_flow13/oxm_sctp_destination_field.raw +0 -0
  419. data/features/open_flow13/oxm_sctp_source_field.raw +0 -0
  420. data/features/open_flow13/oxm_tcp_destination_field.raw +0 -0
  421. data/features/open_flow13/oxm_tcp_field.raw +0 -0
  422. data/features/open_flow13/oxm_tcp_source_field.raw +0 -0
  423. data/features/open_flow13/oxm_tunnel_id_field.raw +0 -0
  424. data/features/open_flow13/oxm_udp_destination_field.raw +0 -0
  425. data/features/open_flow13/oxm_udp_field.raw +0 -0
  426. data/features/open_flow13/oxm_udp_source_field.raw +0 -0
  427. data/features/open_flow13/oxm_vlan_pcp_field.raw +0 -0
  428. data/features/open_flow13/oxm_vlan_vid_field.raw +0 -0
  429. data/features/open_flow13/packet_in.raw +0 -0
  430. data/features/open_flow13/packet_out.raw +0 -0
  431. data/features/open_flow13/send_out_port.raw +0 -0
  432. data/features/open_flow13/table_stats_reply.raw +0 -0
  433. data/features/open_flow13/table_stats_request.raw +0 -0
  434. data/features/step_definitions/LICENSE +0 -675
  435. data/features/udp_no_payload.raw +0 -0
  436. data/features/udp_with_payload.raw +0 -0
  437. data/lib/pio/icmp/options.rb +0 -21
  438. data/lib/pio/open_flow/error.rb +0 -19
  439. data/lib/pio/open_flow/open_flow_header.rb +0 -31
  440. data/lib/pio/open_flow13/buffer_id.rb +0 -17
  441. data/spec/pio/arp/reply/options_spec.rb +0 -143
  442. data/spec/pio/arp/request/options_spec.rb +0 -113
@@ -0,0 +1,26 @@
1
+ require 'pio/open_flow/nicira_action'
2
+
3
+ module Pio
4
+ module OpenFlow13
5
+ # NXAST_CONJUNCTION action
6
+ class NiciraConjunction < OpenFlow::NiciraAction
7
+ nicira_action_header action_type: 0xffff,
8
+ action_length: 16,
9
+ subtype: 34
10
+ uint8 :_clause
11
+ uint8 :n_clauses
12
+ uint32 :conjunction_id
13
+
14
+ def initialize(options)
15
+ super(_clause: options[:clause] - 1,
16
+ n_clauses: options[:n_clauses],
17
+ conjunction_id: options[:conjunction_id])
18
+ end
19
+
20
+ def clause
21
+ _clause + 1
22
+ end
23
+ end
24
+ end
25
+ NiciraConjunction = OpenFlow13::NiciraConjunction
26
+ end
@@ -1,43 +1,63 @@
1
- require 'active_support/core_ext/string/inflections'
2
- require 'pio/open_flow/action'
1
+ require 'pio/open_flow/nicira_action'
2
+ require 'pio/open_flow13/match'
3
3
 
4
4
  module Pio
5
5
  module OpenFlow13
6
6
  # NXAST_REG_LOAD action
7
- class NiciraRegLoad < OpenFlow::Action
8
- action_header action_type: 0xffff, action_length: 24
9
- uint32 :experimenter_id, value: 0x2320
10
- uint16 :experimenter_type, value: 7
11
- bit10 :offset_internal, initial_value: 0
12
- bit6 :n_bits_internal
13
- uint32 :destination_internal
14
- uint64 :value_internal
15
-
16
- attr_reader :destination
7
+ class NiciraRegLoad < OpenFlow::NiciraAction
8
+ nicira_action_header action_type: 0xffff,
9
+ action_length: 24,
10
+ subtype: 7
11
+ bit10 :_offset, initial_value: 0
12
+ bit6 :_n_bits
13
+ struct :_destination do
14
+ uint16 :oxm_class
15
+ bit7 :oxm_field
16
+ bit1 :oxm_hasmask, value: 0
17
+ bit8 :oxm_length
18
+ end
19
+ uint64 :_value
17
20
 
18
- # rubocop:disable AbcSize
19
- # rubocop:disable LineLength
20
21
  def initialize(value, destination, options = {})
21
22
  @destination = destination
22
- oxm_klass = Match.const_get(destination.to_s.split('_').map(&:capitalize).join)
23
- super(value_internal: value,
24
- offset_internal: options[:offset] || 0,
25
- n_bits_internal: options[:n_bits] ? options[:n_bits] - 1 : oxm_klass.new.length * 8 - 1,
26
- destination_internal: ((oxm_klass.superclass.const_get(:OXM_CLASS) << 16) | (oxm_klass.const_get(:OXM_FIELD) << 9) | oxm_klass.new.length))
23
+ super(_value: value,
24
+ _offset: options[:offset] || 0,
25
+ _n_bits: (options[:n_bits] || oxm_length * 8) - 1,
26
+ _destination: { oxm_class: oxm_class,
27
+ oxm_field: oxm_field,
28
+ oxm_length: oxm_length })
27
29
  end
28
- # rubocop:enable AbcSize
29
- # rubocop:enable LineLength
30
+
31
+ attr_reader :destination
30
32
 
31
33
  def offset
32
- offset_internal
34
+ _offset
33
35
  end
34
36
 
35
37
  def n_bits
36
- n_bits_internal + 1
38
+ _n_bits + 1
37
39
  end
38
40
 
39
41
  def value
40
- value_internal
42
+ _value
43
+ end
44
+
45
+ private
46
+
47
+ def oxm_class
48
+ destination_oxm_class.const_get(:OXM_CLASS)
49
+ end
50
+
51
+ def oxm_field
52
+ destination_oxm_class.const_get(:OXM_FIELD)
53
+ end
54
+
55
+ def oxm_length
56
+ destination_oxm_class.new.length
57
+ end
58
+
59
+ def destination_oxm_class
60
+ Match.const_get(@destination.to_s.split('_').map(&:capitalize).join)
41
61
  end
42
62
  end
43
63
  end
@@ -1,42 +1,84 @@
1
- require 'active_support/core_ext/string/inflections'
2
- require 'pio/open_flow/action'
1
+ require 'pio/open_flow/nicira_action'
2
+ require 'pio/open_flow13/match'
3
3
 
4
4
  module Pio
5
5
  module OpenFlow13
6
6
  # NXAST_REG_MOVE action
7
- class NiciraRegMove < OpenFlow::Action
8
- action_header action_type: 0xffff, action_length: 24
9
- uint32 :experimenter_id, value: 0x2320
10
- uint16 :experimenter_type, value: 6
11
- uint16 :n_bits, initial_value: -> { source_oxm_length * 8 }
12
- uint16 :source_offset, value: 0
13
- uint16 :destination_offset, value: 0
14
- uint16 :source_oxm_class
15
- bit7 :source_oxm_field
16
- bit1 :source_oxm_hasmask, value: 0
17
- uint8 :source_oxm_length
18
- uint16 :destination_oxm_class
19
- bit7 :destination_oxm_field
20
- bit1 :destination_oxm_hasmask, value: 0
21
- uint8 :destination_oxm_length
22
-
23
- attr_reader :from
24
- attr_reader :to
25
-
26
- # rubocop:disable AbcSize
27
- def initialize(options)
28
- @from = options.fetch(:from)
29
- @to = options.fetch(:to)
30
- from_klass = Match.const_get(@from.to_s.classify)
31
- to_klass = Match.const_get(@to.to_s.classify)
32
- super(source_oxm_class: from_klass.superclass.const_get(:OXM_CLASS),
33
- source_oxm_field: from_klass.const_get(:OXM_FIELD),
34
- source_oxm_length: from_klass.new.length,
35
- destination_oxm_class: to_klass.superclass.const_get(:OXM_CLASS),
36
- destination_oxm_field: to_klass.const_get(:OXM_FIELD),
37
- destination_oxm_length: to_klass.new.length)
38
- end
39
- # rubocop:enable AbcSize
7
+ class NiciraRegMove < OpenFlow::NiciraAction
8
+ nicira_action_header action_type: 0xffff,
9
+ action_length: 24,
10
+ subtype: 6
11
+ uint16 :n_bits, initial_value: -> { _source[:oxm_length] * 8 }
12
+ uint16 :source_offset, initial_value: 0
13
+ uint16 :destination_offset, initial_value: 0
14
+ struct :_source do
15
+ uint16 :oxm_class
16
+ bit7 :oxm_field
17
+ bit1 :oxm_hasmask, value: 0
18
+ uint8 :oxm_length
19
+ end
20
+ struct :_destination do
21
+ uint16 :oxm_class
22
+ bit7 :oxm_field
23
+ bit1 :oxm_hasmask, value: 0
24
+ uint8 :oxm_length
25
+ end
26
+
27
+ # rubocop:disable MethodLength
28
+ def initialize(arguments)
29
+ @source = arguments.fetch(:source)
30
+ @destination = arguments.fetch(:destination)
31
+ registers = { _source: { oxm_class: source_oxm_class,
32
+ oxm_field: source_oxm_field,
33
+ oxm_length: source_oxm_length },
34
+ _destination: { oxm_class: destination_oxm_class,
35
+ oxm_field: destination_oxm_field,
36
+ oxm_length: destination_oxm_length } }
37
+ options = [:n_bits,
38
+ :source_offset,
39
+ :destination_offset].each_with_object({}) do |each, opts|
40
+ opts[each] = arguments[each] if arguments[each]
41
+ end
42
+ super registers.merge(options)
43
+ end
44
+ # rubocop:enable MethodLength
45
+
46
+ attr_reader :source
47
+ attr_reader :destination
48
+
49
+ private
50
+
51
+ def source_oxm_class
52
+ source_class.const_get(:OXM_CLASS)
53
+ end
54
+
55
+ def source_oxm_field
56
+ source_class.const_get(:OXM_FIELD)
57
+ end
58
+
59
+ def source_oxm_length
60
+ source_class.new.length
61
+ end
62
+
63
+ def source_class
64
+ Match.const_get(@source.to_s.split('_').map(&:capitalize).join)
65
+ end
66
+
67
+ def destination_oxm_class
68
+ destination_class.const_get(:OXM_CLASS)
69
+ end
70
+
71
+ def destination_oxm_field
72
+ destination_class.const_get(:OXM_FIELD)
73
+ end
74
+
75
+ def destination_oxm_length
76
+ destination_class.new.length
77
+ end
78
+
79
+ def destination_class
80
+ Match.const_get(@destination.to_s.split('_').map(&:capitalize).join)
81
+ end
40
82
  end
41
83
  end
42
84
  end
@@ -1,37 +1,53 @@
1
- require 'pio/open_flow/action'
1
+ require 'pio/open_flow/nicira_action'
2
+ require 'pio/open_flow13/match'
3
+ require 'pio/open_flow13/send_out_port'
2
4
 
3
5
  module Pio
4
6
  module OpenFlow13
5
7
  # NXAST_OUTPUT_REG action
6
- class NiciraSendOutPort < OpenFlow::Action
7
- action_header action_type: 0xffff, action_length: 24
8
- uint32 :experimenter_id, value: 0x2320
9
- uint16 :experimenter_type, value: 15
10
- bit10 :offset_internal, value: 0
11
- bit6 :n_bits_internal
12
- uint32 :source_internal
13
- uint16 :max_length, value: 0
8
+ class NiciraSendOutPort < OpenFlow::NiciraAction
9
+ nicira_action_header action_type: 0xffff,
10
+ action_length: 24,
11
+ subtype: 15
12
+ bit10 :_offset
13
+ bit6 :_n_bits
14
+ struct :_source do
15
+ uint16 :oxm_class
16
+ bit7 :oxm_field
17
+ bit1 :oxm_hasmask, value: 0
18
+ bit8 :oxm_length
19
+ end
20
+ uint16 :max_length
14
21
  string :zero, length: 6
15
22
 
16
- attr_reader :source
17
-
18
- # rubocop:disable AbcSize
19
- # rubocop:disable LineLength
20
- def initialize(source)
23
+ def initialize(source, options = {})
21
24
  @source = source
22
- oxm_klass = Match.const_get(source.to_s.split('_').map(&:capitalize).join)
23
- super(n_bits_internal: oxm_klass.new.length * 8 - 1,
24
- source_internal: ((oxm_klass.superclass.const_get(:OXM_CLASS) << 16) | (oxm_klass.const_get(:OXM_FIELD) << 9) | oxm_klass.new.length))
25
+ super(_n_bits: (options[:n_bits] || oxm_length * 8) - 1,
26
+ _offset: options[:offset] || 0,
27
+ _source: { oxm_class: source_oxm_class.const_get(:OXM_CLASS),
28
+ oxm_field: source_oxm_class.const_get(:OXM_FIELD),
29
+ oxm_length: oxm_length },
30
+ max_length: options[:max_length] || SendOutPort::NO_BUFFER)
25
31
  end
26
- # rubocop:enable AbcSize
27
- # rubocop:enable LineLength
32
+
33
+ attr_reader :source
28
34
 
29
35
  def offset
30
- offset_internal
36
+ _offset
31
37
  end
32
38
 
33
39
  def n_bits
34
- n_bits_internal + 1
40
+ _n_bits + 1
41
+ end
42
+
43
+ private
44
+
45
+ def oxm_length
46
+ source_oxm_class.new.length
47
+ end
48
+
49
+ def source_oxm_class
50
+ Match.const_get(@source.to_s.split('_').map(&:capitalize).join)
35
51
  end
36
52
  end
37
53
  end
@@ -0,0 +1,49 @@
1
+ require 'pio/open_flow/nicira_action'
2
+ require 'pio/open_flow13/match'
3
+
4
+ module Pio
5
+ module OpenFlow13
6
+ # NXAST_STACK_POP action
7
+ class NiciraStackPop < OpenFlow::NiciraAction
8
+ nicira_action_header action_type: 0xffff,
9
+ action_length: 24,
10
+ subtype: 28
11
+ uint16 :_offset
12
+ struct :field do
13
+ uint16 :oxm_class
14
+ bit7 :oxm_field
15
+ bit1 :oxm_hasmask, value: 0
16
+ uint8 :oxm_length
17
+ end
18
+ uint16 :_n_bits
19
+ string :padding, length: 6
20
+ hide :padding
21
+
22
+ def initialize(field, options = {})
23
+ @field = field
24
+ super(_offset: options[:offset] || 0,
25
+ _n_bits: (options[:n_bits] || oxm_length * 8) + 1,
26
+ field: { oxm_class: field_oxm_class.const_get(:OXM_CLASS),
27
+ oxm_field: field_oxm_class.const_get(:OXM_FIELD),
28
+ oxm_length: oxm_length })
29
+ end
30
+
31
+ attr_reader :field
32
+ alias offset _offset
33
+
34
+ def n_bits
35
+ _n_bits - 1
36
+ end
37
+
38
+ private
39
+
40
+ def oxm_length
41
+ field_oxm_class.new.length
42
+ end
43
+
44
+ def field_oxm_class
45
+ Match.const_get(@field.to_s.split('_').map(&:capitalize).join)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,49 @@
1
+ require 'pio/open_flow/nicira_action'
2
+ require 'pio/open_flow13/match'
3
+
4
+ module Pio
5
+ module OpenFlow13
6
+ # NXAST_STACK_PUSH action
7
+ class NiciraStackPush < OpenFlow::NiciraAction
8
+ nicira_action_header action_type: 0xffff,
9
+ action_length: 24,
10
+ subtype: 27
11
+ uint16 :_offset
12
+ struct :field do
13
+ uint16 :oxm_class
14
+ bit7 :oxm_field
15
+ bit1 :oxm_hasmask, value: 0
16
+ uint8 :oxm_length
17
+ end
18
+ uint16 :_n_bits
19
+ string :padding, length: 6
20
+ hide :padding
21
+
22
+ def initialize(field, options = {})
23
+ @field = field
24
+ super(_offset: options[:offset] || 0,
25
+ _n_bits: (options[:n_bits] || oxm_length * 8) + 1,
26
+ field: { oxm_class: field_oxm_class.const_get(:OXM_CLASS),
27
+ oxm_field: field_oxm_class.const_get(:OXM_FIELD),
28
+ oxm_length: oxm_length })
29
+ end
30
+
31
+ attr_reader :field
32
+ alias offset _offset
33
+
34
+ def n_bits
35
+ _n_bits - 1
36
+ end
37
+
38
+ private
39
+
40
+ def oxm_length
41
+ field_oxm_class.new.length
42
+ end
43
+
44
+ def field_oxm_class
45
+ Match.const_get(@field.to_s.split('_').map(&:capitalize).join)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,3 +1,4 @@
1
+ require 'active_support/core_ext/object/try'
1
2
  require 'pio/open_flow'
2
3
  require 'pio/open_flow13/match'
3
4
  require 'pio/parser'
@@ -8,8 +9,9 @@ module Pio
8
9
  class PacketIn < OpenFlow::Message
9
10
  # Why is this packet being sent to the controller?
10
11
  # (enum ofp_packet_in_reason)
12
+ # rubocop:disable LineLength
11
13
  class Reason < BinData::Primitive
12
- REASONS = { no_match: 0, action: 1, invalid_ttl: 2 }
14
+ REASONS = { no_match: 0, action: 1, invalid_ttl: 2 }.freeze
13
15
 
14
16
  uint8 :reason
15
17
 
@@ -22,9 +24,8 @@ module Pio
22
24
  end
23
25
  end
24
26
 
25
- open_flow_header(version: 4,
26
- message_type: 10,
27
- message_length: lambda do
27
+ open_flow_header(version: 4, type: 10,
28
+ length: lambda do
28
29
  24 + match.length + padding.length + raw_data.length
29
30
  end)
30
31
  uint32 :buffer_id
@@ -35,11 +36,11 @@ module Pio
35
36
  oxm :match
36
37
  string :padding, length: 2
37
38
  hide :padding
38
- string :raw_data, read_length: :total_len
39
+ string :raw_data, read_length: -> { length - header_length - (16 + match.length + 2) }
39
40
 
40
41
  attr_accessor :datapath_id
41
- alias_method :dpid, :datapath_id
42
- alias_method :dpid=, :datapath_id=
42
+ alias dpid datapath_id
43
+ alias dpid= datapath_id=
43
44
 
44
45
  def data
45
46
  @data ||= Pio::Parser.read(raw_data)
@@ -50,8 +51,10 @@ module Pio
50
51
  end
51
52
 
52
53
  def method_missing(method, *args)
53
- data.__send__(method, *args).snapshot
54
+ bindata_value = data.__send__(method, *args)
55
+ bindata_value.try(:snapshot) || bindata_value
54
56
  end
57
+ # rubocop:enable LineLength
55
58
  end
56
59
  end
57
60
  end