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,22 +1,25 @@
|
|
1
|
+
require 'pio/open_flow/message'
|
2
|
+
require 'pio/open_flow10/aggregate_stats/reply'
|
3
|
+
require 'pio/open_flow10/description_stats/reply'
|
4
|
+
require 'pio/open_flow10/flow_stats/reply'
|
5
|
+
|
1
6
|
module Pio
|
2
7
|
module OpenFlow10
|
3
8
|
class Stats
|
4
9
|
# Stats reply parser.
|
5
10
|
class Reply
|
6
|
-
# Stats reply format.
|
7
|
-
class Format < BinData::Record
|
8
|
-
extend OpenFlow::Format
|
9
|
-
|
10
|
-
header version: 1, message_type: 17
|
11
|
-
stats_type :stats_type
|
12
|
-
end
|
13
|
-
|
14
11
|
TYPES = {
|
15
12
|
description: OpenFlow10::DescriptionStats::Reply,
|
16
13
|
flow: OpenFlow10::FlowStats::Reply,
|
17
14
|
aggregate: OpenFlow10::AggregateStats::Reply
|
18
15
|
}
|
19
16
|
|
17
|
+
# Stats reply format.
|
18
|
+
class Format < OpenFlow::Message
|
19
|
+
open_flow_header version: 1, message_type: 17, message_length: 10
|
20
|
+
stats_type :stats_type
|
21
|
+
end
|
22
|
+
|
20
23
|
def self.read(binary)
|
21
24
|
TYPES.fetch(Format.read(binary).stats_type.to_sym).read(binary)
|
22
25
|
rescue KeyError
|
@@ -1,22 +1,22 @@
|
|
1
|
+
require 'pio/open_flow/message'
|
2
|
+
|
1
3
|
module Pio
|
2
4
|
module OpenFlow10
|
3
5
|
class Stats
|
4
6
|
# Stats request parser.
|
5
7
|
class Request
|
6
|
-
# Stats request format.
|
7
|
-
class Format < BinData::Record
|
8
|
-
extend OpenFlow::Format
|
9
|
-
|
10
|
-
header version: 1, message_type: 16
|
11
|
-
stats_type :stats_type
|
12
|
-
end
|
13
|
-
|
14
8
|
TYPES = {
|
15
9
|
description: OpenFlow10::DescriptionStats::Request,
|
16
10
|
flow: OpenFlow10::FlowStats::Request,
|
17
11
|
aggregate: OpenFlow10::AggregateStats::Request
|
18
12
|
}
|
19
13
|
|
14
|
+
# Stats request format.
|
15
|
+
class Format < OpenFlow::Message
|
16
|
+
open_flow_header version: 1, message_type: 16, message_length: 10
|
17
|
+
stats_type :stats_type
|
18
|
+
end
|
19
|
+
|
20
20
|
def self.read(binary)
|
21
21
|
TYPES.fetch(Format.read(binary).stats_type.to_sym).read(binary)
|
22
22
|
rescue KeyError
|
data/lib/pio/open_flow13.rb
CHANGED
@@ -1,15 +1,22 @@
|
|
1
|
-
|
2
|
-
require 'pio/open_flow13/echo'
|
1
|
+
# Messages
|
2
|
+
require 'pio/open_flow13/echo/reply'
|
3
|
+
require 'pio/open_flow13/echo/request'
|
3
4
|
require 'pio/open_flow13/error'
|
4
5
|
require 'pio/open_flow13/error/bad_request'
|
5
6
|
require 'pio/open_flow13/error/hello_failed'
|
6
|
-
require 'pio/open_flow13/features'
|
7
|
+
require 'pio/open_flow13/features/reply'
|
8
|
+
require 'pio/open_flow13/features/request'
|
7
9
|
require 'pio/open_flow13/flow_mod'
|
8
|
-
require 'pio/open_flow13/goto_table'
|
9
10
|
require 'pio/open_flow13/hello'
|
10
|
-
require 'pio/open_flow13/meter'
|
11
11
|
require 'pio/open_flow13/packet_in'
|
12
12
|
require 'pio/open_flow13/packet_out'
|
13
|
-
require 'pio/open_flow13/send_out_port'
|
14
13
|
require 'pio/open_flow13/stats_request'
|
14
|
+
|
15
|
+
# Actions
|
16
|
+
require 'pio/open_flow13/send_out_port'
|
17
|
+
|
18
|
+
# Instructions
|
19
|
+
require 'pio/open_flow13/apply'
|
20
|
+
require 'pio/open_flow13/goto_table'
|
21
|
+
require 'pio/open_flow13/meter'
|
15
22
|
require 'pio/open_flow13/write_metadata'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'pio/open_flow/message'
|
2
|
+
|
3
|
+
module Pio
|
4
|
+
module OpenFlow13
|
5
|
+
module Echo
|
6
|
+
# OpenFlow 1.3 Echo Reply message.
|
7
|
+
class Reply < OpenFlow::Message
|
8
|
+
open_flow_header version: 4, message_type: 3
|
9
|
+
string :body, read_length: -> { message_length - 8 }
|
10
|
+
|
11
|
+
alias_method :user_data, :body
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'pio/open_flow/message'
|
2
|
+
|
3
|
+
module Pio
|
4
|
+
module OpenFlow13
|
5
|
+
module Echo
|
6
|
+
# OpenFlow 1.3 Echo Request message.
|
7
|
+
class Request < OpenFlow::Message
|
8
|
+
open_flow_header version: 4, message_type: 2
|
9
|
+
string :body, read_length: -> { message_length - 8 }
|
10
|
+
|
11
|
+
alias_method :user_data, :body
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'pio/open_flow/format'
|
2
1
|
require 'pio/open_flow/message'
|
3
2
|
require 'pio/open_flow13/error/error_type13'
|
4
3
|
|
@@ -7,59 +6,43 @@ module Pio
|
|
7
6
|
module Error
|
8
7
|
# Bad request error.
|
9
8
|
class BadRequest < OpenFlow::Message
|
10
|
-
#
|
11
|
-
class
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
def get
|
35
|
-
ERROR_CODES.invert.fetch(error_code)
|
36
|
-
end
|
37
|
-
|
38
|
-
def set(value)
|
39
|
-
self.error_code = ERROR_CODES.fetch(value)
|
40
|
-
end
|
9
|
+
# enum ofp_bad_request_code
|
10
|
+
class BadRequestCode < BinData::Primitive
|
11
|
+
ERROR_CODES = {
|
12
|
+
bad_version: 0,
|
13
|
+
bad_type: 1,
|
14
|
+
bad_multipart: 2,
|
15
|
+
bad_experimenter: 3,
|
16
|
+
bad_experimenter_type: 4,
|
17
|
+
permissions_error: 5,
|
18
|
+
bad_length: 6,
|
19
|
+
buffer_empty: 7,
|
20
|
+
buffer_unknown: 8,
|
21
|
+
bad_table_id: 9,
|
22
|
+
controller_is_slave: 10,
|
23
|
+
bad_port: 11,
|
24
|
+
bad_packet: 12,
|
25
|
+
multipart_buffer_overflow: 13
|
26
|
+
}
|
27
|
+
|
28
|
+
endian :big
|
29
|
+
uint16 :error_code
|
30
|
+
|
31
|
+
def get
|
32
|
+
ERROR_CODES.invert.fetch(error_code)
|
41
33
|
end
|
42
34
|
|
43
|
-
|
44
|
-
|
45
|
-
endian :big
|
46
|
-
|
47
|
-
error_type13 :error_type, value: -> { :bad_request }
|
48
|
-
bad_request_code :error_code
|
49
|
-
rest :raw_data
|
50
|
-
|
51
|
-
def length
|
52
|
-
4 + raw_data.length
|
53
|
-
end
|
35
|
+
def set(value)
|
36
|
+
self.error_code = ERROR_CODES.fetch(value)
|
54
37
|
end
|
55
|
-
|
56
|
-
extend OpenFlow::Format
|
57
|
-
|
58
|
-
header version: 4, message_type: 1
|
59
|
-
body :body
|
60
38
|
end
|
61
39
|
|
62
|
-
|
40
|
+
open_flow_header version: 4,
|
41
|
+
message_type: 1,
|
42
|
+
message_length: -> { 12 + raw_data.length }
|
43
|
+
error_type13 :error_type, value: -> { :bad_request }
|
44
|
+
bad_request_code :error_code
|
45
|
+
rest :raw_data
|
63
46
|
end
|
64
47
|
end
|
65
48
|
end
|
@@ -1,41 +1,18 @@
|
|
1
1
|
require 'pio/open_flow/hello_failed_code'
|
2
|
-
require 'pio/open_flow/format'
|
3
2
|
require 'pio/open_flow/message'
|
3
|
+
require 'pio/open_flow13/error/error_type13'
|
4
4
|
|
5
|
-
# Base module.
|
6
5
|
module Pio
|
7
|
-
# OpenFlow 1.3 messages
|
8
6
|
module OpenFlow13
|
9
7
|
module Error
|
10
8
|
# Hello Failed error message
|
11
9
|
class HelloFailed < OpenFlow::Message
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
error_type13 :error_type
|
19
|
-
hello_failed_code :error_code
|
20
|
-
rest :description
|
21
|
-
|
22
|
-
def length
|
23
|
-
4 + description.length
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
extend OpenFlow::Format
|
28
|
-
|
29
|
-
header version: 4, message_type: 1
|
30
|
-
body :body
|
31
|
-
|
32
|
-
def length
|
33
|
-
8 + body.length
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
body_option :error_code
|
38
|
-
body_option :description
|
10
|
+
open_flow_header version: 4,
|
11
|
+
message_type: 1,
|
12
|
+
message_length: -> { 12 + description.length }
|
13
|
+
error_type13 :error_type
|
14
|
+
hello_failed_code :error_code
|
15
|
+
rest :description
|
39
16
|
end
|
40
17
|
end
|
41
18
|
end
|
@@ -1,62 +1,38 @@
|
|
1
|
-
require 'pio/open_flow'
|
1
|
+
require 'pio/open_flow/message'
|
2
2
|
|
3
|
-
# Base module.
|
4
3
|
module Pio
|
5
|
-
# OpenFlow 1.3 messages
|
6
4
|
module OpenFlow13
|
7
5
|
# Features Request and Reply message.
|
8
6
|
class Features
|
9
7
|
# Features Reply message.
|
10
8
|
class Reply < OpenFlow::Message
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
def length
|
38
|
-
24
|
39
|
-
end
|
9
|
+
extend OpenFlow::Flags
|
10
|
+
|
11
|
+
flags_32bit(:capabilities,
|
12
|
+
[:flow_stats,
|
13
|
+
:table_stats,
|
14
|
+
:port_stats,
|
15
|
+
:group_stats,
|
16
|
+
:NOT_USED,
|
17
|
+
:ip_reasm,
|
18
|
+
:queue_stats,
|
19
|
+
:NOT_USED,
|
20
|
+
:port_blocked])
|
21
|
+
|
22
|
+
open_flow_header version: 4, message_type: 6, message_length: 32
|
23
|
+
datapath_id :datapath_id
|
24
|
+
uint32 :n_buffers
|
25
|
+
uint8 :n_tables
|
26
|
+
uint8 :auxiliary_id
|
27
|
+
uint16 :padding
|
28
|
+
hide :padding
|
29
|
+
capabilities :capabilities
|
30
|
+
uint32 :reserved
|
31
|
+
|
32
|
+
def datapath_id
|
33
|
+
@format.datapath_id.to_i
|
40
34
|
end
|
41
|
-
|
42
|
-
# Features Reply message format.
|
43
|
-
class Format < BinData::Record
|
44
|
-
extend OpenFlow::Format
|
45
|
-
|
46
|
-
header version: 4, message_type: 6
|
47
|
-
body :body
|
48
|
-
|
49
|
-
def datapath_id
|
50
|
-
body.datapath_id.to_i
|
51
|
-
end
|
52
|
-
alias_method :dpid, :datapath_id
|
53
|
-
end
|
54
|
-
|
55
|
-
body_option :dpid
|
56
|
-
body_option :datapath_id
|
57
|
-
body_option :n_buffers
|
58
|
-
body_option :n_tables
|
59
|
-
body_option :capabilities
|
35
|
+
alias_method :dpid, :datapath_id
|
60
36
|
end
|
61
37
|
end
|
62
38
|
end
|
@@ -1,20 +1,13 @@
|
|
1
|
-
require 'pio/open_flow'
|
1
|
+
require 'pio/open_flow/message'
|
2
2
|
|
3
|
-
# Base module.
|
4
3
|
module Pio
|
5
|
-
# OpenFlow 1.3 messages
|
6
4
|
module OpenFlow13
|
7
5
|
# Features Request and Reply message.
|
8
6
|
class Features
|
9
7
|
# Features Request message.
|
10
8
|
class Request < OpenFlow::Message
|
11
|
-
|
12
|
-
|
13
|
-
extend OpenFlow::Format
|
14
|
-
|
15
|
-
header version: 4, message_type: 5
|
16
|
-
string :body, value: ''
|
17
|
-
end
|
9
|
+
open_flow_header version: 4, message_type: 5
|
10
|
+
string :body, value: ''
|
18
11
|
end
|
19
12
|
end
|
20
13
|
end
|
@@ -2,7 +2,6 @@ require 'pio/open_flow'
|
|
2
2
|
require 'pio/open_flow13/buffer_id'
|
3
3
|
require 'pio/open_flow13/match'
|
4
4
|
|
5
|
-
# Base module.
|
6
5
|
module Pio
|
7
6
|
module OpenFlow13
|
8
7
|
# OpenFlow 1.3 FlowMod message parser and generator
|
@@ -103,57 +102,35 @@ module Pio
|
|
103
102
|
end
|
104
103
|
end
|
105
104
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
40 + match.length + instructions.length
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
# OpenFlow 1.3 FlowMod message format
|
140
|
-
class Format < BinData::Record
|
141
|
-
extend OpenFlow::Format
|
142
|
-
|
143
|
-
header version: 4, message_type: 14
|
144
|
-
body :body
|
145
|
-
end
|
146
|
-
|
147
|
-
body_option :actions
|
148
|
-
body_option :buffer_id
|
149
|
-
body_option :command
|
150
|
-
body_option :flags
|
151
|
-
body_option :hard_timeout
|
152
|
-
body_option :idle_timeout
|
153
|
-
body_option :instructions
|
154
|
-
body_option :match
|
155
|
-
body_option :priority
|
156
|
-
body_option :table_id
|
105
|
+
extend OpenFlow::Flags
|
106
|
+
|
107
|
+
flags_16bit :flags,
|
108
|
+
[:send_flow_rem,
|
109
|
+
:check_overwrap,
|
110
|
+
:reset_counts,
|
111
|
+
:no_packet_counts,
|
112
|
+
:no_byte_counts]
|
113
|
+
|
114
|
+
open_flow_header(version: 4,
|
115
|
+
message_type: 14,
|
116
|
+
message_length: lambda do
|
117
|
+
48 + match.length + instructions.length
|
118
|
+
end)
|
119
|
+
uint64 :cookie
|
120
|
+
uint64 :cookie_mask
|
121
|
+
uint8 :table_id
|
122
|
+
command :command
|
123
|
+
uint16 :idle_timeout
|
124
|
+
uint16 :hard_timeout
|
125
|
+
uint16 :priority, initial_value: 0xffff
|
126
|
+
buffer_id :buffer_id
|
127
|
+
out_port :out_port
|
128
|
+
out_group :out_group
|
129
|
+
flags :flags
|
130
|
+
string :padding, length: 2
|
131
|
+
hide :padding
|
132
|
+
oxm :match
|
133
|
+
instructions :instructions
|
157
134
|
end
|
158
135
|
end
|
159
136
|
end
|