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,26 +1,24 @@
1
1
  @open_flow13
2
- Feature: Pio::Meter
2
+ Feature: Meter
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::Meter.new(1)
6
+ Pio::OpenFlow13::Meter.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::Meter |
12
- | instruction_type | 6 |
13
- | instruction_length | 8 |
14
- | to_binary_s.length | 8 |
15
- | meter_id | 1 |
8
+ Then the message has the following fields and values:
9
+ | field | value |
10
+ | class | Pio::OpenFlow13::Meter |
11
+ | instruction_type | 6 |
12
+ | instruction_length | 8 |
13
+ | to_binary_s.length | 8 |
14
+ | meter_id | 1 |
16
15
 
17
16
  Scenario: read
18
- When I try to parse a file named "open_flow13/instruction_meter.raw" with "Pio::Meter" class
19
- Then it should finish successfully
20
- And the message has the following fields and values:
21
- | field | value |
22
- | class | Pio::Meter |
23
- | instruction_type | 6 |
24
- | instruction_length | 8 |
25
- | to_binary_s.length | 8 |
26
- | meter_id | 1 |
17
+ When I parse a file named "open_flow13/instruction_meter.raw" with "Pio::OpenFlow13::Meter" class
18
+ Then the message has the following fields and values:
19
+ | field | value |
20
+ | class | Pio::OpenFlow13::Meter |
21
+ | instruction_type | 6 |
22
+ | instruction_length | 8 |
23
+ | to_binary_s.length | 8 |
24
+ | meter_id | 1 |
@@ -0,0 +1,15 @@
1
+ @open_flow13
2
+ Feature: NiciraConjunction
3
+
4
+ Provides conjunctive flow match.
5
+
6
+ Scenario: new(clause: 1, n_clauses: 2, conjunction_id: 1)
7
+ When I create an OpenFlow action with:
8
+ """
9
+ Pio::NiciraConjunction.new(clause: 1, n_clauses: 2, conjunction_id: 1)
10
+ """
11
+ Then the action has the following fields and values:
12
+ | field | value |
13
+ | clause | 1 |
14
+ | n_clauses | 2 |
15
+ | conjunction_id | 1 |
@@ -1,56 +1,41 @@
1
1
  @open_flow13
2
- Feature: Pio::NiciraRegLoad
2
+ Feature: NiciraRegLoad
3
+
4
+ Copies value[0:n_bits] to destination[ofs:ofs+n_bits], where a[b:c]
5
+ denotes the bits within 'a' numbered 'b' through 'c' (not including bit 'c').
3
6
 
4
7
  Scenario: new(0xdeadbeef, :reg0)
5
- When I try to create an OpenFlow action with:
8
+ When I create an OpenFlow action with:
6
9
  """
7
10
  Pio::NiciraRegLoad.new(0xdeadbeef, :reg0)
8
11
  """
9
- Then it should finish successfully
10
- And the action has the following fields and values:
11
- | field | value |
12
- | action_type.to_hex | 0xffff |
13
- | action_length | 24 |
14
- | experimenter_id.to_hex | 0x2320 |
15
- | experimenter_type | 7 |
16
- | offset | 0 |
17
- | n_bits | 32 |
18
- | destination | :reg0 |
19
- | destination_internal | 65540 |
20
- | value.to_hex | 0xdeadbeef |
12
+ Then the action has the following fields and values:
13
+ | field | value |
14
+ | offset | 0 |
15
+ | n_bits | 32 |
16
+ | destination | :reg0 |
17
+ | value.to_hex | 0xdeadbeef |
21
18
 
22
19
  Scenario: new(0xdeadbeef, :metadata)
23
- When I try to create an OpenFlow action with:
20
+ When I create an OpenFlow action with:
24
21
  """
25
22
  Pio::NiciraRegLoad.new(0xdeadbeef, :metadata)
26
23
  """
27
- Then it should finish successfully
28
- And the action has the following fields and values:
29
- | field | value |
30
- | action_type.to_hex | 0xffff |
31
- | action_length | 24 |
32
- | experimenter_id.to_hex | 0x2320 |
33
- | experimenter_type | 7 |
34
- | offset | 0 |
35
- | n_bits | 64 |
36
- | destination | :metadata |
37
- | destination_internal | 2147484680 |
38
- | value.to_hex | 0xdeadbeef |
24
+ Then the action has the following fields and values:
25
+ | field | value |
26
+ | offset | 0 |
27
+ | n_bits | 64 |
28
+ | destination | :metadata |
29
+ | value.to_hex | 0xdeadbeef |
39
30
 
