pio 0.20.1 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +1 -0
- data/Rakefile +5 -8
- data/bin/byebug +16 -0
- data/bin/terminal-notifier +16 -0
- data/features/open_flow10/flow_mod.feature +5 -5
- data/features/open_flow10/packet_in.feature +2 -2
- data/features/open_flow10/port_status.feature +1 -1
- 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.feature +43 -0
- data/features/open_flow13/apply_actions.raw +0 -0
- data/features/open_flow13/flow_add_apply_no_match.raw +0 -0
- data/features/open_flow13/flow_mod.feature +146 -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/goto_table.feature +26 -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/match.feature +36 -0
- data/features/open_flow13/meter.feature +26 -0
- data/features/open_flow13/send_out_port.feature +28 -0
- data/features/open_flow13/send_out_port.raw +0 -0
- data/features/open_flow13/write_metadata.feature +28 -0
- data/features/step_definitions/open_flow_steps.rb +20 -0
- data/features/step_definitions/packet_data_steps.rb +5 -15
- data/lib/pio/monkey_patch/integer.rb +2 -0
- data/lib/pio/monkey_patch/integer/base_conversions.rb +10 -0
- data/lib/pio/open_flow.rb +0 -2
- data/lib/pio/open_flow10.rb +1 -0
- data/lib/pio/{open_flow → open_flow10}/actions.rb +1 -1
- data/lib/pio/open_flow10/echo.rb +1 -0
- data/lib/pio/{open_flow → open_flow10}/message.rb +1 -0
- data/lib/pio/{send_out_port.rb → open_flow10/send_out_port.rb} +0 -0
- data/lib/pio/open_flow13.rb +6 -0
- data/lib/pio/open_flow13/apply.rb +74 -0
- data/lib/pio/open_flow13/flow_mod.rb +195 -0
- data/lib/pio/open_flow13/goto_table.rb +33 -0
- data/lib/pio/open_flow13/hello.rb +1 -2
- data/lib/pio/open_flow13/match.rb +38 -5
- data/lib/pio/open_flow13/meter.rb +32 -0
- data/lib/pio/open_flow13/send_out_port.rb +48 -0
- data/lib/pio/open_flow13/write_metadata.rb +51 -0
- data/lib/pio/version.rb +1 -1
- data/spec/pio/{send_out_port_spec.rb → open_flow10/send_out_port_spec.rb} +1 -1
- data/spec/pio/open_flow13/goto_table_spec.rb +12 -0
- data/spec/pio/open_flow13/match_spec.rb +45 -0
- data/spec/pio/open_flow13/meter_spec.rb +12 -0
- data/spec/pio/open_flow13/write_metadata_spec.rb +28 -0
- metadata +185 -108
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4a2bc0f45a37328d72869a6b04ec3d891afedf6
|
4
|
+
data.tar.gz: dd495c7d16475d9f0d1124407eeb932a1ec69acc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b47a1e1db39a3408a065677db5d1d7af6410560d5df4ec911c03212e524c202cac3af8fcdc1e1f7d8c50287c231df5589b421ed0b64a950a2776f099ff427910
|
7
|
+
data.tar.gz: 138ec261dc4beab21f21dfb0eebdcf800bc7d00c756f274fd2726fe750deabc1d100f7df57c248b2d3a0c5379db101f4ac71d9f4f86dffb62093df08d84cc44b
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,11 @@
|
|
3
3
|
## develop (unreleased)
|
4
4
|
|
5
5
|
|
6
|
+
## 0.21.0 (6/19/2015)
|
7
|
+
### New features
|
8
|
+
* [#164](https://github.com/trema/pio/pull/164): Add new classes `Pio::FlowMod`, `Pio::Apply`, `Pio::GotoTable`, `Pio::WriteMetadata`, `Pio::Meter` and `Pio::SendOutPort`.
|
9
|
+
|
10
|
+
|
6
11
|
## 0.20.1 (6/10/2015)
|
7
12
|
### Bugs fixed
|
8
13
|
* [#167](https://github.com/trema/pio/pull/167): Fix PacketIn accessor methods (raw_data = VLAN tagged UDP).
|
data/README.md
CHANGED
@@ -35,6 +35,7 @@ supports the following packet formats:
|
|
35
35
|
- [Echo Reply](https://relishapp.com/trema/pio/docs/open-flow13/pio-echo-reply)
|
36
36
|
- [Features Request](https://relishapp.com/trema/pio/docs/open-flow13/pio-features-request)
|
37
37
|
- [Features Reply](https://relishapp.com/trema/pio/docs/open-flow13/pio-features-reply)
|
38
|
+
- [Flow Mod](https://relishapp.com/trema/pio/docs/open-flow13/pio-flowmod)
|
38
39
|
|
39
40
|
## Features Overview
|
40
41
|
|
data/Rakefile
CHANGED
@@ -1,17 +1,14 @@
|
|
1
1
|
require 'bundler/gem_tasks'
|
2
2
|
|
3
3
|
RELISH_PROJECT = 'trema/pio'
|
4
|
+
FLAY_THRESHOLD = 300
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
task :
|
8
|
-
task :test => [:spec, :cucumber]
|
9
|
-
task :travis => [:test, :quality, 'coveralls:push']
|
6
|
+
task default: :travis
|
7
|
+
task test: [:spec, :cucumber]
|
8
|
+
task travis: [:test, :quality, 'coveralls:push']
|
10
9
|
|
11
10
|
desc 'Check for code quality'
|
12
|
-
task :
|
13
|
-
|
14
|
-
# rubocop:enable HashSyntax
|
11
|
+
task quality: [:reek, :flog, :flay, :rubocop]
|
15
12
|
|
16
13
|
Dir.glob('tasks/*.rake').each { |each| import each }
|
17
14
|
|
data/bin/byebug
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'byebug' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('byebug', 'byebug')
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'terminal-notifier' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('terminal-notifier', 'terminal-notifier')
|
@@ -25,7 +25,7 @@ Feature: Pio::FlowMod
|
|
25
25
|
| match.transport_source_port | 8 |
|
26
26
|
| match.transport_destination_port | 0 |
|
27
27
|
| cookie | 0 |
|
28
|
-
| command |
|
28
|
+
| command | :add |
|
29
29
|
| idle_timeout | 0 |
|
30
30
|
| hard_timeout | 0 |
|
31
31
|
| priority | 65535 |
|
@@ -62,7 +62,7 @@ Feature: Pio::FlowMod
|
|
62
62
|
| match.transport_source_port | 8 |
|
63
63
|
| match.transport_destination_port | 0 |
|
64
64
|
| cookie | 0 |
|
65
|
-
| command |
|
65
|
+
| command | :modify |
|
66
66
|
| idle_timeout | 0 |
|
67
67
|
| hard_timeout | 0 |
|
68
68
|
| priority | 65535 |
|
@@ -99,7 +99,7 @@ Feature: Pio::FlowMod
|
|
99
99
|
| match.transport_source_port | 8 |
|
100
100
|
| match.transport_destination_port | 0 |
|
101
101
|
| cookie | 0 |
|
102
|
-
| command |
|
102
|
+
| command | :modify_strict |
|
103
103
|
| idle_timeout | 0 |
|
104
104
|
| hard_timeout | 0 |
|
105
105
|
| priority | 65535 |
|
@@ -136,7 +136,7 @@ Feature: Pio::FlowMod
|
|
136
136
|
| match.transport_source_port | 8 |
|
137
137
|
| match.transport_destination_port | 0 |
|
138
138
|
| cookie | 0 |
|
139
|
-
| command |
|
139
|
+
| command | :delete |
|
140
140
|
| idle_timeout | 0 |
|
141
141
|
| hard_timeout | 0 |
|
142
142
|
| priority | 65535 |
|
@@ -171,7 +171,7 @@ Feature: Pio::FlowMod
|
|
171
171
|
| match.transport_source_port | 8 |
|
172
172
|
| match.transport_destination_port | 0 |
|
173
173
|
| cookie | 1 |
|
174
|
-
| command |
|
174
|
+
| command | :delete_strict |
|
175
175
|
| idle_timeout | 0 |
|
176
176
|
| hard_timeout | 0 |
|
177
177
|
| priority | 65535 |
|
@@ -29,7 +29,7 @@ Feature: Pio::PacketIn
|
|
29
29
|
| buffer_id | 4294967040 |
|
30
30
|
| total_len | 60 |
|
31
31
|
| in_port | 1 |
|
32
|
-
| reason |
|
32
|
+
| reason | :no_match |
|
33
33
|
| raw_data.length | 60 |
|
34
34
|
| source_mac | ac:5d:10:31:37:79 |
|
35
35
|
| source_mac.class | Pio::Mac |
|
@@ -50,7 +50,7 @@ Feature: Pio::PacketIn
|
|
50
50
|
| buffer_id | 4294967040 |
|
51
51
|
| total_len | 60 |
|
52
52
|
| in_port | 1 |
|
53
|
-
| reason |
|
53
|
+
| reason | :no_match |
|
54
54
|
| raw_data.length | 60 |
|
55
55
|
| source_mac | ac:5d:10:31:37:79 |
|
56
56
|
| source_mac.class | Pio::Mac |
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,43 @@
|
|
1
|
+
Feature: Apply-Actions instruction.
|
2
|
+
Background:
|
3
|
+
Given I use OpenFlow 1.3
|
4
|
+
|
5
|
+
Scenario: new()
|
6
|
+
When I try to create an OpenFlow instruction with:
|
7
|
+
"""
|
8
|
+
Pio::Apply.new
|
9
|
+
"""
|
10
|
+
Then it should finish successfully
|
11
|
+
And the message have the following fields and values:
|
12
|
+
| field | value |
|
13
|
+
| class | Pio::Apply |
|
14
|
+
| instruction_type | 4 |
|
15
|
+
| instruction_length | 8 |
|
16
|
+
| actions | [] |
|
17
|
+
|
18
|
+
Scenario: new(SendOutPort.new(1))
|
19
|
+
When I try to create an OpenFlow instruction with:
|
20
|
+
"""
|
21
|
+
Pio::Apply.new(SendOutPort.new(1))
|
22
|
+
"""
|
23
|
+
Then it should finish successfully
|
24
|
+
And the message have the following fields and values:
|
25
|
+
| field | value |
|
26
|
+
| class | Pio::Apply |
|
27
|
+
| instruction_type | 4 |
|
28
|
+
| instruction_length | 24 |
|
29
|
+
| actions.size | 1 |
|
30
|
+
| actions.at(0).class | Pio::SendOutPort |
|
31
|
+
| actions.at(0).port | 1 |
|
32
|
+
|
33
|
+
Scenario: read
|
34
|
+
When I try to parse a file named "open_flow13/apply_actions.raw" with "Pio::Apply" class
|
35
|
+
Then it should finish successfully
|
36
|
+
And the message have the following fields and values:
|
37
|
+
| field | value |
|
38
|
+
| class | Pio::Apply |
|
39
|
+
| instruction_type | 4 |
|
40
|
+
| instruction_length | 24 |
|
41
|
+
| actions.size | 1 |
|
42
|
+
| actions.at(0).class | Pio::SendOutPort |
|
43
|
+
| actions.at(0).port | 1 |
|
Binary file
|
Binary file
|
@@ -0,0 +1,146 @@
|
|
1
|
+
Feature: Pio::FlowMod
|
2
|
+
Background:
|
3
|
+
Given I use OpenFlow 1.3
|
4
|
+
|
5
|
+
Scenario: new
|
6
|
+
When I try to create an OpenFlow message with:
|
7
|
+
"""
|
8
|
+
Pio::FlowMod.new
|
9
|
+
"""
|
10
|
+
Then it should finish successfully
|
11
|
+
And the message have the following fields and values:
|
12
|
+
| field | value |
|
13
|
+
| class | Pio::FlowMod |
|
14
|
+
| ofp_version | 4 |
|
15
|
+
| message_type | 14 |
|
16
|
+
| message_length | 56 |
|
17
|
+
| transaction_id | 0 |
|
18
|
+
| xid | 0 |
|
19
|
+
| cookie | 0 |
|
20
|
+
| cookie_mask | 0 |
|
21
|
+
| table_id | 0 |
|
22
|
+
| command | :add |
|
23
|
+
| idle_timeout | 0 |
|
24
|
+
| hard_timeout | 0 |
|
25
|
+
| priority.to_hex | 0xffff |
|
26
|
+
| buffer_id | :no_buffer |
|
27
|
+
| out_port | :any |
|
28
|
+
| out_group | :any |
|
29
|
+
| flags | [] |
|
30
|
+
| match.match_fields | [] |
|
31
|
+
| instructions | [] |
|
32
|
+
|
33
|
+
Scenario: new(instructions: Pio::Apply.new(SendOutPort.new(1)))
|
34
|
+
When I try to create an OpenFlow message with:
|
35
|
+
"""
|
36
|
+
Pio::FlowMod.new(instructions: Pio::Apply.new(SendOutPort.new(1)))
|
37
|
+
"""
|
38
|
+
Then it should finish successfully
|
39
|
+
And the message have the following fields and values:
|
40
|
+
| field | value |
|
41
|
+
| class | Pio::FlowMod |
|
42
|
+
| ofp_version | 4 |
|
43
|
+
| message_type | 14 |
|
44
|
+
| message_length | 80 |
|
45
|
+
| transaction_id | 0 |
|
46
|
+
| xid | 0 |
|
47
|
+
| cookie | 0 |
|
48
|
+
| cookie_mask | 0 |
|
49
|
+
| table_id | 0 |
|
50
|
+
| command | :add |
|
51
|
+
| idle_timeout | 0 |
|
52
|
+
| hard_timeout | 0 |
|
53
|
+
| priority.to_hex | 0xffff |
|
54
|
+
| buffer_id | :no_buffer |
|
55
|
+
| out_port | :any |
|
56
|
+
| out_group | :any |
|
57
|
+
| flags | [] |
|
58
|
+
| match.match_fields | [] |
|
59
|
+
| instructions.size | 1 |
|
60
|
+
| instructions.at(0).class | Pio::Apply |
|
61
|
+
| instructions.at(0).actions.at(0).class | Pio::SendOutPort |
|
62
|
+
| instructions.at(0).actions.at(0).port | 1 |
|
63
|
+
|
64
|
+
Scenario: new(match: Pio::Match.new(in_port: 1), instructions: Pio::Apply.new(SendOutPort.new(1)))
|
65
|
+
When I try to create an OpenFlow message with:
|
66
|
+
"""
|
67
|
+
Pio::FlowMod.new(match: Pio::Match.new(in_port: 1), instructions: Pio::Apply.new(SendOutPort.new(1)))
|
68
|
+
"""
|
69
|
+
Then it should finish successfully
|
70
|
+
And the message have the following fields and values:
|
71
|
+
| field | value |
|
72
|
+
| class | Pio::FlowMod |
|
73
|
+
| ofp_version | 4 |
|
74
|
+
| message_type | 14 |
|
75
|
+
| message_length | 88 |
|
76
|
+
| transaction_id | 0 |
|
77
|
+
| xid | 0 |
|
78
|
+
| cookie | 0 |
|
79
|
+
| cookie_mask | 0 |
|
80
|
+
| table_id | 0 |
|
81
|
+
| command | :add |
|
82
|
+
| idle_timeout | 0 |
|
83
|
+
| hard_timeout | 0 |
|
84
|
+
| priority.to_hex | 0xffff |
|
85
|
+
| buffer_id | :no_buffer |
|
86
|
+
| out_port | :any |
|
87
|
+
| out_group | :any |
|
88
|
+
| flags | [] |
|
89
|
+
| match.in_port | 1 |
|
90
|
+
| instructions.size | 1 |
|
91
|
+
| instructions.at(0).class | Pio::Apply |
|
92
|
+
| instructions.at(0).actions.at(0).class | Pio::SendOutPort |
|
93
|
+
| instructions.at(0).actions.at(0).port | 1 |
|
94
|
+
|
95
|
+
Scenario: read (no match or instructions)
|
96
|
+
When I try to parse a file named "open_flow13/flow_mod_no_match_or_instructions.raw" with "Pio::FlowMod" class
|
97
|
+
Then it should finish successfully
|
98
|
+
And the message have the following fields and values:
|
99
|
+
| field | value |
|
100
|
+
| class | Pio::FlowMod |
|
101
|
+
| ofp_version | 4 |
|
102
|
+
| message_type | 14 |
|
103
|
+
| message_length | 56 |
|
104
|
+
| transaction_id | 0 |
|
105
|
+
| xid | 0 |
|
106
|
+
| cookie | 0 |
|
107
|
+
| cookie_mask | 0 |
|
108
|
+
| table_id | 0 |
|
109
|
+
| command | :add |
|
110
|
+
| idle_timeout | 0 |
|
111
|
+
| hard_timeout | 0 |
|
112
|
+
| priority.to_hex | 0xffff |
|
113
|
+
| buffer_id | :no_buffer |
|
114
|
+
| out_port | :any |
|
115
|
+
| out_group | :any |
|
116
|
+
| flags | [] |
|
117
|
+
| match.match_fields | [] |
|
118
|
+
| instructions | [] |
|
119
|
+
|
120
|
+
Scenario: read (instruction = apply, action = SendOutPort(port: 1))
|
121
|
+
When I try to parse a file named "open_flow13/flow_mod_add_apply_no_match.raw" with "Pio::FlowMod" class
|
122
|
+
Then it should finish successfully
|
123
|
+
And the message have the following fields and values:
|
124
|
+
| field | value |
|
125
|
+
| class | Pio::FlowMod |
|
126
|
+
| ofp_version | 4 |
|
127
|
+
| message_type | 14 |
|
128
|
+
| message_length | 80 |
|
129
|
+
| transaction_id | 0 |
|
130
|
+
| xid | 0 |
|
131
|
+
| cookie | 0 |
|
132
|
+
| cookie_mask | 0 |
|
133
|
+
| table_id | 0 |
|
134
|
+
| command | :add |
|
135
|
+
| idle_timeout | 0 |
|
136
|
+
| hard_timeout | 0 |
|
137
|
+
| priority.to_hex | 0xffff |
|
138
|
+
| buffer_id | :no_buffer |
|
139
|
+
| out_port | :any |
|
140
|
+
| out_group | :any |
|
141
|
+
| flags | [] |
|
142
|
+
| match.match_fields | [] |
|
143
|
+
| instructions.size | 1 |
|
144
|
+
| instructions.at(0).class | Pio::Apply |
|
145
|
+
| instructions.at(0).actions.at(0).class | Pio::SendOutPort |
|
146
|
+
| instructions.at(0).actions.at(0).port | 1 |
|
Binary file
|
Binary file
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Feature: Pio::GotoTable
|
2
|
+
Background:
|
3
|
+
Given I use OpenFlow 1.3
|
4
|
+
|
5
|
+
Scenario: new(1)
|
6
|
+
When I try to create an OpenFlow instruction with:
|
7
|
+
"""
|
8
|
+
Pio::GotoTable.new(1)
|
9
|
+
"""
|
10
|
+
Then it should finish successfully
|
11
|
+
And the message have the following fields and values:
|
12
|
+
| field | value |
|
13
|
+
| class | Pio::GotoTable |
|
14
|
+
| instruction_type | 1 |
|
15
|
+
| instruction_length | 8 |
|
16
|
+
| table_id | 1 |
|
17
|
+
|
18
|
+
Scenario: read
|
19
|
+
When I try to parse a file named "open_flow13/instruction_goto_table.raw" with "Pio::GotoTable" class
|
20
|
+
Then it should finish successfully
|
21
|
+
And the message have the following fields and values:
|
22
|
+
| field | value |
|
23
|
+
| class | Pio::GotoTable |
|
24
|
+
| instruction_type | 1 |
|
25
|
+
| instruction_length | 8 |
|
26
|
+
| table_id | 1 |
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -22,6 +22,27 @@ Feature: Pio::Match
|
|
22
22
|
| field | value |
|
23
23
|
| in_port | 1 |
|
24
24
|
|
25
|
+
Scenario: new(metadata: 1)
|
26
|
+
When I try to create an OpenFlow message with:
|
27
|
+
"""
|
28
|
+
Pio::Match.new(metadata: 1)
|
29
|
+
"""
|
30
|
+
Then it should finish successfully
|
31
|
+
And the message have the following fields and values:
|
32
|
+
| field | value |
|
33
|
+
| metadata | 1 |
|
34
|
+
|
35
|
+
Scenario: new(metadata: 1, metadata_mask: 1)
|
36
|
+
When I try to create an OpenFlow message with:
|
37
|
+
"""
|
38
|
+
Pio::Match.new(metadata: 1, metadata_mask: 1)
|
39
|
+
"""
|
40
|
+
Then it should finish successfully
|
41
|
+
And the message have the following fields and values:
|
42
|
+
| field | value |
|
43
|
+
| metadata | 1 |
|
44
|
+
| metadata_mask | 1 |
|
45
|
+
|
25
46
|
Scenario: new(ether_source_address: '01:02:03:04:05:06')
|
26
47
|
When I try to create an OpenFlow message with:
|
27
48
|
"""
|
@@ -228,6 +249,21 @@ Feature: Pio::Match
|
|
228
249
|
| field | value |
|
229
250
|
| in_port | 1 |
|
230
251
|
|
252
|
+
Scenario: read (file: open_flow13/oxm_metadata_field.raw)
|
253
|
+
When I try to parse a file named "open_flow13/oxm_metadata_field.raw" with "Pio::Match" class
|
254
|
+
Then it should finish successfully
|
255
|
+
And the message have the following fields and values:
|
256
|
+
| field | value |
|
257
|
+
| metadata | 1 |
|
258
|
+
|
259
|
+
Scenario: read (file: open_flow13/oxm_metadata_masked_field.raw)
|
260
|
+
When I try to parse a file named "open_flow13/oxm_metadata_masked_field.raw" with "Pio::Match" class
|
261
|
+
Then it should finish successfully
|
262
|
+
And the message have the following fields and values:
|
263
|
+
| field | value |
|
264
|
+
| metadata | 1 |
|
265
|
+
| metadata_mask | 18446744069414584320 |
|
266
|
+
|
231
267
|
Scenario: read (file: open_flow13/oxm_ether_destination_field.raw)
|
232
268
|
When I try to parse a file named "open_flow13/oxm_ether_destination_field.raw" with "Pio::Match" class
|
233
269
|
Then it should finish successfully
|