pio 0.27.1 → 0.27.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Rakefile +1 -1
- data/bin/{terminal-notifier → code_metrics} +2 -2
- data/bin/code_metrics-profile +16 -0
- data/features/icmpv6.pcap +0 -0
- data/features/open_flow10/aggregate_stats_reply.feature +1 -1
- data/features/open_flow10/aggregate_stats_request.feature +2 -2
- data/features/open_flow10/bad_request.feature +2 -2
- data/features/open_flow10/barrier_reply.feature +3 -18
- data/features/open_flow10/barrier_request.feature +3 -18
- data/features/open_flow10/description_stats_reply.feature +1 -1
- data/features/open_flow10/description_stats_request.feature +3 -3
- data/features/open_flow10/echo_reply.feature +4 -47
- data/features/open_flow10/echo_request.feature +4 -36
- data/features/open_flow10/exact_match.feature +20 -2
- data/features/open_flow10/features_reply.feature +65 -72
- data/features/open_flow10/features_request.feature +3 -22
- data/features/open_flow10/flow_mod.feature +5 -5
- data/features/open_flow10/flow_stats_reply.feature +2 -2
- data/features/open_flow10/flow_stats_request.feature +3 -4
- data/features/open_flow10/hello.feature +4 -20
- data/features/open_flow10/hello_failed.feature +4 -4
- data/features/open_flow10/packet_in.feature +2 -2
- data/features/open_flow10/packet_in_arp_reply.raw +0 -0
- data/features/open_flow10/packet_out.feature +1 -1
- data/features/open_flow10/port_status.feature +1 -1
- data/features/open_flow13/bad_request.feature +2 -2
- data/features/open_flow13/echo_reply.feature +5 -37
- data/features/open_flow13/echo_request.feature +5 -37
- data/features/open_flow13/features_reply.feature +3 -7
- data/features/open_flow13/features_request.feature +3 -18
- data/features/open_flow13/flow_mod.feature +5 -5
- data/features/open_flow13/hello.feature +4 -19
- data/features/open_flow13/hello_failed.feature +4 -4
- data/features/open_flow13/match.feature +4 -4
- data/features/open_flow13/packet_in.feature +3 -3
- data/features/open_flow13/packet_out.feature +3 -3
- data/features/parser.feature +10 -0
- data/lib/pio/arp/format.rb +20 -0
- data/lib/pio/ipv4_header.rb +20 -0
- data/lib/pio/open_flow.rb +0 -1
- data/lib/pio/open_flow/message.rb +51 -57
- data/lib/pio/open_flow/open_flow_header.rb +6 -10
- data/lib/pio/open_flow10.rb +20 -15
- data/lib/pio/open_flow10/aggregate_stats/reply.rb +20 -0
- data/lib/pio/open_flow10/aggregate_stats/request.rb +25 -0
- data/lib/pio/open_flow10/barrier/reply.rb +14 -0
- data/lib/pio/open_flow10/barrier/request.rb +14 -0
- data/lib/pio/open_flow10/description_stats/reply.rb +21 -0
- data/lib/pio/open_flow10/description_stats/request.rb +19 -0
- data/lib/pio/open_flow10/echo/reply.rb +16 -0
- data/lib/pio/open_flow10/echo/request.rb +16 -0
- data/lib/pio/open_flow10/error/bad_request.rb +27 -49
- data/lib/pio/open_flow10/error/hello_failed.rb +6 -28
- data/lib/pio/open_flow10/exact_match.rb +4 -39
- data/lib/pio/open_flow10/features/reply.rb +48 -72
- data/lib/pio/open_flow10/features/request.rb +4 -11
- data/lib/pio/open_flow10/flow_mod.rb +21 -51
- data/lib/pio/open_flow10/{flow_stats_reply.rb → flow_stats/reply.rb} +7 -23
- data/lib/pio/open_flow10/flow_stats/request.rb +25 -0
- data/lib/pio/open_flow10/hello.rb +3 -13
- data/lib/pio/open_flow10/match.rb +0 -18
- data/lib/pio/open_flow10/match10.rb +22 -0
- data/lib/pio/open_flow10/packet_in.rb +18 -42
- data/lib/pio/open_flow10/packet_out.rb +8 -31
- data/lib/pio/open_flow10/port_status.rb +11 -39
- data/lib/pio/open_flow10/stats_reply.rb +11 -8
- data/lib/pio/open_flow10/stats_request.rb +8 -8
- data/lib/pio/open_flow13.rb +13 -6
- data/lib/pio/open_flow13/echo/reply.rb +15 -0
- data/lib/pio/open_flow13/echo/request.rb +15 -0
- data/lib/pio/open_flow13/error/bad_request.rb +32 -49
- data/lib/pio/open_flow13/error/hello_failed.rb +7 -30
- data/lib/pio/open_flow13/features/reply.rb +27 -51
- data/lib/pio/open_flow13/features/request.rb +3 -10
- data/lib/pio/open_flow13/flow_mod.rb +29 -52
- data/lib/pio/open_flow13/hello.rb +18 -22
- data/lib/pio/open_flow13/packet_in.rb +26 -44
- data/lib/pio/open_flow13/packet_out.rb +16 -35
- data/lib/pio/open_flow13/stats_request.rb +5 -21
- data/lib/pio/parser.rb +5 -4
- data/lib/pio/version.rb +1 -1
- data/pio.gemspec +6 -6
- data/spec/pio/open_flow10/{echo_reply_spec.rb → echo/reply_spec.rb} +1 -1
- data/spec/pio/open_flow10/{echo_request_spec.rb → echo/request_spec.rb} +1 -1
- data/spec/pio/open_flow10/error/hello_failed_spec.rb +2 -2
- data/spec/pio/open_flow10/features/request_spec.rb +0 -5
- data/spec/pio/open_flow10/flow_mod_spec.rb +2 -4
- data/spec/pio/open_flow10/flow_stats_reply_spec.rb +1 -1
- data/spec/pio/open_flow10/flow_stats_request_spec.rb +2 -2
- data/spec/pio/open_flow10/packet_out_spec.rb +15 -18
- data/spec/pio/open_flow13/echo_reply_spec.rb +1 -1
- data/spec/pio/open_flow13/echo_request_spec.rb +1 -1
- data/spec/pio/open_flow13/error/hello_failed_spec.rb +2 -2
- data/spec/pio/open_flow13/features/request_spec.rb +5 -3
- data/spec/pio/open_flow13/hello_spec.rb +3 -3
- data/spec/support/shared_examples_for_openflow_messages.rb +5 -12
- metadata +92 -85
- data/lib/pio/open_flow/echo.rb +0 -44
- data/lib/pio/open_flow/format.rb +0 -46
- data/lib/pio/open_flow10/aggregate_stats_reply.rb +0 -38
- data/lib/pio/open_flow10/aggregate_stats_request.rb +0 -42
- data/lib/pio/open_flow10/barrier_reply.rb +0 -21
- data/lib/pio/open_flow10/barrier_request.rb +0 -22
- data/lib/pio/open_flow10/description_stats_reply.rb +0 -35
- data/lib/pio/open_flow10/description_stats_request.rb +0 -36
- data/lib/pio/open_flow10/echo.rb +0 -20
- data/lib/pio/open_flow10/flow_stats_request.rb +0 -64
- data/lib/pio/open_flow13/echo.rb +0 -20
- data/lib/pio/open_flow13/features.rb +0 -2
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'pio/open_flow'
|
2
2
|
|
3
|
-
# Base module.
|
4
3
|
module Pio
|
5
|
-
# OpenFlow 1.0 messages
|
6
4
|
module OpenFlow13
|
7
5
|
# OpenFlow 1.3 Hello message parser and generator
|
8
6
|
class Hello < OpenFlow::Message
|
@@ -43,40 +41,38 @@ module Pio
|
|
43
41
|
end
|
44
42
|
end
|
45
43
|
|
46
|
-
|
47
|
-
|
48
|
-
extend OpenFlow::Format
|
44
|
+
open_flow_header version: 4, message_type: 0
|
45
|
+
body :body
|
49
46
|
|
50
|
-
|
51
|
-
body
|
47
|
+
def elements
|
48
|
+
body.elements
|
49
|
+
end
|
52
50
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
end
|
51
|
+
def supported_versions
|
52
|
+
supported_versions_list.map do |each|
|
53
|
+
"open_flow1#{each - 1}".to_sym
|
57
54
|
end
|
55
|
+
end
|
58
56
|
|
59
|
-
|
57
|
+
private
|
60
58
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
59
|
+
def supported_versions_list
|
60
|
+
(1..32).each_with_object([]) do |each, result|
|
61
|
+
result << each if (version_bitmap >> each & 1) == 1
|
65
62
|
end
|
63
|
+
end
|
66
64
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
end
|
65
|
+
def version_bitmap
|
66
|
+
bitmap = elements.detect(&:version_bitmap?)
|
67
|
+
bitmap ? bitmap.element_value : 0
|
71
68
|
end
|
72
69
|
|
73
70
|
def initialize(user_options = {})
|
74
71
|
validate_user_options user_options
|
75
|
-
header_options = parse_header_options(user_options)
|
76
72
|
body_options = { elements: [{ element_type: VERSION_BITMAP,
|
77
73
|
element_length: 8,
|
78
74
|
element_value: 0b10000 }] }
|
79
|
-
@format = Format.new(
|
75
|
+
@format = Format.new(user_options.merge(body: body_options))
|
80
76
|
end
|
81
77
|
end
|
82
78
|
end
|
@@ -2,7 +2,6 @@ require 'pio/open_flow'
|
|
2
2
|
require 'pio/open_flow13/match'
|
3
3
|
require 'pio/parser'
|
4
4
|
|
5
|
-
# Base module.
|
6
5
|
module Pio
|
7
6
|
module OpenFlow13
|
8
7
|
# OpenFlow 1.3 PacketIn message parser and generator
|
@@ -23,53 +22,36 @@ module Pio
|
|
23
22
|
end
|
24
23
|
end
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
def in_port
|
49
|
-
match.in_port
|
50
|
-
end
|
51
|
-
|
52
|
-
def method_missing(method, *args)
|
53
|
-
data.__send__(method, *args).snapshot
|
54
|
-
end
|
25
|
+
open_flow_header(version: 4,
|
26
|
+
message_type: 10,
|
27
|
+
message_length: lambda do
|
28
|
+
24 + match.length + padding.length + raw_data.length
|
29
|
+
end)
|
30
|
+
uint32 :buffer_id
|
31
|
+
uint16 :total_len, initial_value: -> { raw_data.length }
|
32
|
+
reason :reason
|
33
|
+
uint8 :table_id
|
34
|
+
uint64 :cookie
|
35
|
+
oxm :match
|
36
|
+
string :padding, length: 2
|
37
|
+
hide :padding
|
38
|
+
string :raw_data, read_length: :total_len
|
39
|
+
|
40
|
+
attr_accessor :datapath_id
|
41
|
+
alias_method :dpid, :datapath_id
|
42
|
+
alias_method :dpid=, :datapath_id=
|
43
|
+
|
44
|
+
def data
|
45
|
+
@data ||= Pio::Parser.read(raw_data)
|
55
46
|
end
|
56
47
|
|
57
|
-
|
58
|
-
|
59
|
-
extend OpenFlow::Format
|
60
|
-
|
61
|
-
header version: 4, message_type: 10
|
62
|
-
body :body
|
63
|
-
|
64
|
-
attr_accessor :datapath_id
|
65
|
-
alias_method :dpid, :datapath_id
|
66
|
-
alias_method :dpid=, :datapath_id=
|
48
|
+
def in_port
|
49
|
+
match.in_port
|
67
50
|
end
|
68
51
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
body_option :raw_data
|
52
|
+
def method_missing(method, *args)
|
53
|
+
data.__send__(method, *args).snapshot
|
54
|
+
end
|
73
55
|
end
|
74
56
|
end
|
75
57
|
end
|
@@ -2,7 +2,6 @@ require 'pio/open_flow'
|
|
2
2
|
require 'pio/open_flow13/actions'
|
3
3
|
require 'pio/open_flow13/buffer_id'
|
4
4
|
|
5
|
-
# Base module.
|
6
5
|
module Pio
|
7
6
|
module OpenFlow13
|
8
7
|
# OpenFlow 1.3 PacketOut message parser and generator
|
@@ -23,43 +22,25 @@ module Pio
|
|
23
22
|
end
|
24
23
|
end
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def data
|
43
|
-
@data ||= Pio::Parser.read(raw_data)
|
44
|
-
end
|
45
|
-
|
46
|
-
def method_missing(method, *args)
|
47
|
-
data.__send__(method, *args).snapshot
|
48
|
-
end
|
25
|
+
open_flow_header(version: 4,
|
26
|
+
message_type: 13,
|
27
|
+
message_length: lambda do
|
28
|
+
24 + actions_length + raw_data.length
|
29
|
+
end)
|
30
|
+
buffer_id :buffer_id
|
31
|
+
in_port :in_port
|
32
|
+
uint16 :actions_length, initial_value: -> { actions.binary.length }
|
33
|
+
string :padding, length: 6
|
34
|
+
actions :actions, length: :actions_length
|
35
|
+
string :raw_data, read_length: -> { message_length - 24 - actions_length }
|
36
|
+
|
37
|
+
def data
|
38
|
+
@data ||= Pio::Parser.read(raw_data)
|
49
39
|
end
|
50
40
|
|
51
|
-
|
52
|
-
|
53
|
-
extend OpenFlow::Format
|
54
|
-
|
55
|
-
header version: 4, message_type: 13
|
56
|
-
body :body
|
41
|
+
def method_missing(method, *args)
|
42
|
+
data.__send__(method, *args).snapshot
|
57
43
|
end
|
58
|
-
|
59
|
-
body_option :buffer_id
|
60
|
-
body_option :in_port
|
61
|
-
body_option :actions
|
62
|
-
body_option :raw_data
|
63
44
|
end
|
64
45
|
end
|
65
46
|
end
|
@@ -27,27 +27,11 @@ module Pio
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
uint16 :stats_flags
|
36
|
-
|
37
|
-
def length
|
38
|
-
4
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
# OpenFlow 1.3 Stats Request message format
|
43
|
-
class Format < BinData::Record
|
44
|
-
extend OpenFlow::Format
|
45
|
-
|
46
|
-
header version: 4, message_type: 16
|
47
|
-
body :body
|
48
|
-
end
|
49
|
-
|
50
|
-
body_option :stats_type
|
30
|
+
open_flow_header version: 4,
|
31
|
+
message_type: 16,
|
32
|
+
message_length: 12
|
33
|
+
stats_type :stats_type
|
34
|
+
uint16 :stats_flags
|
51
35
|
end
|
52
36
|
end
|
53
37
|
end
|
data/lib/pio/parser.rb
CHANGED
@@ -5,12 +5,13 @@ module Pio
|
|
5
5
|
# Raw data parser.
|
6
6
|
class Parser
|
7
7
|
# Ethernet header parser
|
8
|
-
class
|
8
|
+
class EthernetFrame < BinData::Record
|
9
9
|
endian :big
|
10
10
|
|
11
11
|
mac_address :destination_mac
|
12
12
|
mac_address :source_mac
|
13
13
|
uint16 :ether_type
|
14
|
+
rest :rest
|
14
15
|
end
|
15
16
|
|
16
17
|
# IPv4 packet parser
|
@@ -30,8 +31,8 @@ module Pio
|
|
30
31
|
|
31
32
|
# rubocop:disable MethodLength
|
32
33
|
def self.read(raw_data)
|
33
|
-
|
34
|
-
case
|
34
|
+
ethernet_frame = EthernetFrame.read(raw_data)
|
35
|
+
case ethernet_frame.ether_type
|
35
36
|
when EthernetHeader::EtherType::IPV4, EthernetHeader::EtherType::VLAN
|
36
37
|
IPv4Packet.read raw_data
|
37
38
|
when EthernetHeader::EtherType::ARP
|
@@ -39,7 +40,7 @@ module Pio
|
|
39
40
|
when EthernetHeader::EtherType::LLDP
|
40
41
|
Pio::Lldp.read raw_data
|
41
42
|
else
|
42
|
-
|
43
|
+
ethernet_frame
|
43
44
|
end
|
44
45
|
end
|
45
46
|
# rubocop:enable MethodLength
|
data/lib/pio/version.rb
CHANGED
data/pio.gemspec
CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |gem|
|
|
32
32
|
|
33
33
|
gem.add_development_dependency 'rake'
|
34
34
|
gem.add_development_dependency 'bundler', '~> 1.10.6'
|
35
|
-
gem.add_development_dependency 'pry', '~> 0.10.
|
35
|
+
gem.add_development_dependency 'pry', '~> 0.10.3'
|
36
36
|
|
37
37
|
# Guard
|
38
38
|
gem.add_development_dependency 'guard', '~> 2.13.0'
|
@@ -46,18 +46,18 @@ Gem::Specification.new do |gem|
|
|
46
46
|
gem.add_development_dependency 'terminal-notifier-guard', '~> 1.6.4'
|
47
47
|
|
48
48
|
# Docs
|
49
|
-
gem.add_development_dependency 'inch', '~> 0.
|
49
|
+
gem.add_development_dependency 'inch', '~> 0.7.0'
|
50
50
|
gem.add_development_dependency 'relish', '~> 0.7.1'
|
51
51
|
gem.add_development_dependency 'yard', '~> 0.8.7.6'
|
52
52
|
|
53
53
|
# Test
|
54
54
|
gem.add_development_dependency 'codeclimate-test-reporter', '~> 0.4.8'
|
55
|
-
gem.add_development_dependency 'coveralls', '~> 0.8.
|
56
|
-
gem.add_development_dependency 'cucumber', '~> 2.0
|
55
|
+
gem.add_development_dependency 'coveralls', '~> 0.8.3'
|
56
|
+
gem.add_development_dependency 'cucumber', '~> 2.1.0'
|
57
57
|
gem.add_development_dependency 'flay', '~> 2.6.1'
|
58
58
|
gem.add_development_dependency 'flog', '~> 4.3.2'
|
59
|
-
gem.add_development_dependency 'reek', '~> 3.
|
59
|
+
gem.add_development_dependency 'reek', '~> 3.5.0'
|
60
60
|
gem.add_development_dependency 'rspec', '~> 3.3.0'
|
61
61
|
gem.add_development_dependency 'rspec-given', '~> 3.7.1'
|
62
|
-
gem.add_development_dependency 'rubocop', '~> 0.34.
|
62
|
+
gem.add_development_dependency 'rubocop', '~> 0.34.2'
|
63
63
|
end
|
@@ -10,7 +10,7 @@ describe Pio::OpenFlow10::Error::HelloFailed do
|
|
10
10
|
context 'with {}' do
|
11
11
|
Given(:options) { {} }
|
12
12
|
|
13
|
-
Then { hello_failed.
|
13
|
+
Then { hello_failed.message_length == 12 }
|
14
14
|
Then { hello_failed.error_type == :hello_failed }
|
15
15
|
Then { hello_failed.error_code == :incompatible }
|
16
16
|
Then { hello_failed.description == '' }
|
@@ -19,7 +19,7 @@ describe Pio::OpenFlow10::Error::HelloFailed do
|
|
19
19
|
context "with description: 'error description'" do
|
20
20
|
Given(:options) { { description: 'error description' } }
|
21
21
|
|
22
|
-
Then { hello_failed.
|
22
|
+
Then { hello_failed.message_length == 29 }
|
23
23
|
Then { hello_failed.description == 'error description' }
|
24
24
|
end
|
25
25
|
end
|
@@ -4,10 +4,5 @@ describe Pio::OpenFlow10::Features::Request do
|
|
4
4
|
describe '.new' do
|
5
5
|
it_should_behave_like('an OpenFlow message',
|
6
6
|
Pio::OpenFlow10::Features::Request)
|
7
|
-
|
8
|
-
context "with body: 'abcde'" do
|
9
|
-
When(:message) { Pio::OpenFlow10::Features::Request.new(body: 'abcde') }
|
10
|
-
Then { message == Failure(RuntimeError, 'Unknown option: body') }
|
11
|
-
end
|
12
7
|
end
|
13
8
|
end
|
@@ -32,11 +32,10 @@ describe Pio::OpenFlow10::FlowMod do
|
|
32
32
|
Then { flow_mod.class == Pio::OpenFlow10::FlowMod }
|
33
33
|
Then { flow_mod.ofp_version == 0x1 }
|
34
34
|
Then { flow_mod.message_type == 0xe }
|
35
|
-
Then { flow_mod.
|
35
|
+
Then { flow_mod.message_length == 0x50 }
|
36
36
|
Then { flow_mod.transaction_id == 0x15 }
|
37
37
|
Then { flow_mod.xid == 0x15 }
|
38
38
|
|
39
|
-
Then { !flow_mod.body.empty? }
|
40
39
|
Then do
|
41
40
|
flow_mod.match.wildcards.keys == [
|
42
41
|
:vlan_vid,
|
@@ -98,11 +97,10 @@ describe Pio::OpenFlow10::FlowMod do
|
|
98
97
|
Then { flow_mod.class == Pio::OpenFlow10::FlowMod }
|
99
98
|
Then { flow_mod.ofp_version == 0x1 }
|
100
99
|
Then { flow_mod.message_type == 0xe }
|
101
|
-
Then { flow_mod.
|
100
|
+
Then { flow_mod.message_length == 0x50 }
|
102
101
|
Then { flow_mod.transaction_id == 0x15 }
|
103
102
|
Then { flow_mod.xid == 0x15 }
|
104
103
|
|
105
|
-
Then { !flow_mod.body.empty? }
|
106
104
|
Then do
|
107
105
|
flow_mod.match.wildcards.keys == [
|
108
106
|
:vlan_vid,
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'pio/open_flow10/
|
1
|
+
require 'pio/open_flow10/flow_stats/request'
|
2
2
|
|
3
3
|
describe Pio::OpenFlow10::FlowStats::Request do
|
4
4
|
describe '.read' do
|
@@ -19,7 +19,7 @@ describe Pio::OpenFlow10::FlowStats::Request do
|
|
19
19
|
Then { flow_stats_request.class == Pio::OpenFlow10::FlowStats::Request }
|
20
20
|
Then { flow_stats_request.ofp_version == 1 }
|
21
21
|
Then { flow_stats_request.message_type == 16 }
|
22
|
-
Then { flow_stats_request.
|
22
|
+
Then { flow_stats_request.message_length == 56 }
|
23
23
|
Then { flow_stats_request.transaction_id == 13 }
|
24
24
|
Then { flow_stats_request.xid == 13 }
|
25
25
|
Then { flow_stats_request.stats_type == :flow }
|
@@ -41,11 +41,10 @@ describe Pio::OpenFlow10::PacketOut do
|
|
41
41
|
Then { result.class == Pio::OpenFlow10::PacketOut }
|
42
42
|
Then { result.ofp_version == 0x1 }
|
43
43
|
Then { result.message_type == 0xd }
|
44
|
-
Then { result.
|
44
|
+
Then { result.message_length == 0x58 }
|
45
45
|
Then { result.transaction_id == 0x16 }
|
46
46
|
Then { result.xid == 0x16 }
|
47
47
|
|
48
|
-
Then { !result.body.empty? }
|
49
48
|
Then { result.buffer_id == 0xffffffff }
|
50
49
|
Then { result.in_port == 0xffff }
|
51
50
|
Then { result.actions_len == 0x8 }
|
@@ -70,11 +69,10 @@ describe Pio::OpenFlow10::PacketOut do
|
|
70
69
|
Then { result.class == Pio::OpenFlow10::PacketOut }
|
71
70
|
Then { result.ofp_version == 0x1 }
|
72
71
|
Then { result.message_type == 0xd }
|
73
|
-
Then { result.
|
72
|
+
Then { result.message_length == 0x58 }
|
74
73
|
Then { result.transaction_id == 0x16 }
|
75
74
|
Then { result.xid == 0x16 }
|
76
75
|
|
77
|
-
Then { !result.body.empty? }
|
78
76
|
Then { result.buffer_id == 0xffffffff }
|
79
77
|
Then { result.in_port == 0xffff }
|
80
78
|
Then { result.actions_len == 0x8 }
|
@@ -113,11 +111,10 @@ describe Pio::OpenFlow10::PacketOut do
|
|
113
111
|
|
114
112
|
Then { result.ofp_version == 0x1 }
|
115
113
|
Then { result.message_type == 0xd }
|
116
|
-
Then { result.
|
114
|
+
Then { result.message_length == 0x58 }
|
117
115
|
Then { result.transaction_id == 0x16 }
|
118
116
|
Then { result.xid == 0x16 }
|
119
117
|
|
120
|
-
Then { !result.body.empty? }
|
121
118
|
Then { result.buffer_id == 0xffffffff }
|
122
119
|
Then { result.in_port == 0xffff }
|
123
120
|
Then { result.actions_len == 0x8 }
|
@@ -145,7 +142,7 @@ describe Pio::OpenFlow10::PacketOut do
|
|
145
142
|
}
|
146
143
|
end
|
147
144
|
|
148
|
-
Then { result.
|
145
|
+
Then { result.message_length == 0x58 }
|
149
146
|
Then { result.actions_len == 0x8 }
|
150
147
|
Then { result.actions.length == 1 }
|
151
148
|
Then { result.actions[0].is_a? Pio::SetVlanVid }
|
@@ -163,7 +160,7 @@ describe Pio::OpenFlow10::PacketOut do
|
|
163
160
|
}
|
164
161
|
end
|
165
162
|
|
166
|
-
Then { result.
|
163
|
+
Then { result.message_length == 0x58 }
|
167
164
|
Then { result.actions_len == 0x8 }
|
168
165
|
Then { result.actions.length == 1 }
|
169
166
|
Then { result.actions[0].is_a? Pio::SetVlanPriority }
|
@@ -181,7 +178,7 @@ describe Pio::OpenFlow10::PacketOut do
|
|
181
178
|
}
|
182
179
|
end
|
183
180
|
|
184
|
-
Then { result.
|
181
|
+
Then { result.message_length == 0x58 }
|
185
182
|
Then { result.actions_len == 0x8 }
|
186
183
|
Then { result.actions.length == 1 }
|
187
184
|
Then { result.actions[0].is_a? Pio::StripVlanHeader }
|
@@ -198,7 +195,7 @@ describe Pio::OpenFlow10::PacketOut do
|
|
198
195
|
}
|
199
196
|
end
|
200
197
|
|
201
|
-
Then { result.
|
198
|
+
Then { result.message_length == 0x60 }
|
202
199
|
Then { result.actions_len == 0x10 }
|
203
200
|
Then { result.actions.length == 1 }
|
204
201
|
Then { result.actions[0].is_a? Pio::SetEtherSourceAddress }
|
@@ -216,7 +213,7 @@ describe Pio::OpenFlow10::PacketOut do
|
|
216
213
|
}
|
217
214
|
end
|
218
215
|
|
219
|
-
Then { result.
|
216
|
+
Then { result.message_length == 0x60 }
|
220
217
|
Then { result.actions_len == 0x10 }
|
221
218
|
Then { result.actions.length == 1 }
|
222
219
|
Then { result.actions[0].is_a? Pio::SetEtherDestinationAddress }
|
@@ -234,7 +231,7 @@ describe Pio::OpenFlow10::PacketOut do
|
|
234
231
|
}
|
235
232
|
end
|
236
233
|
|
237
|
-
Then { result.
|
234
|
+
Then { result.message_length == 0x58 }
|
238
235
|
Then { result.actions_len == 0x8 }
|
239
236
|
Then { result.actions.length == 1 }
|
240
237
|
Then { result.actions[0].is_a? Pio::SetIpSourceAddress }
|
@@ -252,7 +249,7 @@ describe Pio::OpenFlow10::PacketOut do
|
|
252
249
|
}
|
253
250
|
end
|
254
251
|
|
255
|
-
Then { result.
|
252
|
+
Then { result.message_length == 0x58 }
|
256
253
|
Then { result.actions_len == 0x8 }
|
257
254
|
Then { result.actions.length == 1 }
|
258
255
|
Then { result.actions[0].is_a? Pio::SetIpDestinationAddress }
|
@@ -270,7 +267,7 @@ describe Pio::OpenFlow10::PacketOut do
|
|
270
267
|
}
|
271
268
|
end
|
272
269
|
|
273
|
-
Then { result.
|
270
|
+
Then { result.message_length == 0x58 }
|
274
271
|
Then { result.actions_len == 0x8 }
|
275
272
|
Then { result.actions.length == 1 }
|
276
273
|
Then { result.actions[0].is_a? Pio::SetIpTos }
|
@@ -288,7 +285,7 @@ describe Pio::OpenFlow10::PacketOut do
|
|
288
285
|
}
|
289
286
|
end
|
290
287
|
|
291
|
-
Then { result.
|
288
|
+
Then { result.message_length == 0x58 }
|
292
289
|
Then { result.actions_len == 0x8 }
|
293
290
|
Then { result.actions.length == 1 }
|
294
291
|
Then { result.actions[0].is_a? Pio::SetTransportSourcePort }
|
@@ -306,7 +303,7 @@ describe Pio::OpenFlow10::PacketOut do
|
|
306
303
|
}
|
307
304
|
end
|
308
305
|
|
309
|
-
Then { result.
|
306
|
+
Then { result.message_length == 0x58 }
|
310
307
|
Then { result.actions_len == 0x8 }
|
311
308
|
Then { result.actions.length == 1 }
|
312
309
|
Then { result.actions[0].is_a? Pio::SetTransportDestinationPort }
|
@@ -324,7 +321,7 @@ describe Pio::OpenFlow10::PacketOut do
|
|
324
321
|
}
|
325
322
|
end
|
326
323
|
|
327
|
-
Then { result.
|
324
|
+
Then { result.message_length == 0x60 }
|
328
325
|
Then { result.actions_len == 0x10 }
|
329
326
|
Then { result.actions.length == 1 }
|
330
327
|
Then { result.actions[0].is_a? Pio::Enqueue }
|
@@ -344,7 +341,7 @@ describe Pio::OpenFlow10::PacketOut do
|
|
344
341
|
}
|
345
342
|
end
|
346
343
|
|
347
|
-
Then { result.
|
344
|
+
Then { result.message_length == 0x60 }
|
348
345
|
Then { result.actions_len == 0x10 }
|
349
346
|
Then { result.actions.length == 2 }
|
350
347
|
Then { result.actions[0].is_a? Pio::OpenFlow10::SendOutPort }
|