40
- Scenario: new(0xdeadbeef, :metadata, offset: 32, n_bits: 32)
41
- When I try to create an OpenFlow action with:
31
+ Scenario: new(0xdeadbeef, :reg0, offset: 16, n_bits: 16)
32
+ When I create an OpenFlow action with:
42
33
  """
43
- Pio::NiciraRegLoad.new(0xdeadbeef, :metadata, offset: 32, n_bits: 32)
34
+ Pio::NiciraRegLoad.new(0xdeadbeef, :reg0, offset: 16, n_bits: 16)
44
35
  """
45
- Then it should finish successfully
46
- And the action has the following fields and values:
47
- | field | value |
48
- | action_type.to_hex | 0xffff |
49
- | action_length | 24 |
50
- | experimenter_id.to_hex | 0x2320 |
51
- | experimenter_type | 7 |
52
- | offset | 32 |
53
- | n_bits | 32 |
54
- | destination | :metadata |
55
- | destination_internal | 2147484680 |
56
- | value.to_hex | 0xdeadbeef |
36
+ Then the action has the following fields and values:
37
+ | field | value |
38
+ | offset | 16 |
39
+ | n_bits | 16 |
40
+ | destination | :reg0 |
41
+ | value.to_hex | 0xdeadbeef |
@@ -1,42 +1,48 @@
1
1
  @open_flow13
2
- Feature: Pio::NiciraRegMove
2
+ Feature: NiciraRegMove
3
3
 
4
- Scenario: new(from: :arp_sender_hardware_address, to: :arp_target_hardware_address)
5
- When I try to create an OpenFlow action with:
4
+ Copies source[source_offset:sourcce_offset+n_bits] to
5
+ destination[destination_offset:dst_ofs+n_bits], where a[b:c] denotes
6
+ the bits within 'a' numbered 'b' through 'c' (not including bit 'c').
7
+
8
+ Scenario: new(source: :arp_sender_hardware_address, destination: :arp_target_hardware_address)
9
+ When I create an OpenFlow action with:
6
10
  """
7
- Pio::NiciraRegMove.new(from: :arp_sender_hardware_address, to: :arp_target_hardware_address)
11
+ Pio::NiciraRegMove.new(source: :arp_sender_hardware_address,
12
+ destination: :arp_target_hardware_address)
8
13
  """
9
- Then it should finish successfully
10
- And the action has the following fields and values:
11
- | field | value |
12
- | action_type.to_hex | 0xffff |
13
- | action_length | 24 |
14
- | experimenter_id.to_hex | 0x2320 |
15
- | experimenter_type | 6 |
16
- | from | :arp_sender_hardware_address |
17
- | source_oxm_field | 24 |
18
- | source_oxm_length | 6 |
19
- | to | :arp_target_hardware_address |
20
- | destination_oxm_field | 25 |
21
- | destination_oxm_length | 6 |
14
+ Then the action has the following fields and values:
15
+ | field | value |
16
+ | n_bits | 48 |
17
+ | source | :arp_sender_hardware_address |
18
+ | source_offset | 0 |
19
+ | destination | :arp_target_hardware_address |
20
+ | destination_offset | 0 |
22
21
 
23
- Scenario: new(from: :reg0, to: :reg7)
24
- When I try to create an OpenFlow action with:
22
+ Scenario: new(source: :reg0, destination: :reg7)
23
+ When I create an OpenFlow action with:
24
+ """
25
+ Pio::NiciraRegMove.new(source: :reg0, destination: :reg7)
26
+ """
27
+ Then the action has the following fields and values:
28
+ | field | value |
29
+ | n_bits | 32 |
30
+ | source | :reg0 |
31
+ | source_offset | 0 |
32
+ | destination | :reg7 |
33
+ | destination_offset | 0 |
34
+
35
+ Scenario: new(source: :reg0, source_offset: 16, destination: :reg7, destination_offset: 16, n_bits: 16)
36
+ When I create an OpenFlow action with:
25
37
  """
26
- Pio::NiciraRegMove.new(from: :reg0, to: :reg7)
38
+ Pio::NiciraRegMove.new(source: :reg0, source_offset: 16,
39
+ destination: :reg7, destination_offset: 16,
40
+ n_bits: 16)
27
41
  """
