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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/README.md +6 -49
- data/Rakefile +4 -4
- data/features/{arp.feature → arp/arp.feature} +14 -30
- data/features/arp/arp_reply.feature +69 -0
- data/features/arp/arp_request.feature +67 -0
- data/features/dhcp.feature +157 -162
- data/features/ethernet_header.feature +149 -0
- data/features/icmp/icmp.feature +47 -0
- data/features/icmp/icmp_reply.feature +93 -0
- data/features/icmp/icmp_request.feature +89 -0
- data/features/ipv4_header.feature +89 -0
- data/features/lldp.feature +5 -8
- data/features/open_flow/header.feature +13 -0
- data/features/open_flow/nicira_resubmit.feature +4 -22
- data/features/open_flow/nicira_resubmit_table.feature +6 -16
- data/features/open_flow10/aggregate_stats_reply.feature +5 -7
- data/features/open_flow10/aggregate_stats_request.feature +12 -14
- data/features/open_flow10/bad_request.feature +7 -24
- data/features/open_flow10/barrier_reply.feature +14 -25
- data/features/open_flow10/barrier_request.feature +12 -25
- data/features/open_flow10/description_stats_reply.feature +9 -7
- data/features/open_flow10/description_stats_request.feature +12 -25
- data/features/open_flow10/echo_reply.feature +14 -35
- data/features/open_flow10/echo_request.feature +16 -39
- data/features/open_flow10/enqueue.feature +3 -4
- data/features/open_flow10/exact_match.feature +5 -5
- data/features/open_flow10/features_reply.feature +28 -73
- data/features/open_flow10/features_request.feature +10 -28
- data/features/open_flow10/flow_mod.feature +4 -188
- data/features/open_flow10/flow_removed.feature +28 -30
- data/features/open_flow10/flow_stats_reply.feature +5 -89
- data/features/open_flow10/flow_stats_request.feature +12 -42
- data/features/open_flow10/hello.feature +10 -32
- data/features/open_flow10/hello_failed.feature +7 -57
- data/features/open_flow10/packet_in.feature +130 -49
- data/features/open_flow10/packet_out.feature +29 -18
- data/features/open_flow10/port_stats_request.feature +8 -29
- data/features/open_flow10/port_status.feature +22 -21
- data/features/open_flow10/queue_stats_request.feature +12 -30
- data/features/open_flow10/send_out_port.feature +17 -25
- data/features/open_flow10/set_destination_mac_address.feature +3 -4
- data/features/open_flow10/set_ip_destination_address.feature +3 -4
- data/features/open_flow10/set_source_ip_address.feature +3 -4
- data/features/open_flow10/set_source_mac_address.feature +3 -4
- data/features/open_flow10/set_tos.feature +3 -4
- data/features/open_flow10/set_transport_destination_port.feature +3 -4
- data/features/open_flow10/set_transport_source_port.feature +3 -4
- data/features/open_flow10/set_vlan_priority.feature +3 -4
- data/features/open_flow10/set_vlan_vid.feature +3 -4
- data/features/open_flow10/strip_vlan_header.feature +3 -4
- data/features/open_flow10/table_stats_request.feature +11 -13
- data/features/open_flow10/vendor_action.feature +4 -5
- data/features/open_flow13/apply_actions.feature +15 -18
- data/features/open_flow13/bad_request.feature +7 -13
- data/features/open_flow13/copy_ttl_inwards.feature +13 -0
- data/features/open_flow13/copy_ttl_outwards.feature +13 -0
- data/features/open_flow13/decrement_ip_ttl.feature +11 -0
- data/features/open_flow13/echo_reply.feature +16 -42
- data/features/open_flow13/echo_request.feature +16 -42
- data/features/open_flow13/features_reply.feature +4 -25
- data/features/open_flow13/features_request.feature +7 -36
- data/features/open_flow13/flow_mod.feature +16 -76
- data/features/open_flow13/goto_table.feature +18 -20
- data/features/open_flow13/hello.feature +7 -37
- data/features/open_flow13/hello_failed.feature +7 -30
- data/features/open_flow13/match.feature +239 -248
- data/features/open_flow13/meter.feature +18 -20
- data/features/open_flow13/nicira_conjunction.feature +15 -0
- data/features/open_flow13/nicira_reg_load.feature +27 -42
- data/features/open_flow13/nicira_reg_move.feature +41 -35
- data/features/open_flow13/nicira_send_out_port.feature +21 -13
- data/features/open_flow13/nicira_stack_pop.feature +26 -0
- data/features/open_flow13/nicira_stack_push.feature +26 -0
- data/features/open_flow13/packet_in.feature +7 -34
- data/features/open_flow13/packet_out.feature +7 -45
- data/features/open_flow13/send_out_port.feature +19 -28
- data/features/open_flow13/set_arp_operation.feature +4 -5
- data/features/open_flow13/set_arp_sender_hardware_address.feature +3 -4
- data/features/open_flow13/set_arp_sender_protocol_address.feature +3 -4
- data/features/open_flow13/set_destination_mac_address.feature +3 -4
- data/features/open_flow13/set_ip_ttl.feature +12 -0
- data/features/open_flow13/set_metadata.feature +3 -4
- data/features/open_flow13/set_source_mac_address.feature +3 -4
- data/features/open_flow13/stats_request.feature +4 -7
- data/features/open_flow13/write_metadata.feature +20 -22
- data/features/open_flow_read.feature +24 -5
- data/features/open_flow_version.feature +1 -1
- data/features/parser.feature +8 -9
- data/features/step_definitions/open_flow_steps.rb +11 -16
- data/features/step_definitions/packet_data_steps.rb +16 -32
- data/features/step_definitions/ruby_steps.rb +7 -0
- data/features/step_definitions/show_stats_steps.rb +3 -3
- data/features/support/env.rb +1 -0
- data/features/support/hooks.rb +2 -2
- data/features/udp.feature +26 -27
- data/lib/pio.rb +1 -1
- data/lib/pio/arp.rb +9 -6
- data/lib/pio/arp/format.rb +3 -7
- data/lib/pio/arp/message.rb +8 -4
- data/lib/pio/arp/reply.rb +9 -32
- data/lib/pio/arp/request.rb +9 -33
- data/lib/pio/class_inspector.rb +18 -0
- data/lib/pio/dhcp.rb +2 -2
- data/lib/pio/dhcp/frame.rb +4 -4
- data/lib/pio/dhcp/optional_tlv.rb +3 -3
- data/lib/pio/ethernet_frame.rb +20 -0
- data/lib/pio/ethernet_header.rb +35 -13
- data/lib/pio/icmp.rb +8 -5
- data/lib/pio/icmp/format.rb +19 -22
- data/lib/pio/icmp/message.rb +18 -4
- data/lib/pio/icmp/reply.rb +8 -34
- data/lib/pio/icmp/request.rb +8 -43
- data/lib/pio/instance_inspector.rb +14 -0
- data/lib/pio/ipv4_address.rb +11 -11
- data/lib/pio/ipv4_header.rb +24 -2
- data/lib/pio/lldp/frame.rb +2 -2
- data/lib/pio/lldp/optional_tlv.rb +2 -2
- data/lib/pio/mac.rb +7 -3
- data/lib/pio/message.rb +50 -0
- data/lib/pio/monkey_patch/bindata_record.rb +6 -0
- data/lib/pio/monkey_patch/bindata_string.rb +10 -0
- data/lib/pio/monkey_patch/integer/base_conversions.rb +1 -1
- data/lib/pio/monkey_patch/uint.rb +9 -0
- data/lib/pio/monkey_patch/uint/base_conversions.rb +14 -0
- data/lib/pio/open_flow.rb +38 -52
- data/lib/pio/open_flow/action.rb +8 -4
- data/lib/pio/open_flow/buffer_id.rb +19 -0
- data/lib/pio/open_flow/datapath_id.rb +3 -3
- data/lib/pio/open_flow/error_message.rb +32 -0
- data/lib/pio/open_flow/flags.rb +15 -6
- data/lib/pio/open_flow/flow_match.rb +10 -0
- data/lib/pio/open_flow/header.rb +26 -0
- data/lib/pio/open_flow/hello_failed_code.rb +1 -1
- data/lib/pio/open_flow/instruction.rb +10 -0
- data/lib/pio/open_flow/message.rb +49 -14
- data/lib/pio/open_flow/nicira_resubmit.rb +13 -11
- data/lib/pio/open_flow/nicira_resubmit_table.rb +17 -10
- data/lib/pio/open_flow/parser.rb +19 -0
- data/lib/pio/open_flow/port.rb +2 -2
- data/lib/pio/open_flow/transaction_id.rb +2 -2
- data/lib/pio/open_flow/version.rb +22 -0
- data/lib/pio/open_flow10/actions.rb +16 -16
- data/lib/pio/open_flow10/aggregate_stats/reply.rb +2 -1
- data/lib/pio/open_flow10/aggregate_stats/request.rb +1 -3
- data/lib/pio/open_flow10/barrier/reply.rb +1 -1
- data/lib/pio/open_flow10/barrier/request.rb +1 -1
- data/lib/pio/open_flow10/description_stats/reply.rb +1 -1
- data/lib/pio/open_flow10/description_stats/request.rb +1 -3
- data/lib/pio/open_flow10/echo/reply.rb +3 -3
- data/lib/pio/open_flow10/echo/request.rb +3 -3
- data/lib/pio/open_flow10/enqueue.rb +3 -3
- data/lib/pio/open_flow10/error.rb +3 -13
- data/lib/pio/open_flow10/error/bad_request.rb +5 -29
- data/lib/pio/open_flow10/error/bad_request/bad_request_code.rb +35 -0
- data/lib/pio/open_flow10/error/error_type10.rb +1 -1
- data/lib/pio/open_flow10/error/hello_failed.rb +6 -4
- data/lib/pio/open_flow10/exact_match.rb +12 -10
- data/lib/pio/open_flow10/features/reply.rb +16 -31
- data/lib/pio/open_flow10/features/request.rb +1 -4
- data/lib/pio/open_flow10/flow_mod.rb +8 -33
- data/lib/pio/open_flow10/flow_mod/command.rb +28 -0
- data/lib/pio/open_flow10/flow_removed.rb +2 -17
- data/lib/pio/open_flow10/flow_removed/reason.rb +22 -0
- data/lib/pio/open_flow10/flow_stats/reply.rb +3 -4
- data/lib/pio/open_flow10/flow_stats/request.rb +1 -3
- data/lib/pio/open_flow10/hello.rb +1 -4
- data/lib/pio/open_flow10/match.rb +13 -12
- data/lib/pio/open_flow10/packet_in.rb +32 -28
- data/lib/pio/open_flow10/packet_in/reason.rb +25 -0
- data/lib/pio/open_flow10/packet_out.rb +5 -6
- data/lib/pio/open_flow10/phy_port16.rb +36 -58
- data/lib/pio/open_flow10/port_stats/request.rb +1 -3
- data/lib/pio/open_flow10/port_status.rb +23 -30
- data/lib/pio/open_flow10/port_status/reason.rb +21 -0
- data/lib/pio/open_flow10/queue_stats/request.rb +1 -3
- data/lib/pio/open_flow10/send_out_port.rb +2 -2
- data/lib/pio/open_flow10/set_tos.rb +2 -2
- data/lib/pio/open_flow10/set_transport_port.rb +4 -2
- data/lib/pio/open_flow10/set_vlan_priority.rb +1 -1
- data/lib/pio/open_flow10/set_vlan_vid.rb +1 -1
- data/lib/pio/open_flow10/stats_reply.rb +7 -10
- data/lib/pio/open_flow10/stats_request.rb +16 -15
- data/lib/pio/open_flow10/stats_type.rb +1 -1
- data/lib/pio/open_flow10/table_stats/request.rb +1 -3
- data/lib/pio/open_flow10/vendor_action.rb +22 -20
- data/lib/pio/open_flow13.rb +7 -0
- data/lib/pio/open_flow13/actions.rb +34 -32
- data/lib/pio/open_flow13/apply.rb +25 -22
- data/lib/pio/open_flow13/copy_ttl_inwards.rb +15 -0
- data/lib/pio/open_flow13/copy_ttl_outwards.rb +15 -0
- data/lib/pio/open_flow13/decrement_ip_ttl.rb +15 -0
- data/lib/pio/open_flow13/echo/reply.rb +3 -3
- data/lib/pio/open_flow13/echo/request.rb +3 -3
- data/lib/pio/open_flow13/error.rb +7 -18
- data/lib/pio/open_flow13/error/bad_request.rb +4 -3
- data/lib/pio/open_flow13/error/error_type13.rb +1 -1
- data/lib/pio/open_flow13/error/hello_failed.rb +3 -2
- data/lib/pio/open_flow13/features/reply.rb +9 -16
- data/lib/pio/open_flow13/features/request.rb +1 -1
- data/lib/pio/open_flow13/flow_mod.rb +14 -19
- data/lib/pio/open_flow13/goto_table.rb +26 -24
- data/lib/pio/open_flow13/hello.rb +3 -4
- data/lib/pio/open_flow13/match.rb +173 -9
- data/lib/pio/open_flow13/meter.rb +23 -20
- data/lib/pio/open_flow13/nicira_conjunction.rb +26 -0
- data/lib/pio/open_flow13/nicira_reg_load.rb +44 -24
- data/lib/pio/open_flow13/nicira_reg_move.rb +77 -35
- data/lib/pio/open_flow13/nicira_send_out_port.rb +37 -21
- data/lib/pio/open_flow13/nicira_stack_pop.rb +49 -0
- data/lib/pio/open_flow13/nicira_stack_push.rb +49 -0
- data/lib/pio/open_flow13/packet_in.rb +11 -8
- data/lib/pio/open_flow13/packet_out.rb +9 -8
- data/lib/pio/open_flow13/set_ip_ttl.rb +16 -0
- data/lib/pio/open_flow13/stats_request.rb +2 -4
- data/lib/pio/open_flow13/write_metadata.rb +40 -38
- data/lib/pio/options.rb +8 -3
- data/lib/pio/parser.rb +7 -16
- data/lib/pio/ruby_dumper.rb +69 -0
- data/lib/pio/type/ether_type.rb +31 -0
- data/lib/pio/type/ip_address.rb +8 -0
- data/lib/pio/type/mac_address.rb +10 -0
- data/lib/pio/udp.rb +3 -3
- data/lib/pio/udp_header.rb +1 -1
- data/lib/pio/version.rb +1 -1
- data/pio.gemspec +5 -38
- data/spec/pio/arp/reply_spec.rb +0 -4
- data/spec/pio/arp/request_spec.rb +0 -4
- data/spec/pio/arp_spec.rb +0 -4
- data/spec/pio/icmp/reply_spec.rb +4 -8
- data/spec/pio/icmp/request_spec.rb +6 -10
- data/spec/pio/icmp_spec.rb +8 -12
- data/spec/pio/monkey_patch/integer_spec.rb +23 -0
- data/spec/pio/open_flow/nicira_resubmit_spec.rb +19 -0
- data/spec/pio/open_flow/nicira_resubmit_table_spec.rb +20 -0
- data/spec/pio/open_flow10/error/hello_failed_spec.rb +2 -2
- data/spec/pio/open_flow10/flow_mod_spec.rb +24 -24
- data/spec/pio/open_flow10/flow_stats_request_spec.rb +3 -3
- data/spec/pio/open_flow10/hello_spec.rb +0 -2
- data/spec/pio/open_flow10/match_spec.rb +38 -38
- data/spec/pio/open_flow10/packet_out_spec.rb +0 -349
- data/spec/pio/open_flow10/phy_port16_spec.rb +5 -5
- data/spec/pio/open_flow13/error/hello_failed_spec.rb +2 -2
- data/spec/pio/open_flow13/goto_table_spec.rb +2 -2
- data/spec/pio/open_flow13/hello_spec.rb +15 -15
- data/spec/pio/open_flow13/match_spec.rb +29 -29
- data/spec/pio/open_flow13/meter_spec.rb +2 -2
- data/spec/pio/open_flow13/nicira_reg_load_spec.rb +71 -0
- data/spec/pio/open_flow13/nicira_reg_move_spec.rb +40 -0
- data/spec/pio/open_flow13/nicira_send_out_port_spec.rb +29 -0
- data/spec/pio/open_flow13/write_metadata_spec.rb +3 -3
- data/spec/pio/open_flow_spec.rb +6 -6
- data/spec/spec_helper.rb +1 -1
- data/spec/support/shared_examples_for_openflow_messages.rb +5 -13
- metadata +191 -790
- data/LICENSE +0 -674
- data/bin/_guard-core +0 -16
- data/bin/byebug +0 -16
- data/bin/cc-tddium-post-worker +0 -16
- data/bin/cdiff +0 -16
- data/bin/coderay +0 -16
- data/bin/colortab +0 -16
- data/bin/coveralls +0 -16
- data/bin/cucumber +0 -16
- data/bin/decolor +0 -16
- data/bin/flay +0 -16
- data/bin/flog +0 -16
- data/bin/guard +0 -16
- data/bin/htmldiff +0 -16
- data/bin/inch +0 -16
- data/bin/ldiff +0 -16
- data/bin/listen +0 -16
- data/bin/minitar +0 -16
- data/bin/pry +0 -16
- data/bin/rake +0 -16
- data/bin/reek +0 -16
- data/bin/relish +0 -16
- data/bin/restclient +0 -16
- data/bin/rspec +0 -16
- data/bin/rubocop +0 -16
- data/bin/ruby-parse +0 -16
- data/bin/ruby-rewrite +0 -16
- data/bin/ruby_parse +0 -16
- data/bin/ruby_parse_extract_error +0 -16
- data/bin/sparkr +0 -16
- data/bin/term_display +0 -16
- data/bin/term_mandel +0 -16
- data/bin/terminal-notifier +0 -16
- data/bin/thor +0 -16
- data/bin/unparser +0 -16
- data/bin/yard +0 -16
- data/bin/yardoc +0 -16
- data/bin/yri +0 -16
- data/features/arp-storm.pcap +0 -0
- data/features/arp.pcap +0 -0
- data/features/dhcp.pcap +0 -0
- data/features/icmp.feature +0 -130
- data/features/icmp.pcap +0 -0
- data/features/icmpv6.pcap +0 -0
- data/features/lldp.detailed.pcap +0 -0
- data/features/lldp.minimal.pcap +0 -0
- data/features/open_flow10/aggregate_stats_reply.raw +0 -0
- data/features/open_flow10/aggregate_stats_request.raw +0 -0
- data/features/open_flow10/bad_request.raw +0 -0
- data/features/open_flow10/barrier_reply.raw +0 -0
- data/features/open_flow10/barrier_request.raw +0 -0
- data/features/open_flow10/description_stats_reply.raw +0 -0
- data/features/open_flow10/description_stats_request.raw +0 -0
- data/features/open_flow10/echo_reply.raw +0 -0
- data/features/open_flow10/echo_request.raw +0 -0
- data/features/open_flow10/error.raw +0 -0
- data/features/open_flow10/features_reply.raw +0 -0
- data/features/open_flow10/features_request.raw +0 -0
- data/features/open_flow10/flow_mod_add.raw +0 -0
- data/features/open_flow10/flow_mod_delete.raw +0 -0
- data/features/open_flow10/flow_mod_delete_strict.raw +0 -0
- data/features/open_flow10/flow_mod_modify.raw +0 -0
- data/features/open_flow10/flow_mod_modify_strict.raw +0 -0
- data/features/open_flow10/flow_removed.raw +0 -0
- data/features/open_flow10/flow_stats_reply.raw +0 -0
- data/features/open_flow10/flow_stats_request.raw +0 -0
- data/features/open_flow10/get_config_reply.raw +0 -0
- data/features/open_flow10/get_config_request.raw +0 -0
- data/features/open_flow10/hello.raw +0 -0
- data/features/open_flow10/hello_failed.raw +0 -0
- data/features/open_flow10/nx_flow_mod_add.raw +0 -0
- data/features/open_flow10/nx_flow_mod_delete.raw +0 -0
- data/features/open_flow10/nx_flow_mod_delete_strict.raw +0 -0
- data/features/open_flow10/nx_flow_mod_modify.raw +0 -0
- data/features/open_flow10/nx_flow_mod_modify_strict.raw +0 -0
- data/features/open_flow10/nxast_learn.raw +0 -0
- data/features/open_flow10/packet_in.raw +0 -0
- data/features/open_flow10/packet_in_arp_reply.raw +0 -0
- data/features/open_flow10/packet_in_arp_request.raw +0 -0
- data/features/open_flow10/packet_in_cbench.raw +0 -0
- data/features/open_flow10/packet_out.raw +0 -0
- data/features/open_flow10/port_mod.raw +0 -0
- data/features/open_flow10/port_stats_reply.raw +0 -0
- data/features/open_flow10/port_stats_request.raw +0 -0
- data/features/open_flow10/port_status.raw +0 -0
- data/features/open_flow10/queue_get_config_reply.raw +0 -0
- data/features/open_flow10/queue_get_config_request.raw +0 -0
- data/features/open_flow10/queue_stats_request.raw +0 -0
- data/features/open_flow10/set_config.raw +0 -0
- data/features/open_flow10/table_stats_reply.raw +0 -0
- data/features/open_flow10/table_stats_request.raw +0 -0
- data/features/open_flow10/vendor.raw +0 -0
- data/features/open_flow10/vendor_stats_request.raw +0 -0
- data/features/open_flow13/action_copy_ttl_in.raw +0 -0
- data/features/open_flow13/action_copy_ttl_out.raw +0 -0
- data/features/open_flow13/action_dec_mpls_ttl.raw +0 -0
- data/features/open_flow13/action_dec_nw_ttl.raw +0 -0
- data/features/open_flow13/action_group.raw +0 -0
- data/features/open_flow13/action_pop_mpls.raw +0 -0
- data/features/open_flow13/action_pop_pbb.raw +0 -0
- data/features/open_flow13/action_pop_vlan.raw +0 -0
- data/features/open_flow13/action_push_mpls.raw +0 -0
- data/features/open_flow13/action_push_pbb.raw +0 -0
- data/features/open_flow13/action_push_vlan.raw +0 -0
- data/features/open_flow13/action_set_field.raw +0 -0
- data/features/open_flow13/action_set_mpls_ttl.raw +0 -0
- data/features/open_flow13/action_set_nw_ttl.raw +0 -0
- data/features/open_flow13/action_set_queue.raw +0 -0
- data/features/open_flow13/apply_actions.raw +0 -0
- data/features/open_flow13/bad_request.raw +0 -0
- data/features/open_flow13/echo_reply_body.raw +0 -0
- data/features/open_flow13/echo_reply_no_body.raw +0 -0
- data/features/open_flow13/echo_request_body.raw +0 -0
- data/features/open_flow13/echo_request_no_body.raw +0 -0
- data/features/open_flow13/features_reply.raw +0 -0
- data/features/open_flow13/features_request.raw +0 -0
- data/features/open_flow13/flow_add_apply_no_match.raw +0 -0
- data/features/open_flow13/flow_mod_add_apply_no_match.raw +0 -0
- data/features/open_flow13/flow_mod_no_match_or_instructions.raw +0 -0
- data/features/open_flow13/hello_failed.raw +0 -0
- data/features/open_flow13/hello_no_version_bitmap.raw +0 -0
- data/features/open_flow13/hello_version_bitmap.raw +0 -0
- data/features/open_flow13/instruction_clear_actions.raw +0 -0
- data/features/open_flow13/instruction_goto_table.raw +0 -0
- data/features/open_flow13/instruction_meter.raw +0 -0
- data/features/open_flow13/instruction_write_actions.raw +0 -0
- data/features/open_flow13/instruction_write_metadata.raw +0 -0
- data/features/open_flow13/oxm_arp_op_field.raw +0 -0
- data/features/open_flow13/oxm_arp_sha_field.raw +0 -0
- data/features/open_flow13/oxm_arp_spa_field.raw +0 -0
- data/features/open_flow13/oxm_arp_tha_field.raw +0 -0
- data/features/open_flow13/oxm_arp_tpa_field.raw +0 -0
- data/features/open_flow13/oxm_ether_destination_field.raw +0 -0
- data/features/open_flow13/oxm_ether_source_field.raw +0 -0
- data/features/open_flow13/oxm_ether_type_field.raw +0 -0
- data/features/open_flow13/oxm_experimenter_stratos_basic_dot11.raw +0 -0
- data/features/open_flow13/oxm_icmpv4_code_field.raw +0 -0
- data/features/open_flow13/oxm_icmpv4_type_field.raw +0 -0
- data/features/open_flow13/oxm_in_phy_port_field.raw +0 -0
- data/features/open_flow13/oxm_in_port_field.raw +0 -0
- data/features/open_flow13/oxm_invalid_field.raw +0 -0
- data/features/open_flow13/oxm_ip_dscp_field.raw +0 -0
- data/features/open_flow13/oxm_ip_ecn_field.raw +0 -0
- data/features/open_flow13/oxm_ipv4_destination_field.raw +0 -0
- data/features/open_flow13/oxm_ipv4_source_field.raw +0 -0
- data/features/open_flow13/oxm_ipv6_destination_field.raw +0 -0
- data/features/open_flow13/oxm_ipv6_source_field.raw +0 -0
- data/features/open_flow13/oxm_masked_arp_sha_field.raw +0 -0
- data/features/open_flow13/oxm_masked_arp_spa_field.raw +0 -0
- data/features/open_flow13/oxm_masked_arp_tha_field.raw +0 -0
- data/features/open_flow13/oxm_masked_arp_tpa_field.raw +0 -0
- data/features/open_flow13/oxm_masked_ether_destination_field.raw +0 -0
- data/features/open_flow13/oxm_masked_ether_source_field.raw +0 -0
- data/features/open_flow13/oxm_masked_ipv4_destination_field.raw +0 -0
- data/features/open_flow13/oxm_masked_ipv4_source_field.raw +0 -0
- data/features/open_flow13/oxm_masked_ipv6_destination_field.raw +0 -0
- data/features/open_flow13/oxm_masked_ipv6_source_field.raw +0 -0
- data/features/open_flow13/oxm_masked_tunnel_id_field.raw +0 -0
- data/features/open_flow13/oxm_metadata_field.raw +0 -0
- data/features/open_flow13/oxm_metadata_masked_field.raw +0 -0
- data/features/open_flow13/oxm_no_fields.raw +0 -0
- data/features/open_flow13/oxm_sctp_destination_field.raw +0 -0
- data/features/open_flow13/oxm_sctp_source_field.raw +0 -0
- data/features/open_flow13/oxm_tcp_destination_field.raw +0 -0
- data/features/open_flow13/oxm_tcp_field.raw +0 -0
- data/features/open_flow13/oxm_tcp_source_field.raw +0 -0
- data/features/open_flow13/oxm_tunnel_id_field.raw +0 -0
- data/features/open_flow13/oxm_udp_destination_field.raw +0 -0
- data/features/open_flow13/oxm_udp_field.raw +0 -0
- data/features/open_flow13/oxm_udp_source_field.raw +0 -0
- data/features/open_flow13/oxm_vlan_pcp_field.raw +0 -0
- data/features/open_flow13/oxm_vlan_vid_field.raw +0 -0
- data/features/open_flow13/packet_in.raw +0 -0
- data/features/open_flow13/packet_out.raw +0 -0
- data/features/open_flow13/send_out_port.raw +0 -0
- data/features/open_flow13/table_stats_reply.raw +0 -0
- data/features/open_flow13/table_stats_request.raw +0 -0
- data/features/step_definitions/LICENSE +0 -675
- data/features/udp_no_payload.raw +0 -0
- data/features/udp_with_payload.raw +0 -0
- data/lib/pio/icmp/options.rb +0 -21
- data/lib/pio/open_flow/error.rb +0 -19
- data/lib/pio/open_flow/open_flow_header.rb +0 -31
- data/lib/pio/open_flow13/buffer_id.rb +0 -17
- data/spec/pio/arp/reply/options_spec.rb +0 -143
- data/spec/pio/arp/request/options_spec.rb +0 -113
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
@open_flow13
|
|
2
|
-
Feature:
|
|
2
|
+
Feature: Features::Reply
|
|
3
3
|
Scenario: new
|
|
4
|
-
When I
|
|
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
|
|
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
|
-
|
|
|
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:
|
|
2
|
+
Feature: Features::Request
|
|
3
3
|
Scenario: new
|
|
4
|
-
When I
|
|
4
|
+
When I create an OpenFlow message with:
|
|
5
5
|
"""
|
|
6
6
|
Pio::Features::Request.new
|
|
7
7
|
"""
|
|
8
|
-
Then
|
|
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
|
-
|
|
|
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
|
|
16
|
+
When I create an OpenFlow message with:
|
|
20
17
|
"""
|
|
21
18
|
Pio::Features::Request.new(transaction_id: 123)
|
|
22
19
|
"""
|
|
23
|
-
Then
|
|
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
|
-
|
|
|
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:
|
|
2
|
+
Feature: FlowMod
|
|
3
3
|
Scenario: new
|
|
4
|
-
When I
|
|
4
|
+
When I create an OpenFlow message with:
|
|
5
5
|
"""
|
|
6
6
|
Pio::FlowMod.new
|
|
7
7
|
"""
|
|
8
|
-
Then
|
|
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
|
-
|
|
|
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
|
|
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
|
|
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
|
-
|
|
|
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 |
|
|
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
|
|
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
|
|
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
|
-
|
|
|
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 |
|
|
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:
|
|
2
|
+
Feature: GotoTable
|
|
3
3
|
Scenario: new(1)
|
|
4
|
-
When I
|
|
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
|
|
9
|
-
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
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
|
|
19
|
-
Then
|
|
20
|
-
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
|
25
|
-
|
|
|
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:
|
|
2
|
+
Feature: Hello
|
|
3
3
|
Scenario: new
|
|
4
|
-
When I
|
|
4
|
+
When I create an OpenFlow message with:
|
|
5
5
|
"""
|
|
6
6
|
Pio::Hello.new
|
|
7
7
|
"""
|
|
8
|
-
Then
|
|
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
|
-
|
|
|
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
|
|
16
|
+
When I create an OpenFlow message with:
|
|
20
17
|
"""
|
|
21
18
|
Pio::Hello.new(transaction_id: 123)
|
|
22
19
|
"""
|
|
23
|
-
Then
|
|
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
|
-
|
|
|
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:
|
|
2
|
+
Feature: Error::HelloFailed
|
|
3
3
|
|
|
4
4
|
Hello protocol failed
|
|
5
5
|
|
|
6
6
|
Scenario: new
|
|
7
|
-
When I
|
|
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
|
-
|
|
|
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
|
|
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
|
-
|
|
|
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
|
|
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
|
-
|
|
|
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:
|
|
2
|
+
Feature: Match
|
|
3
3
|
Scenario: new
|
|
4
|
-
When I
|
|
4
|
+
When I create an OpenFlow message with:
|
|
5
5
|
"""
|
|
6
6
|
Pio::Match.new
|
|
7
7
|
"""
|
|
8
|
-
Then
|
|
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
|
|
13
|
+
When I create an OpenFlow message with:
|
|
15
14
|
"""
|
|
16
15
|
Pio::Match.new(in_port: 1)
|
|
17
16
|
"""
|
|
18
|
-
Then
|
|
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
|
|
22
|
+
When I create an OpenFlow message with:
|
|
25
23
|
"""
|
|
26
24
|
Pio::Match.new(metadata: 1)
|
|
27
25
|
"""
|
|
28
|
-
Then
|
|
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
|
|
31
|
+
When I create an OpenFlow message with:
|
|
35
32
|
"""
|
|
36
33
|
Pio::Match.new(metadata: 1, metadata_mask: 1)
|
|
37
34
|
"""
|
|
38
|
-
Then
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
79
|
+
When I create an OpenFlow message with:
|
|
88
80
|
"""
|
|
89
81
|
Pio::Match.new(ether_type: 0x0800)
|
|
90
82
|
"""
|
|
91
|
-
Then
|
|
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
|
|
88
|
+
When I create an OpenFlow message with:
|
|
98
89
|
"""
|
|
99
90
|
Pio::Match.new(vlan_vid: 10)
|
|
100
91
|
"""
|
|
101
|
-
Then
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
393
|
+
When I create an OpenFlow message with:
|
|
432
394
|
"""
|
|
433
395
|
Pio::Match.new(tunnel_id: 1)
|
|
434
396
|
"""
|
|
435
|
-
Then
|
|
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
|
|
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
|
|
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
|
|
453
|
-
Then
|
|
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
|
|
460
|
-
Then
|
|
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
|
|
467
|
-
Then
|
|
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
|
|
474
|
-
Then
|
|
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
|
|
482
|
-
Then
|
|
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
|
|
489
|
-
Then
|
|
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
|
|
496
|
-
Then
|
|
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
|
|
504
|
-
Then
|
|
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
|
|
512
|
-
Then
|
|
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
|
|
519
|
-
Then
|
|
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
|
|
526
|
-
Then
|
|
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
|
|
534
|
-
Then
|
|
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
|
|
542
|
-
Then
|
|
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
|
|
550
|
-
Then
|
|
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
|
|
558
|
-
Then
|
|
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
|
|
566
|
-
Then
|
|
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
|
|
575
|
-
Then
|
|
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
|
|
584
|
-
Then
|
|
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
|
|
593
|
-
Then
|
|
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
|
|
602
|
-
Then
|
|
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
|
|
611
|
-
Then
|
|
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
|
|
620
|
-
Then
|
|
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
|
|
629
|
-
Then
|
|
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
|
|
638
|
-
Then
|
|
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
|
|
647
|
-
Then
|
|
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
|
|
656
|
-
Then
|
|
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
|
|
664
|
-
Then
|
|
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
|
|
672
|
-
Then
|
|
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
|
|
681
|
-
Then
|
|
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
|
|
689
|
-
Then
|
|
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
|
|
698
|
-
Then
|
|
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
|
|
706
|
-
Then
|
|
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
|
|
715
|
-
Then
|
|
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
|
|
723
|
-
Then
|
|
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
|
|
732
|
-
Then
|
|
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
|
|
740
|
-
Then
|
|
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
|
|
749
|
-
Then
|
|
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
|
|
757
|
-
Then
|
|
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
|
|
766
|
-
Then
|
|
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
|
|
773
|
-
Then
|
|
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
|
|
785
|
-
Then
|
|
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 |
|