pio 0.24.2 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/README.md +2 -0
  4. data/bin/byebug +16 -0
  5. data/features/arp.feature +2 -2
  6. data/features/dhcp.feature +4 -4
  7. data/features/icmp.feature +2 -2
  8. data/features/lldp.feature +1 -1
  9. data/features/open_flow10/barrier_reply.feature +4 -4
  10. data/features/open_flow10/barrier_request.feature +4 -4
  11. data/features/open_flow10/echo_reply.feature +6 -6
  12. data/features/open_flow10/echo_request.feature +6 -6
  13. data/features/open_flow10/exact_match.feature +2 -2
  14. data/features/open_flow10/features_reply.feature +2 -2
  15. data/features/open_flow10/features_request.feature +4 -4
  16. data/features/open_flow10/flow_mod.feature +6 -6
  17. data/features/open_flow10/flow_stats_reply.feature +105 -0
  18. data/features/open_flow10/flow_stats_request.feature +90 -0
  19. data/features/open_flow10/hello.feature +4 -4
  20. data/features/open_flow10/packet_in.feature +2 -2
  21. data/features/open_flow10/packet_out.feature +1 -1
  22. data/features/open_flow10/port_status.feature +1 -1
  23. data/features/open_flow13/apply_actions.feature +3 -3
  24. data/features/open_flow13/echo_reply.feature +7 -7
  25. data/features/open_flow13/echo_request.feature +7 -7
  26. data/features/open_flow13/features_reply.feature +2 -2
  27. data/features/open_flow13/features_request.feature +4 -4
  28. data/features/open_flow13/flow_mod.feature +5 -5
  29. data/features/open_flow13/goto_table.feature +2 -2
  30. data/features/open_flow13/hello.feature +5 -5
  31. data/features/open_flow13/match.feature +81 -81
  32. data/features/open_flow13/meter.feature +2 -2
  33. data/features/open_flow13/packet_in.feature +3 -3
  34. data/features/open_flow13/packet_out.feature +3 -3
  35. data/features/open_flow13/send_out_port.feature +2 -2
  36. data/features/open_flow13/write_metadata.feature +2 -2
  37. data/features/open_flow_read.feature +12 -10
  38. data/features/step_definitions/packet_data_steps.rb +3 -3
  39. data/lib/pio/open_flow.rb +4 -1
  40. data/lib/pio/open_flow/message.rb +3 -0
  41. data/lib/pio/open_flow10.rb +2 -0
  42. data/lib/pio/open_flow10/flow_mod.rb +1 -16
  43. data/lib/pio/open_flow10/flow_stats_reply.rb +59 -0
  44. data/lib/pio/open_flow10/flow_stats_request.rb +64 -0
  45. data/lib/pio/open_flow10/match.rb +17 -0
  46. data/lib/pio/open_flow10/stats_type.rb +27 -0
  47. data/lib/pio/version.rb +1 -1
  48. data/pio.gemspec +2 -2
  49. data/spec/pio/open_flow10/flow_stats_reply_spec.rb +39 -0
  50. data/spec/pio/open_flow10/flow_stats_request_spec.rb +38 -0
  51. metadata +185 -173
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d25e470a4443ef4ba0a44d6221ecf050a07c0dd7
4
- data.tar.gz: 0517d69386f0c41461972a38595568c47008bff8
3
+ metadata.gz: 41786852c14579687e22106e6e20821d9fe84e03
4
+ data.tar.gz: eb8c1aff56d304773f7043648002cb52367fe651
5
5
  SHA512:
6
- metadata.gz: dc580a7a68608c3785887da4412f35a38d526eb7cd9f256bb31511884f22e05a876165f679a8d7f2bf184e07c97dcad8c550564d8964b38c7a35cdf644a5260e
7
- data.tar.gz: 82804fa39e8f8ce0934475c6cca8ea1bd93b9543548e2296e2b841cb9c8dfcd98eb941f3c5cb858a8f7863415efe3c03410571ff952d17e67e9c4faeedf00b32
6
+ metadata.gz: bd60d4cf128ac6cfd18dd02d8ca8a4370e14be9025efcd103fd1c27d8206ed142f58d7171372594377ab6e37f9edda5f4c638709cf81b92b4c6c034c28212ba0
7
+ data.tar.gz: 349b05ac02ec3a0b366a2090724fdc6d307c2c5b2036aa8fff81805a9e592a17c46406d6c6fdfe073c72e14da0eb2db0f670e77d0b8bb20dd7a9a22fabb8ae6f
@@ -3,6 +3,11 @@
3
3
  ## develop (unreleased)