28
- Then it should finish successfully
29
- And the action has the following fields and values:
30
- | field | value |
31
- | action_type.to_hex | 0xffff |
32
- | action_length | 24 |
33
- | experimenter_id.to_hex | 0x2320 |
34
- | experimenter_type | 6 |
35
- | from | :reg0 |
36
- | source_oxm_class | 1 |
37
- | source_oxm_field | 0 |
38
- | source_oxm_length | 4 |
39
- | to | :reg7 |
40
- | destination_oxm_class | 1 |
41
- | destination_oxm_field | 7 |
42
- | destination_oxm_length | 4 |
42
+ Then the action has the following fields and values:
43
+ | field | value |
44
+ | n_bits | 16 |
45
+ | source | :reg0 |
46
+ | source_offset | 16 |
47
+ | destination | :reg7 |
48
+ | destination_offset | 16 |
@@ -1,20 +1,28 @@
1
1
  @open_flow13
2
- Feature: Pio::NiciraSendOutPort
2
+ Feature: NiciraSendOutPort
3
+
4
+ Outputs to the OpenFlow port number written to source[offset:offset+n_bits]
3
5
 
4
6
  Scenario: new(:reg0)
5
- When I try to create an OpenFlow action with:
7
+ When I create an OpenFlow action with:
6
8
  """
7
9
  Pio::NiciraSendOutPort.new(:reg0)
8
10
  """
9
- Then it should finish successfully
10
- And the action has the following fields and values:
11
- | field | value |
12
- | action_type.to_hex | 0xffff |
13
- | action_length | 24 |
14
- | experimenter_id.to_hex | 0x2320 |
15
- | experimenter_type | 15 |
16
- | offset | 0 |
17
- | source | :reg0 |
18
- | max_length | 0 |
11
+ Then the action has the following fields and values:
12
+ | field | value |
13
+ | offset | 0 |
14
+ | n_bits | 32 |
15
+ | source | :reg0 |
16
+ | max_length.to_hex | 0xffff |
19
17
 
20
-
18
+ Scenario: new(:reg0, offset: 16, n_bits: 16, max_length: 256)
19
+ When I create an OpenFlow action with:
20
+ """
21
+ Pio::NiciraSendOutPort.new(:reg0, offset: 16, n_bits: 16, max_length: 256)
22
+ """
23
+ Then the action has the following fields and values:
24
+ | field | value |
25
+ | offset | 16 |
26
+ | n_bits | 16 |
27
+ | source | :reg0 |
28
+ | max_length | 256 |
@@ -0,0 +1,26 @@
1
+ @open_flow13
2
+ Feature: NiciraStackPop
3
+
4
+ Pops field[offset: offset + n_bits] from top of the stack.
5
+
6
+ Scenario: new(:reg0)
7
+ When I create an OpenFlow action with:
8
+ """
9
+ Pio::NiciraStackPop.new(:reg0)
10
+ """
11
+ Then the action has the following fields and values:
12
+ | field | value |
13
+ | offset | 0 |
14
+ | n_bits | 32 |
15
+ | field | :reg0 |
16
+
17
+ Scenario: new(:reg0, n_bits: 16, offset: 16)
18
+ When I create an OpenFlow action with:
19
+ """
20
+ Pio::NiciraStackPop.new(:reg0, n_bits: 16, offset: 16)
21
+ """
22
+ Then the action has the following fields and values:
23
+ | field | value |
24
+ | offset | 16 |
25
+ | n_bits | 16 |
26
+ | field | :reg0 |
@@ -0,0 +1,26 @@
1
+ @open_flow13
2
+ Feature: NiciraStackPush
3
+
4
+ Pushes field[offset: offset + n_bits] to top of the stack.
5
+
6
+ Scenario: new(:reg0)
7
+ When I create an OpenFlow action with:
8
+ """
9
+ Pio::NiciraStackPush.new(:reg0)
10
+ """
11
+ Then the action has the following fields and values:
12
+ | field | value |
13
+ | offset | 0 |
14
+ | n_bits | 32 |
15
+ | field | :reg0 |
16
+
17
+ Scenario: new(:reg0, n_bits: 16, offset: 16)
18
+ When I create an OpenFlow action with:
19
+ """
20
+ Pio::NiciraStackPush.new(:reg0, n_bits: 16, offset: 16)
21
+ """
22
+ Then the action has the following fields and values:
23
+ | field | value |
24
+ | offset | 16 |
25
+ | n_bits | 16 |
26
+ | field | :reg0 |
@@ -1,16 +1,13 @@
1
1
  @open_flow13
2
- Feature: Pio::PacketIn
2
+ Feature: PacketIn
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::PacketIn.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 | 10 |
13
- | message_length | 34 |
10
+ | version | 4 |
14
11
  | transaction_id | 0 |
15
12
  | xid | 0 |
16
13
  | buffer_id | 0 |
@@ -22,7 +19,7 @@ Feature: Pio::PacketIn
22
19
  | raw_data.length | 0 |
23
20
 
24
21
  Scenario: new (raw_data = ARP request)
