pio 0.18.2 → 0.19.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 (116) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -0
  3. data/README.md +40 -344
  4. data/Rakefile +32 -0
  5. data/bin/_guard-core +16 -0
  6. data/bin/byebug +16 -0
  7. data/bin/cc-tddium-post-worker +16 -0
  8. data/bin/cdiff +16 -0
  9. data/bin/coderay +16 -0
  10. data/bin/colortab +16 -0
  11. data/bin/coveralls +16 -0
  12. data/bin/cucumber +16 -0
  13. data/bin/decolor +16 -0
  14. data/bin/flay +16 -0
  15. data/bin/flog +16 -0
  16. data/bin/guard +16 -0
  17. data/bin/htmldiff +16 -0
  18. data/bin/inch +16 -0
  19. data/bin/ldiff +16 -0
  20. data/bin/listen +16 -0
  21. data/bin/minitar +16 -0
  22. data/bin/pry +16 -0
  23. data/bin/rake +16 -0
  24. data/bin/reek +16 -0
  25. data/bin/relish +16 -0
  26. data/bin/restclient +16 -0
  27. data/bin/rspec +16 -0
  28. data/bin/rubocop +16 -0
  29. data/bin/ruby-parse +16 -0
  30. data/bin/ruby-rewrite +16 -0
  31. data/bin/ruby_parse +16 -0
  32. data/bin/ruby_parse_extract_error +16 -0
  33. data/bin/sparkr +16 -0
  34. data/bin/term_display +16 -0
  35. data/bin/term_mandel +16 -0
  36. data/bin/thor +16 -0
  37. data/bin/unparser +16 -0
  38. data/bin/yard +16 -0
  39. data/bin/yardoc +16 -0
  40. data/bin/yri +16 -0
  41. data/features/arp.feature +61 -0
  42. data/features/dhcp.feature +4 -0
  43. data/features/icmp.feature +130 -0
  44. data/features/lldp.feature +47 -0
  45. data/features/open_flow10/echo_reply.feature +95 -0
  46. data/features/open_flow10/echo_request.feature +95 -0
  47. data/features/open_flow10/exact_match.feature +36 -0
  48. data/features/{features_read.feature → open_flow10/features_reply.feature} +54 -17
  49. data/features/open_flow10/features_request.feature +79 -0
  50. data/features/{flow_mod_read.feature → open_flow10/flow_mod.feature} +16 -21
  51. data/features/open_flow10/hello.feature +79 -0
  52. data/features/open_flow10/packet_in.feature +58 -0
  53. data/features/{packet_out_read.feature → open_flow10/packet_out.feature} +4 -5
  54. data/features/open_flow10/port_status.feature +23 -0
  55. data/features/open_flow13/echo_reply.feature +115 -0
  56. data/features/open_flow13/echo_request.feature +115 -0
  57. data/features/open_flow13/hello.feature +74 -0
  58. data/features/packet_data/echo13_reply_body.raw +0 -0
  59. data/features/packet_data/echo13_reply_no_body.raw +0 -0
  60. data/features/packet_data/echo13_request_body.raw +0 -0
  61. data/features/packet_data/echo13_request_no_body.raw +0 -0
  62. data/features/packet_data/hello13_no_version_bitmap.raw +0 -0
  63. data/features/packet_data/hello13_version_bitmap.raw +0 -0
  64. data/features/packet_data/udp_no_payload.raw +0 -0
  65. data/features/packet_data/udp_with_payload.raw +0 -0
  66. data/features/step_definitions/packet_data_steps.rb +49 -29
  67. data/features/support/env.rb +3 -0
  68. data/features/{udp_read.feature → udp.feature} +3 -4
  69. data/lib/pio.rb +1 -0
  70. data/lib/pio/echo.rb +67 -0
  71. data/lib/pio/hello13.rb +111 -0
  72. data/lib/pio/open_flow/message.rb +2 -1
  73. data/lib/pio/open_flow/open_flow_header.rb +21 -38
  74. data/lib/pio/open_flow/transaction_id.rb +25 -0
  75. data/lib/pio/version.rb +1 -1
  76. data/pio.gemspec +9 -14
  77. data/spec/pio/flow_mod_spec.rb +1 -1
  78. data/spec/pio/hello13_spec.rb +114 -0
  79. metadata +182 -138
  80. data/examples/arp_new.rb +0 -16
  81. data/examples/arp_read.rb +0 -4
  82. data/examples/dhcp_new.rb +0 -34
  83. data/examples/dhcp_read.rb +0 -4
  84. data/examples/echo_new.rb +0 -9
  85. data/examples/echo_read.rb +0 -4
  86. data/examples/features_new.rb +0 -28
  87. data/examples/features_read.rb +0 -4
  88. data/examples/flow_mod_new.rb +0 -13
  89. data/examples/flow_mod_read.rb +0 -6
  90. data/examples/hello_new.rb +0 -4
  91. data/examples/hello_read.rb +0 -4
  92. data/examples/icmp_new.rb +0 -21
  93. data/examples/icmp_read.rb +0 -4
  94. data/examples/lldp_new.rb +0 -4
  95. data/examples/lldp_read.rb +0 -4
  96. data/examples/packet_in_new.rb +0 -17
  97. data/examples/packet_in_read.rb +0 -5
  98. data/examples/packet_out_new.rb +0 -18
  99. data/examples/packet_out_read.rb +0 -6
  100. data/features/arp_read.feature +0 -10
  101. data/features/dhcp_read.feature +0 -6
  102. data/features/echo_read.feature +0 -29
  103. data/features/exact_match.feature +0 -38
  104. data/features/hello_read.feature +0 -14
  105. data/features/icmp_read.feature +0 -55
  106. data/features/lldp_read.feature +0 -26
  107. data/features/packet_in_read.feature +0 -22
  108. data/features/port_status_read.feature +0 -24
  109. data/features/step_definitions/pending_steps.rb +0 -3
  110. data/spec/pio/echo/reply_spec.rb +0 -135
  111. data/spec/pio/echo/request_spec.rb +0 -137
  112. data/spec/pio/features/reply_spec.rb +0 -137
  113. data/spec/pio/features/request_spec.rb +0 -112
  114. data/spec/pio/hello_spec.rb +0 -106
  115. data/spec/pio/lldp_spec.rb +0 -244
  116. data/spec/pio/packet_in_spec.rb +0 -146