4
4
 
5
5
 
6
+ ## 0.25.0 (8/6/2015)
7
+ ### New features
8
+ * [#211](https://github.com/trema/pio/pull/211): Add new classes `Pio::FlowStats::Request` and `Pio::FlowStats::Reply`.
9
+
10
+
6
11
  ## 0.24.2 (8/4/2015)
7
12
  ### Bugs fixed
8
13
  * [#209](https://github.com/trema/pio/issues/209): `Pio::OpenFlow.read` cannot parse Barrier messages.
data/README.md CHANGED
@@ -31,6 +31,8 @@ supports the following packet formats:
31
31
  - [Exact Match](https://relishapp.com/trema/pio/docs/open-flow10/pio-exactmatch)
32
32
  - [Barrier Request](https://relishapp.com/trema/pio/docs/open-flow10/pio-barrier-request)
33
33
  - [Barrier Reply](https://relishapp.com/trema/pio/docs/open-flow10/pio-barrier-reply)
34
+ - [Flow Stats Request](https://relishapp.com/trema/pio/docs/open-flow10/pio-flowstats-request)
35
+ - [Flow Stats Reply](https://relishapp.com/trema/pio/docs/open-flow10/pio-flowstats-reply)
34
36
  - OpenFlow 1.3
35
37
  - [Hello](https://relishapp.com/trema/pio/docs/open-flow13/pio-hello)
36
38
  - [Echo Request](https://relishapp.com/trema/pio/docs/open-flow13/pio-echo-request)
@@ -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')
@@ -9,7 +9,7 @@ Feature: Pio::Arp
9
9
  )
10
10
  """
11
11
  Then it should finish successfully
12
- And the packet have the following fields and values:
12
+ And the packet has the following fields and values:
13
13
  | field | value |
14
14
  | class | Pio::Arp::Request |
15
15
  | destination_mac | ff:ff:ff:ff:ff:ff |
@@ -36,7 +36,7 @@ Feature: Pio::Arp
36
36
  )
37
37
  """
38
38
  Then it should finish successfully
39
- And the packet have the following fields and values:
39
+ And the packet has the following fields and values:
40
40
  | field | value |
41
41
  | class | Pio::Arp::Reply |
42
42
  | destination_mac | 00:26:82:eb:ea:d1 |
@@ -15,7 +15,7 @@ Feature: Pio::Dhcp
15
15
  )
16
16
  """
17
17
  Then it should finish successfully
18
- And the packet have the following fields and values:
18
+ And the packet has the following fields and values:
19
19
  | field | value |
20
20
  | class | Pio::Dhcp::Ack |
21
21
  | destination_mac | 11:22:33:44:55:66 |
@@ -64,7 +64,7 @@ Feature: Pio::Dhcp
64
64
  )
65
65
  """
66
66
  Then it should finish successfully
67
- And the packet have the following fields and values:
67
+ And the packet has the following fields and values:
68
68
  | field | value |
69
69
  | class | Pio::Dhcp::Discover |
70
70
  | destination_mac | ff:ff:ff:ff:ff:ff |
@@ -112,7 +112,7 @@ Feature: Pio::Dhcp
112
112
  )
113
113
  """
114
114
  Then it should finish successfully
115
- And the packet have the following fields and values:
115
+ And the packet has the following fields and values:
116
116
  | field | value |
117
117
  | class | Pio::Dhcp::Request |
118
118
  | destination_mac | ff:ff:ff:ff:ff:ff |
@@ -166,7 +166,7 @@ Feature: Pio::Dhcp
166
166
  )
167
167
  """
168
168
  Then it should finish successfully
169
- And the packet have the following fields and values:
169
+ And the packet has the following fields and values:
170
170
  | field | value |
171
171
  | class | Pio::Dhcp::Offer |
172
172
  | destination_mac | 11:22:33:44:55:66 |
@@ -10,7 +10,7 @@ Feature: Pio::Icmp
10
10
  )
11
11
  """
12
12
  Then it should finish successfully
13
- And the packet have the following fields and values:
13
+ And the packet has the following fields and values:
14
14
  | field | value |
15
15
  | class | Pio::Icmp::Request |
16
16
  | destination_mac | 00:26:82:eb:ea:d1 |
@@ -49,7 +49,7 @@ Feature: Pio::Icmp
49
49
  )
50
50
  """
51
51
  Then it should finish successfully
52
- And the packet have the following fields and values:
52
+ And the packet has the following fields and values:
53
53
  | field | value |
54
54
  | class | Pio::Icmp::Reply |
55
55
  | destination_mac | 00:16:9d:1d:9c:c4 |
@@ -5,7 +5,7 @@ Feature: Pio::Lldp
5
5
  Pio::Lldp.new(dpid: 0x123, port_number: 12, source_mac: '11:22:33:44:55:66')
6
6
  """
7
7
  Then it should finish successfully
8
- And the message have the following fields and values:
8
+ And the message has the following fields and values:
9
9
  | field | value |
10
10
  | class | Pio::Lldp |
11
11
  | destination_mac | 01:80:c2:00:00:0e |
@@ -6,7 +6,7 @@ Feature: Pio::Barrier::Reply
6
6
  Pio::Barrier::Reply.new
7
7
  """
8
8
  Then it should finish successfully
9
- And the message have the following fields and values:
9
+ And the message has the following fields and values:
10
10
  | field | value |
11
11
  | ofp_version | 1 |
12
12
  | message_type | 19 |
@@ -21,7 +21,7 @@ Feature: Pio::Barrier::Reply
21
21
  Pio::Barrier::Reply.new(transaction_id: 123)
22
22
  """
23
23
  Then it should finish successfully
24
- And the message have the following fields and values:
24
+ And the message has the following fields and values:
25
25
  | field | value |
26
26
  | ofp_version | 1 |
27
27
  | message_type | 19 |
@@ -36,7 +36,7 @@ Feature: Pio::Barrier::Reply
36
36
  Pio::Barrier::Reply.new(xid: 123)
37
37
  """
38
38
  Then it should finish successfully
39
- And the message have the following fields and values:
39
+ And the message has the following fields and values:
40
40
  | field | value |
41
41
  | ofp_version | 1 |
42
42
  | message_type | 19 |
@@ -48,7 +48,7 @@ Feature: Pio::Barrier::Reply
48
48
  Scenario: read
49
49
  When I try to parse a file named "open_flow10/barrier_reply.raw" with "Barrier::Reply" class
50
50
  Then it should finish successfully
51
- And the message have the following fields and values:
51
+ And the message has the following fields and values:
52
52
  | field | value |
53
53
  | ofp_version | 1 |
54
54
  | message_type | 19 |
@@ -6,7 +6,7 @@ Feature: Pio::Barrier::Request
6
6
  Pio::Barrier::Request.new
7
7
  """
8
8
  Then it should finish successfully
9
- And the message have the following fields and values:
9
+ And the message has the following fields and values:
10
10
  | field | value |
11
11
  | ofp_version | 1 |
12
12
  | message_type | 18 |
@@ -21,7 +21,7 @@ Feature: Pio::Barrier::Request
21
21
  Pio::Barrier::Request.new(transaction_id: 123)
22
22
  """
23
23
  Then it should finish successfully
24
- And the message have the following fields and values:
24
+ And the message has the following fields and values:
25
25
  | field | value |
26
26
  | ofp_version | 1 |
27
27
  | message_type | 18 |
@@ -36,7 +36,7 @@ Feature: Pio::Barrier::Request
36
36
  Pio::Barrier::Request.new(xid: 123)
37
37
  """
38
38
  Then it should finish successfully
39
- And the message have the following fields and values:
39
+ And the message has the following fields and values:
40
40
  | field | value |
41
41
  | ofp_version | 1 |
42
42
  | message_type | 18 |
@@ -48,7 +48,7 @@ Feature: Pio::Barrier::Request
48
48
  Scenario: read
49
49
  When I try to parse a file named "open_flow10/barrier_request.raw" with "Barrier::Request" class
50
50
  Then it should finish successfully
51
- And the message have the following fields and values:
51
+ And the message has the following fields and values:
52
52
  | field | value |
53
53
  | ofp_version | 1 |
54
54
  | message_type | 18 |
@@ -6,7 +6,7 @@ Feature: Pio::Echo::Reply
6
6
  Pio::Echo::Reply.new
7
7
  """
8
8
  Then it should finish successfully
9
- And the message have the following fields and values:
9
+ And the message has the following fields and values:
10
10
  | field | value |
11
11
  | ofp_version | 1 |
12
12
  | message_type | 3 |
@@ -22,7 +22,7 @@ Feature: Pio::Echo::Reply
22
22
  Pio::Echo::Reply.new(transaction_id: 123)
23
23
  """
24
24
  Then it should finish successfully
25
- And the message have the following fields and values:
25
+ And the message has the following fields and values:
26
26
  | field | value |
27
27
  | ofp_version | 1 |
28
28
  | message_type | 3 |
@@ -38,7 +38,7 @@ Feature: Pio::Echo::Reply
38
38
  Pio::Echo::Reply.new(xid: 123)
39
39
  """
40
40
  Then it should finish successfully
41
- And the message have the following fields and values:
41
+ And the message has the following fields and values:
42
42
  | field | value |
43
43
  | ofp_version | 1 |
44
44
  | message_type | 3 |
@@ -61,7 +61,7 @@ Feature: Pio::Echo::Reply
61
61
  Pio::Echo::Reply.new(body: 'echo reply body')
62
62
  """
63
63
  Then it should finish successfully
64
- And the message have the following fields and values:
64
+ And the message has the following fields and values:
65
65
  | field | value |
66
66
  | ofp_version | 1 |
67
67
  | message_type | 3 |
@@ -77,7 +77,7 @@ Feature: Pio::Echo::Reply
77
77
  Pio::Echo::Reply.new(user_data: 'echo reply body')
78
78
  """
79
79
  Then it should finish successfully
80
- And the message have the following fields and values:
80
+ And the message has the following fields and values:
81
81
  | field | value |
82
82
  | ofp_version | 1 |
83
83
  | message_type | 3 |
@@ -90,7 +90,7 @@ Feature: Pio::Echo::Reply
90
90
  Scenario: read (no message body)
91
91
  When I try to parse a file named "open_flow10/echo_reply.raw" with "Pio::Echo::Reply" class
92
92
  Then it should finish successfully
93
- And the message have the following fields and values:
93
+ And the message has the following fields and values:
94
94
  | field | value |
95
95
  | ofp_version | 1 |
96
96
  | message_type | 3 |
@@ -6,7 +6,7 @@ Feature: Pio::Echo::Request
6
6
  Pio::Echo::Request.new
7
7
  """
8
8
  Then it should finish successfully
9
- And the message have the following fields and values:
9
+ And the message has the following fields and values:
10
10
  | field | value |
11
11
  | ofp_version | 1 |
12
12
  | message_type | 2 |
@@ -22,7 +22,7 @@ Feature: Pio::Echo::Request
22
22
  Pio::Echo::Request.new(transaction_id: 123)
23
23
  """
24
24
  Then it should finish successfully
25
- And the message have the following fields and values:
25
+ And the message has the following fields and values:
26
26
  | field | value |
27
27
  | ofp_version | 1 |
28
28
  | message_type | 2 |
@@ -38,7 +38,7 @@ Feature: Pio::Echo::Request
38
38
  Pio::Echo::Request.new(xid: 123)
39
39
  """
40
40
  Then it should finish successfully
41
- And the message have the following fields and values:
41
+ And the message has the following fields and values:
42
42
  | field | value |
43
43
  | ofp_version | 1 |
44
44
  | message_type | 2 |
@@ -54,7 +54,7 @@ Feature: Pio::Echo::Request
54
54
  Pio::Echo::Request.new(body: 'echo request body')
55
55
  """
56
56
  Then it should finish successfully
57
- And the message have the following fields and values:
57
+ And the message has the following fields and values:
58
58
  | field | value |
59
59
  | ofp_version | 1 |
60
60
  | message_type | 2 |
@@ -70,7 +70,7 @@ Feature: Pio::Echo::Request
70
70
  Pio::Echo::Request.new(user_data: 'echo request body')
71
71
  """
72
72
  Then it should finish successfully
73
- And the message have the following fields and values:
73
+ And the message has the following fields and values:
74
74
  | field | value |
75
75
  | ofp_version | 1 |
76
76
  | message_type | 2 |
@@ -83,7 +83,7 @@ Feature: Pio::Echo::Request
83
83
  Scenario: read (no message body)
84
84
  When I try to parse a file named "open_flow10/echo_request.raw" with "Pio::Echo::Request" class
85
85
  Then it should finish successfully
86
- And the message have the following fields and values:
86
+ And the message has the following fields and values:
87
87
  | field | value |
88
88
  | ofp_version | 1 |
89
89
  | message_type | 2 |
@@ -1,7 +1,7 @@
1
1
  Feature: Pio::ExactMatch
2
2
  Scenario: new (from ARP request Packet In)
3
3
  When I create an exact match from "open_flow10/packet_in_arp_request.raw"
4
- And the message have the following fields and values:
4
+ And the message has the following fields and values:
5
5
  | field | value |
6
6
  | wildcards | {} |
7
7
  | in_port | 1 |
@@ -19,7 +19,7 @@ Feature: Pio::ExactMatch
19
19
 
20
20
  Scenario: new (from Cbench Packet In)
21
21
  When I create an exact match from "open_flow10/packet_in_cbench.raw"
22
- And the message have the following fields and values:
22
+ And the message has the following fields and values:
23
23
  | field | value |
24
24
  | wildcards | {} |
25
25
  | in_port | 1 |
@@ -21,7 +21,7 @@ Feature: Pio::Features::Reply
21
21
  )
22
22
  """
23
23
  Then it should finish successfully
24
- And the message have the following fields and values:
24
+ And the message has the following fields and values:
25
25
  | field | value |
26
26
  | ofp_version | 1 |
27
27
  | message_type | 6 |
@@ -50,7 +50,7 @@ Feature: Pio::Features::Reply
50
50
  Scenario: read
51
51
  When I try to parse a file named "open_flow10/features_reply.raw" with "Features::Reply" class
52
52
  Then it should finish successfully
53
- And the message have the following fields and values:
53
+ And the message has the following fields and values:
54
54
  | field | value |
55
55
  | ofp_version | 1 |
56
56
  | message_type | 6 |
@@ -6,7 +6,7 @@ Feature: Pio::Features::Request
6
6
  Pio::Features::Request.new
7
7
  """
8
8
  Then it should finish successfully
9
- And the message have the following fields and values:
9
+ And the message has the following fields and values:
10
10
  | field | value |
11
11
  | ofp_version | 1 |
12
12
  | message_type | 5 |
@@ -21,7 +21,7 @@ Feature: Pio::Features::Request
21
21
  Pio::Features::Request.new(transaction_id: 123)
22
22
  """
23
23
  Then it should finish successfully
24
- And the message have the following fields and values:
24
+ And the message has the following fields and values:
25
25
  | field | value |
26
26
  | ofp_version | 1 |
27
27
  | message_type | 5 |
@@ -36,7 +36,7 @@ Feature: Pio::Features::Request
36
36
  Pio::Features::Request.new(xid: 123)
37
37
  """
38
38
  Then it should finish successfully
39
- And the message have the following fields and values:
39
+ And the message has the following fields and values:
40
40
  | field | value |
41
41
  | ofp_version | 1 |
42
42
  | message_type | 5 |
@@ -48,7 +48,7 @@ Feature: Pio::Features::Request
48
48
  Scenario: read
49
49
  When I try to parse a file named "open_flow10/features_request.raw" with "Pio::Features::Request" class
50
50
  Then it should finish successfully
51
- And the message have the following fields and values:
51
+ And the message has the following fields and values:
52
52
  | field | value |
53
53
  | ofp_version | 1 |
54
54
  | message_type | 5 |
@@ -16,7 +16,7 @@ Feature: Pio::FlowMod
16
16
  )
17
17
  """
18
18
  Then it should finish successfully
19
- And the message have the following fields and values:
19
+ And the message has the following fields and values:
20
20
  | field | value |
21
21
  | ofp_version | 1 |
22
22
  | message_type | 14 |
@@ -45,7 +45,7 @@ Feature: Pio::FlowMod
45
45
  Scenario: read (Flow Mod Add)
46
46
  When I try to parse a file named "open_flow10/flow_mod_add.raw" with "Pio::FlowMod" class
47
47
  Then it should finish successfully
48
- And the message have the following fields and values:
48
+ And the message has the following fields and values:
49
49
  | field | value |
50
50
  | ofp_version | 1 |
51
51
  | message_type | 14 |
@@ -82,7 +82,7 @@ Feature: Pio::FlowMod
82
82
  Scenario: read (Flow Mod Modify)
83
83
  When I try to parse a file named "open_flow10/flow_mod_modify.raw" with "Pio::FlowMod" class
84
84
  Then it should finish successfully
85
- And the message have the following fields and values:
85
+ And the message has the following fields and values:
86
86
  | field | value |
87
87
  | ofp_version | 1 |
88
88
  | message_type | 14 |
@@ -119,7 +119,7 @@ Feature: Pio::FlowMod
119
119
  Scenario: read (Flow Mod Modify Strict)
120
120
  When I try to parse a file named "open_flow10/flow_mod_modify_strict.raw" with "Pio::FlowMod" class
121
121
  Then it should finish successfully
122
- And the message have the following fields and values:
122
+ And the message has the following fields and values:
123
123
  | field | value |
124
124
  | ofp_version | 1 |
125
125
  | message_type | 14 |
@@ -156,7 +156,7 @@ Feature: Pio::FlowMod
156
156
  Scenario: read (Flow Mod Delete)
157
157
  When I try to parse a file named "open_flow10/flow_mod_delete.raw" with "Pio::FlowMod" class
158
158
  Then it should finish successfully
159
- And the message have the following fields and values:
159
+ And the message has the following fields and values:
160
160
  | field | value |
161
161
  | ofp_version | 1 |
162
162
  | message_type | 14 |
@@ -191,7 +191,7 @@ Feature: Pio::FlowMod
191
191
  Scenario: read (Flow Mod Delete Strict)
192
192
  When I try to parse a file named "open_flow10/flow_mod_delete_strict.raw" with "Pio::FlowMod" class
193
193
  Then it should finish successfully
194
- And the message have the following fields and values:
194
+ And the message has the following fields and values:
195
195
  | field | value |
196
196
  | ofp_version | 1 |
197
197
  | message_type | 14 |
@@ -0,0 +1,105 @@
1
+ @open_flow10
2
+ Feature: Pio::FlowStats::Reply
3
+ Scenario: new
4
+ When I try to create an OpenFlow message with:
5
+ """
6
+ Pio::FlowStats::Reply.new
7
+ """
8
+ Then it should finish successfully
9
+ And the message has the following fields and values:
10
+ | field | value |
11
+ | ofp_version | 1 |
12
+ | message_type | 17 |
13
+ | message_length | 12 |
14
+ | transaction_id | 0 |
15
+ | xid | 0 |
16
+ | stats_type | :flow |
17
+ | stats.size | 0 |
18
+
19
+ @wip
20
+ Scenario: new(more options)
21
+ When I try to create an OpenFlow message with:
22
+ """
23
+ Pio::FlowStats::Reply.new(more options)
24
+ """
25
+ Then it should finish successfully
26
+
27
+ Scenario: read
28
+ When I try to parse a file named "open_flow10/flow_stats_reply.raw" with "FlowStats::Reply" class
29
+ Then it should finish successfully
30
+ And the message has the following fields and values:
31
+ | field | value |
32
+ | ofp_version | 1 |
33
+ | message_type | 17 |
34
+ | message_length | 228 |
35
+ | transaction_id | 6 |
36
+ | xid | 6 |
37
+ | stats_type | :flow |
38
+ | stats.size | 2 |
39
+ | stats[0].entry_length | 104 |
40
+ | stats[0].table_id | 3 |
41
+ | stats[0].match.wildcards.keys.size | 14 |
42
+ | stats[0].match.wildcards.fetch(:ether_destination_address) | true |
43
+ | stats[0].match.wildcards.fetch(:ether_source_address) | true |
44
+ | stats[0].match.wildcards.fetch(:ether_type) | true |
45
+ | stats[0].match.wildcards.fetch(:in_port) | true |
46
+ | stats[0].match.wildcards.fetch(:ip_destination_address) | 31 |
47
+ | stats[0].match.wildcards.fetch(:ip_destination_address_all) | true |
48
+ | stats[0].match.wildcards.fetch(:ip_protocol) | true |
49
+ | stats[0].match.wildcards.fetch(:ip_source_address) | 31 |
50
+ | stats[0].match.wildcards.fetch(:ip_source_address_all) | true |
51
+ | stats[0].match.wildcards.fetch(:ip_tos) | true |
52
+ | stats[0].match.wildcards.fetch(:transport_destination_port) | true |
53
+ | stats[0].match.wildcards.fetch(:transport_source_port) | true |
54
+ | stats[0].match.wildcards.fetch(:vlan_priority) | true |
55
+ | stats[0].match.wildcards.fetch(:vlan_vid) | true |
56
+ | stats[0].duration_sec | 1 |
57
+ | stats[0].duration_nsec | 2 |
58
+ | stats[0].priority | 100 |
59
+ | stats[0].idle_timeout | 5 |
60
+ | stats[0].hard_timeout | 10 |
61
+ | stats[0].cookie.to_hex | 0x123456789abcdef |
62
+ | stats[0].packet_count | 10 |
63
+ | stats[0].byte_count | 1000 |
64
+ | stats[0].actions.length | 2 |
65
+ | stats[0].actions[0].class | Pio::OpenFlow10::SendOutPort |
66
+ | stats[0].actions[0].port_number | 1 |
67
+ | stats[0].actions[0].max_len | 0 |
68
+ | stats[0].actions[1].class | Pio::OpenFlow10::SendOutPort |
69
+ | stats[0].actions[1].port_number | 2 |
70
+ | stats[0].actions[1].max_len | 0 |
71
+ | stats[1].entry_length | 112 |
72
+ | stats[1].table_id | 4 |
73
+ | stats[1].match.wildcards.keys.size | 14 |
74
+ | stats[1].match.wildcards.fetch(:ether_destination_address) | true |
75
+ | stats[1].match.wildcards.fetch(:ether_source_address) | true |
76
+ | stats[1].match.wildcards.fetch(:ether_type) | true |
77
+ | stats[1].match.wildcards.fetch(:in_port) | true |
78
+ | stats[1].match.wildcards.fetch(:ip_destination_address) | 31 |
79
+ | stats[1].match.wildcards.fetch(:ip_destination_address_all) | true |
80
+ | stats[1].match.wildcards.fetch(:ip_protocol) | true |
81
+ | stats[1].match.wildcards.fetch(:ip_source_address) | 31 |
82
+ | stats[1].match.wildcards.fetch(:ip_source_address_all) | true |
83
+ | stats[1].match.wildcards.fetch(:ip_tos) | true |
84
+ | stats[1].match.wildcards.fetch(:transport_destination_port) | true |
85
+ | stats[1].match.wildcards.fetch(:transport_source_port) | true |
86
+ | stats[1].match.wildcards.fetch(:vlan_priority) | true |
87
+ | stats[1].match.wildcards.fetch(:vlan_vid) | true |
88
+ | stats[1].duration_sec | 1 |
89
+ | stats[1].duration_nsec | 2 |
90
+ | stats[1].priority | 100 |
91
+ | stats[1].idle_timeout | 5 |
92
+ | stats[1].hard_timeout | 10 |
93
+ | stats[1].cookie.to_hex | 0x123456789abcdef |
94
+ | stats[1].packet_count | 10 |
95
+ | stats[1].byte_count | 1000 |
96
+ | stats[1].actions.length | 3 |
97
+ | stats[1].actions[0].class | Pio::OpenFlow10::SendOutPort |
98
+ | stats[1].actions[0].port_number | 1 |
99
+ | stats[1].actions[0].max_len | 0 |
100
+ | stats[1].actions[1].class | Pio::OpenFlow10::SendOutPort |
101
+ | stats[1].actions[1].port_number | 2 |
102
+ | stats[1].actions[1].max_len | 0 |
103
+ | stats[1].actions[2].class | Pio::OpenFlow10::SendOutPort |
104
+ | stats[1].actions[2].port_number | 3 |
105
+ | stats[1].actions[2].max_len | 0 |