25
- When I try to create an OpenFlow message with:
22
+ When I create an OpenFlow message with:
26
23
  """
27
24
  data_dump = [
28
25
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0x5d, 0x10, 0x31, 0x37,
@@ -35,11 +32,9 @@ Feature: Pio::PacketIn
35
32
 
36
33
  Pio::PacketIn.new(raw_data: data_dump)
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
- | ofp_version | 4 |
42
- | message_length | 94 |
37
+ | version | 4 |
43
38
  | transaction_id | 0 |
44
39
  | xid | 0 |
45
40
  | buffer_id | 0 |
@@ -51,25 +46,3 @@ Feature: Pio::PacketIn
51
46
  | raw_data.length | 60 |
52
47
  | source_mac | ac:5d:10:31:37:79 |
53
48
  | destination_mac | ff:ff:ff:ff:ff:ff |
54
-
55
- Scenario: read
56
- When I try to parse a file named "open_flow13/packet_in.raw" with "PacketIn" class
57
- Then it should finish successfully
58
- And the message has the following fields and values:
59
- | field | value |
60
- | ofp_version | 4 |
61
- | message_type | 10 |
62
- | message_length | 102 |
63
- | transaction_id | 123 |
64
- | xid | 123 |
65
- | buffer_id.to_hex | 0xcafebabe |
66
- | total_len | 60 |
67
- | in_port | 1 |
68
- | reason | :no_match |
69
- | table_id | 0 |
70
- | cookie | 0 |
71
- | match.match_fields.size | 1 |
72
- | match.match_fields[0].in_port | 1 |
73
- | raw_data.length | 60 |
74
- | source_mac | ac:5d:10:31:37:79 |
75
- | destination_mac | ff:ff:ff:ff:ff:ff |
@@ -1,16 +1,13 @@
1
1
  @open_flow13
2
- Feature: Pio::PacketOut
2
+ Feature: PacketOut
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::PacketOut.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 | 13 |
13
- | message_length | 24 |
10
+ | version | 4 |
14
11
  | to_binary.length | 24 |
15
12
  | transaction_id | 0 |
16
13
  | xid | 0 |
@@ -20,7 +17,7 @@ Feature: Pio::PacketOut
20
17
  | raw_data.length | 0 |
21
18
 
22
19
  Scenario: new (actions = SendOutPort(1), raw_data = ARP Request)
23
- When I try to create an OpenFlow message with:
20
+ When I create an OpenFlow message with:
24
21
  """
25
22
  data_dump = [
26
23
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0x5d, 0x10, 0x31, 0x37,
@@ -33,12 +30,9 @@ Feature: Pio::PacketOut
33
30
 
34
31
  Pio::PacketOut.new(raw_data: data_dump, actions: 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 | 13 |
41
- | message_length | 100 |
35
+ | version | 4 |
42
36
  | to_binary.length | 100 |
43
37
  | transaction_id | 0 |
44
38
  | xid | 0 |
@@ -59,35 +53,3 @@ Feature: Pio::PacketOut
59
53
  | sender_protocol_address | 192.168.2.254 |
60
54
  | target_hardware_address | ff:ff:ff:ff:ff:ff |
61
55
  | target_protocol_address | 192.168.2.5 |
62
-
63
- Scenario: read
64
- When I try to parse a file named "open_flow13/packet_out.raw" with "PacketOut" class
65
- Then it should finish successfully
66
- And the message has the following fields and values:
67
- | field | value |
68
- | ofp_version | 4 |
69
- | message_type | 13 |
70
- | message_length | 100 |
71
- | transaction_id | 123 |
72
- | xid | 123 |
73
- | buffer_id | :no_buffer |
74
- | in_port | :controller |
75
- | actions_length | 16 |
76
- | actions.first.class | Pio::OpenFlow13::SendOutPort |
77
- | actions.first.port | 1 |
78
- | actions.first.max_length | :no_buffer |
79
- | raw_data.length | 60 |
80
- | data.class | Pio::Arp::Request |
81
- | destination_mac | ff:ff:ff:ff:ff:ff |
82
- | source_mac | ac:5d:10:31:37:79 |
83
- | ether_type | 2054 |
84
- | hardware_type | 1 |
85
- | protocol_type | 2048 |
86
- | hardware_length | 6 |
87
- | protocol_length | 4 |
88
- | operation | 1 |
89
- | sender_hardware_address | ac:5d:10:31:37:79 |
90
- | sender_protocol_address | 192.168.2.254 |
91
- | target_hardware_address | ff:ff:ff:ff:ff:ff |
92
- | target_protocol_address | 192.168.2.5 |
93
-