@@ -0,0 +1,79 @@
1
+ Feature: Hello
2
+ Scenario: create
3
+ When I try to create an OpenFlow message with:
4
+ """
5
+ Pio::Hello.new
6
+ """
7
+ Then it should finish successfully
8
+ And the message have the following fields and values:
9
+ | field | value |
10
+ | class | Pio::Hello |
11
+ | ofp_version | 1 |
12
+ | message_type | 0 |
13
+ | message_length | 8 |
14
+ | transaction_id | 0 |
15
+ | xid | 0 |
16
+ | body | |
17
+
18
+ Scenario: create (transaction_id: 123)
19
+ When I try to create an OpenFlow message with:
20
+ """
21
+ Pio::Hello.new(transaction_id: 123)
22
+ """
23
+ Then it should finish successfully
24
+ And the message have the following fields and values:
25
+ | field | value |
26
+ | class | Pio::Hello |
27
+ | ofp_version | 1 |
28
+ | message_type | 0 |
29
+ | message_length | 8 |
30
+ | transaction_id | 123 |
31
+ | xid | 123 |
32
+ | body | |
33
+
34
+ Scenario: create (xid: 123)
35
+ When I try to create an OpenFlow message with:
36
+ """
37
+ Pio::Hello.new(xid: 123)
38
+ """
39
+ Then it should finish successfully
40
+ And the message have the following fields and values:
41
+ | field | value |
42
+ | class | Pio::Hello |
43
+ | ofp_version | 1 |
44
+ | message_type | 0 |
45
+ | message_length | 8 |
46
+ | transaction_id | 123 |
47
+ | xid | 123 |
48
+ | body | |
49
+
50
+ Scenario: create (xid: -1) and error
51
+ When I try to create an OpenFlow message with:
52
+ """
53
+ Pio::Hello.new(xid: -1)
54
+ """
55
+ Then it should fail with "ArgumentError", "Transaction ID should be an unsigned 32-bit integer."
56
+
57
+ Scenario: create (xid: 2**32) and error
58
+ When I try to create an OpenFlow message with:
59
+ """
60
+ Pio::Hello.new(xid: 2**32)
61
+ """
62
+ Then it should fail with "ArgumentError", "Transaction ID should be an unsigned 32-bit integer."
63
+
64
+ Scenario: parse
65
+ When I try to parse a file named "hello.raw" with "Hello" class
66
+ Then it should finish successfully
67
+ And the message have the following fields and values:
68
+ | field | value |
69
+ | class | Pio::Hello |
70
+ | ofp_version | 1 |
71
+ | message_type | 0 |
72
+ | message_length | 8 |
73
+ | transaction_id | 23 |
74
+ | xid | 23 |
75
+ | body | |
76
+
77
+ Scenario: parse error
78
+ When I try to parse a file named "features_request.raw" with "Pio::Hello" class
79
+ Then it should fail with "Pio::ParseError", "Invalid Hello message."
@@ -0,0 +1,58 @@
1
+ Feature: Packet In
2
+ Scenario: create
3
+ When I try to create an OpenFlow message with:
4
+ """
5
+ data_dump = [
6
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0x5d, 0x10, 0x31, 0x37,
7
+ 0x79, 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01,
8
+ 0xac, 0x5d, 0x10, 0x31, 0x37, 0x79, 0xc0, 0xa8, 0x02, 0xfe, 0xff,
9
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xa8, 0x02, 0x05, 0x00, 0x00,
10
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
11
+ 0x00, 0x00, 0x00, 0x00, 0x00
12
+ ].pack('C*')
13
+
14
+ Pio::PacketIn.new(transaction_id: 0,
15
+ buffer_id: 0xffffff00,
16
+ in_port: 1,
17
+ reason: :no_match,
18
+ raw_data: data_dump)
19
+ """
20
+ Then it should finish successfully
21
+ And the message have the following fields and values:
22
+ | field | value |
23
+ | class | Pio::PacketIn |
24
+ | ofp_version | 1 |
25
+ | message_type | 10 |
26
+ | message_length | 78 |
27
+ | transaction_id | 0 |
28
+ | xid | 0 |
29
+ | buffer_id | 4294967040 |
30
+ | total_len | 60 |
31
+ | in_port | 1 |
32
+ | reason | no_match |
33
+ | raw_data.length | 60 |
34
+ | source_mac | ac:5d:10:31:37:79 |
35
+ | source_mac.class | Pio::Mac |
36
+ | destination_mac | ff:ff:ff:ff:ff:ff |
37
+ | destination_mac.class | Pio::Mac |
38
+
39
+ Scenario: parse
40
+ When I try to parse a file named "packet_in_arp_request.raw" with "PacketIn" class
41
+ Then it should finish successfully
42
+ And the message have the following fields and values:
43
+ | field | value |
44
+ | class | Pio::PacketIn |
45
+ | ofp_version | 1 |
46
+ | message_type | 10 |
47
+ | message_length | 78 |
48
+ | transaction_id | 0 |
49
+ | xid | 0 |
50
+ | buffer_id | 4294967040 |
51
+ | total_len | 60 |
52
+ | in_port | 1 |
53
+ | reason | no_match |
54
+ | raw_data.length | 60 |
55
+ | source_mac | ac:5d:10:31:37:79 |
56
+ | source_mac.class | Pio::Mac |
57
+ | destination_mac | ff:ff:ff:ff:ff:ff |
58
+ | destination_mac.class | Pio::Mac |
@@ -1,9 +1,8 @@
1
- Feature: Pio::PacketOut.read
2
- Scenario: packet_out.raw
3
- Given a packet data file "packet_out.raw"
4
- When I try to parse the file with "PacketOut" class
1
+ Feature: Packet Out
2
+ Scenario: parse
3
+ When I try to parse a file named "packet_out.raw" with "PacketOut" class
5
4
  Then it should finish successfully
6
- And the parsed data have the following field and value:
5
+ And the message have the following fields and values:
7
6
  | field | value |
8
7
  | class | Pio::PacketOut |
9
8
  | ofp_version | 1 |
@@ -0,0 +1,23 @@
1
+ Feature: Port Status
2
+ Scenario: parse
3
+ When I try to parse a file named "port_status.raw" with "PortStatus" class
4
+ Then it should finish successfully
5
+ And the message have the following fields and values:
6
+ | field | value |
7
+ | class | Pio::PortStatus |
8
+ | ofp_version | 1 |
9
+ | message_type | 12 |
10
+ | message_length | 64 |
11
+ | transaction_id | 4 |
12
+ | xid | 4 |
13
+ | reason | delete |
14
+ | desc.port_no | 65533 |
15
+ | desc.hardware_address | 01:02:03:04:05:06 |
16
+ | desc.name | foo |
17
+ | desc.config | [:no_flood] |
18
+ | desc.state | [:stp_forward, :stp_block] |
19
+ | desc.curr | [:port_10mb_hd] |
20
+ | desc.advertised | [:port_1gb_fd] |
21
+ | desc.supported | [:port_autoneg] |
22
+ | desc.peer | [:port_pause_asym] |
23
+
@@ -0,0 +1,115 @@
1
+ Feature: Echo Reply
2
+ Scenario: create
3
+ When I try to create an OpenFlow message with:
4
+ """
5
+ Pio::Echo13::Reply.new
6
+ """
7
+ Then it should finish successfully
8
+ And the message have the following fields and values:
9
+ | field | value |
10
+ | class | Pio::Echo13::Reply |
11
+ | ofp_version | 4 |
12
+ | message_type | 3 |
13
+ | message_length | 8 |
14
+ | transaction_id | 0 |
15
+ | xid | 0 |
16
+ | body | |
17
+
18
+ Scenario: create (transaction_id: 123)
19
+ When I try to create an OpenFlow message with:
20
+ """
21
+ Pio::Echo13::Reply.new(transaction_id: 123)
22
+ """
23
+ Then it should finish successfully
24
+ And the message have the following fields and values:
25
+ | field | value |
26
+ | class | Pio::Echo13::Reply |
27
+ | ofp_version | 4 |
28
+ | message_type | 3 |
29
+ | message_length | 8 |
30
+ | transaction_id | 123 |
31
+ | xid | 123 |
32
+ | body | |
33
+
34
+ Scenario: create (xid: 123)
35
+ When I try to create an OpenFlow message with:
36
+ """
37
+ Pio::Echo13::Reply.new(xid: 123)
38
+ """
39
+ Then it should finish successfully
40
+ And the message have the following fields and values:
41
+ | field | value |
42
+ | class | Pio::Echo13::Reply |
43
+ | ofp_version | 4 |
44
+ | message_type | 3 |
45
+ | message_length | 8 |
46
+ | transaction_id | 123 |
47
+ | xid | 123 |
48
+ | body | |
49
+
50
+ Scenario: create (xid: -1) and error
51
+ When I try to create an OpenFlow message with:
52
+ """
53
+ Pio::Echo13::Reply.new(xid: -1)
54
+ """
55
+ Then it should fail with "ArgumentError", "Transaction ID should be an unsigned 32-bit integer."
56
+
57
+ Scenario: create (xid: 2**32) and error
58
+ When I try to create an OpenFlow message with:
59
+ """
60
+ Pio::Echo13::Reply.new(xid: 2**32)
61
+ """
62
+ Then it should fail with "ArgumentError", "Transaction ID should be an unsigned 32-bit integer."
63
+
64
+ Scenario: create (body: 'echo reply body')
65
+ When I try to create an OpenFlow message with:
66
+ """
67
+ Pio::Echo13::Reply.new(body: 'echo reply body')
68
+ """
69
+ Then it should finish successfully
70
+ And the message have the following fields and values:
71
+ | field | value |
72
+ | class | Pio::Echo13::Reply |
73
+ | ofp_version | 4 |
74
+ | message_type | 3 |
75
+ | message_length | 23 |
76
+ | transaction_id | 0 |
77
+ | xid | 0 |
78
+ | body | echo reply body |
79
+
80
+ Scenario: create (unknown_attr: 'foo') and error
81
+ When I try to create an OpenFlow message with:
82
+ """
83
+ Pio::Echo13::Reply.new(unknown_attr: 'foo')
84
+ """
85
+ Then it should fail with "RuntimeError", "Unknown keyword: unknown_attr"
86
+
87
+ Scenario: parse (no message body)
88
+ When I try to parse a file named "echo13_reply_no_body.raw" with "Pio::Echo13::Reply" class
89
+ Then it should finish successfully
90
+ And the message have the following fields and values:
91
+ | field | value |
92
+ | class | Pio::Echo13::Reply |
93
+ | ofp_version | 4 |
94
+ | message_type | 3 |
95
+ | message_length | 8 |
96
+ | transaction_id | 0 |
97
+ | xid | 0 |
98
+ | body | |
99
+
100
+ Scenario: parse
101
+ When I try to parse a file named "echo13_reply_body.raw" with "Pio::Echo13::Reply" class
102
+ Then it should finish successfully
103
+ And the message have the following fields and values:
104
+ | field | value |
105
+ | class | Pio::Echo13::Reply |
106
+ | ofp_version | 4 |
107
+ | message_type | 3 |
108
+ | message_length | 28 |
109
+ | transaction_id | 0 |
110
+ | xid | 0 |
111
+ | body | hogehogehogehogehoge |
112
+
113
+ Scenario: parse error
114
+ When I try to parse a file named "features_request.raw" with "Pio::Echo13::Reply" class
115
+ Then it should fail with "Pio::ParseError", "Invalid Echo Reply 1.3 message."
@@ -0,0 +1,115 @@
1
+ Feature: Echo Request
2
+ Scenario: create
3
+ When I try to create an OpenFlow message with:
4
+ """
5
+ Pio::Echo13::Request.new
6
+ """
7
+ Then it should finish successfully
8
+ And the message have the following fields and values:
9
+ | field | value |
10
+ | class | Pio::Echo13::Request |
11
+ | ofp_version | 4 |
12
+ | message_type | 2 |
13
+ | message_length | 8 |
14
+ | transaction_id | 0 |
15
+ | xid | 0 |
16
+ | body | |
17
+
18
+ Scenario: create (transaction_id: 123)
19
+ When I try to create an OpenFlow message with:
20
+ """
21
+ Pio::Echo13::Request.new(transaction_id: 123)
22
+ """
23
+ Then it should finish successfully
24
+ And the message have the following fields and values:
25
+ | field | value |
26
+ | class | Pio::Echo13::Request |
27
+ | ofp_version | 4 |
28
+ | message_type | 2 |
29
+ | message_length | 8 |
30
+ | transaction_id | 123 |
31
+ | xid | 123 |
32
+ | body | |
33
+
34
+ Scenario: create (xid: 123)
35
+ When I try to create an OpenFlow message with:
36
+ """
37
+ Pio::Echo13::Request.new(xid: 123)
38
+ """
39
+ Then it should finish successfully
40
+ And the message have the following fields and values:
41
+ | field | value |
42
+ | class | Pio::Echo13::Request |
43
+ | ofp_version | 4 |
44
+ | message_type | 2 |
45
+ | message_length | 8 |
46
+ | transaction_id | 123 |
47
+ | xid | 123 |
48
+ | body | |
49
+
50
+ Scenario: create (xid: -1) and error
51
+ When I try to create an OpenFlow message with:
52
+ """
53
+ Pio::Echo13::Request.new(xid: -1)
54
+ """
55
+ Then it should fail with "ArgumentError", "Transaction ID should be an unsigned 32-bit integer."
56
+
57
+ Scenario: create (xid: 2**32) and error
58
+ When I try to create an OpenFlow message with:
59
+ """
60
+ Pio::Echo13::Request.new(xid: 2**32)
61
+ """
62
+ Then it should fail with "ArgumentError", "Transaction ID should be an unsigned 32-bit integer."
63
+
64
+ Scenario: create (body: 'echo request body')
65
+ When I try to create an OpenFlow message with:
66
+ """
67
+ Pio::Echo13::Request.new(body: 'echo request body')
68
+ """
69
+ Then it should finish successfully
70
+ And the message have the following fields and values:
71
+ | field | value |
72
+ | class | Pio::Echo13::Request |
73
+ | ofp_version | 4 |
74
+ | message_type | 2 |
75
+ | message_length | 25 |
76
+ | transaction_id | 0 |
77
+ | xid | 0 |
78
+ | body | echo request body |
79
+
80
+ Scenario: create (unknown_attr: 'foo') and error
81
+ When I try to create an OpenFlow message with:
82
+ """
83
+ Pio::Echo13::Request.new(unknown_attr: 'foo')
84
+ """
85
+ Then it should fail with "RuntimeError", "Unknown keyword: unknown_attr"
86
+
87
+ Scenario: parse (no message body)
88
+ When I try to parse a file named "echo13_request_no_body.raw" with "Pio::Echo13::Request" class
89
+ Then it should finish successfully
90
+ And the message have the following fields and values:
91
+ | field | value |
92
+ | class | Pio::Echo13::Request |
93
+ | ofp_version | 4 |
94
+ | message_type | 2 |
95
+ | message_length | 8 |
96
+ | transaction_id | 0 |
97
+ | xid | 0 |
98
+ | body | |
99
+
100
+ Scenario: parse
101
+ When I try to parse a file named "echo13_request_body.raw" with "Pio::Echo13::Request" class
102
+ Then it should finish successfully
103
+ And the message have the following fields and values:
104
+ | field | value |
105
+ | class | Pio::Echo13::Request |
106
+ | ofp_version | 4 |
107
+ | message_type | 2 |
108
+ | message_length | 28 |
109
+ | transaction_id | 0 |
110
+ | xid | 0 |
111
+ | body | hogehogehogehogehoge |
112
+
113
+ Scenario: parse error
114
+ When I try to parse a file named "features_request.raw" with "Pio::Echo13::Request" class
115
+ Then it should fail with "Pio::ParseError", "Invalid Echo Request 1.3 message."
@@ -0,0 +1,74 @@
1
+ Feature: Hello
2
+ Scenario: create
3
+ When I try to create an OpenFlow message with:
4
+ """
5
+ Pio::Hello13.new
6
+ """
7
+ Then it should finish successfully
8
+ And the message have the following fields and values:
9
+ | field | value |
10
+ | class | Pio::Hello13 |
11
+ | ofp_version | 4 |
12
+ | message_type | 0 |
13
+ | message_length | 16 |
14
+ | transaction_id | 0 |
15
+ | xid | 0 |
16
+ | supported_versions | [:open_flow13] |
17
+
18
+ Scenario: create (transaction_id: 123)
19
+ When I try to create an OpenFlow message with:
20
+ """
21
+ Pio::Hello13.new(transaction_id: 123)
22
+ """
23
+ Then it should finish successfully
24
+ And the message have the following fields and values:
25
+ | field | value |
26
+ | class | Pio::Hello13 |
27
+ | ofp_version | 4 |
28
+ | message_type | 0 |
29
+ | message_length | 16 |
30
+ | transaction_id | 123 |
31
+ | xid | 123 |
32
+ | supported_versions | [:open_flow13] |
33
+
34
+ Scenario: create (xid: 123)
35
+ When I try to create an OpenFlow message with:
36
+ """
37
+ Pio::Hello13.new(xid: 123)
38
+ """
39
+ Then it should finish successfully
40
+ And the message have the following fields and values:
41
+ | field | value |
42
+ | class | Pio::Hello13 |
43
+ | ofp_version | 4 |
44
+ | message_type | 0 |
45
+ | message_length | 16 |
46
+ | transaction_id | 123 |
47
+ | xid | 123 |
48
+ | supported_versions | [:open_flow13] |
49
+
50
+ Scenario: parse (no version bitmap)
51
+ When I try to parse a file named "hello13_no_version_bitmap.raw" with "Hello13" class
52
+ Then it should finish successfully
53
+ And the message have the following fields and values:
54
+ | field | value |
55
+ | class | Pio::Hello13 |
56
+ | ofp_version | 4 |
57
+ | message_type | 0 |
58
+ | message_length | 8 |
59
+ | transaction_id | 0 |
60
+ | xid | 0 |
61
+ | supported_versions | [] |
62
+
63
+ Scenario: parse
64
+ When I try to parse a file named "hello13_version_bitmap.raw" with "Hello13" class
65
+ Then it should finish successfully
66
+ And the message have the following fields and values:
67
+ | field | value |
68
+ | class | Pio::Hello13 |
69
+ | ofp_version | 4 |
70
+ | message_type | 0 |
71
+ | message_length | 16 |
72
+ | transaction_id | 0 |
73
+ | xid | 0 |
74
+ | supported_versions | [:open_flow10, :open_flow13] |