pio 0.20.0 → 0.20.1

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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/Rakefile +2 -2
  4. data/features/open_flow13/match.feature +370 -0
  5. data/features/open_flow13/oxm_ether_destination_field.raw +0 -0
  6. data/features/open_flow13/oxm_ether_source_field.raw +0 -0
  7. data/features/open_flow13/oxm_ether_type_field.raw +0 -0
  8. data/features/open_flow13/oxm_in_phy_port_field.raw +0 -0
  9. data/features/open_flow13/oxm_in_port_field.raw +0 -0
  10. data/features/open_flow13/oxm_ipv4_destination_field.raw +0 -0
  11. data/features/open_flow13/oxm_ipv4_source_field.raw +0 -0
  12. data/features/open_flow13/oxm_ipv6_destination_field.raw +0 -0
  13. data/features/open_flow13/oxm_ipv6_source_field.raw +0 -0
  14. data/features/open_flow13/oxm_masked_ether_destination_field.raw +0 -0
  15. data/features/open_flow13/oxm_masked_ether_source_field.raw +0 -0
  16. data/features/open_flow13/oxm_masked_ipv4_destination_field.raw +0 -0
  17. data/features/open_flow13/oxm_masked_ipv4_source_field.raw +0 -0
  18. data/features/open_flow13/oxm_masked_ipv6_destination_field.raw +0 -0
  19. data/features/open_flow13/oxm_masked_ipv6_source_field.raw +0 -0
  20. data/features/open_flow13/oxm_metadata_field.raw +0 -0
  21. data/features/open_flow13/oxm_metadata_masked_field.raw +0 -0
  22. data/features/open_flow13/oxm_no_fields.raw +0 -0
  23. data/features/open_flow13/oxm_tcp_destination_field.raw +0 -0
  24. data/features/open_flow13/oxm_tcp_field.raw +0 -0
  25. data/features/open_flow13/oxm_tcp_source_field.raw +0 -0
  26. data/features/open_flow13/oxm_udp_destination_field.raw +0 -0
  27. data/features/open_flow13/oxm_udp_field.raw +0 -0
  28. data/features/open_flow13/oxm_udp_source_field.raw +0 -0
  29. data/lib/pio/ipv4_header.rb +0 -2
  30. data/lib/pio/open_flow/message.rb +18 -54
  31. data/lib/pio/open_flow10/packet_in.rb +1 -1
  32. data/lib/pio/open_flow13/match.rb +452 -0
  33. data/lib/pio/open_flow13.rb +7 -0
  34. data/lib/pio/type/ipv6_address.rb +21 -0
  35. data/lib/pio/version.rb +1 -1
  36. data/pio.gemspec +8 -8
  37. data/spec/pio/mac_spec.rb +2 -2
  38. data/spec/pio/open_flow13/match_spec.rb +387 -0
  39. data/spec/pio/packet_out_spec.rb +1 -2
  40. metadata +73 -19
@@ -0,0 +1,387 @@
1
+ require 'pio/open_flow13/match'
2
+
3
+ # rubocop:disable LineLength
4
+ describe Pio::OpenFlow13::Match do
5
+ describe '.new' do
6
+ When(:match) { Pio::OpenFlow13::Match.new }
7
+ Then { match.match_fields == [] }
8
+ And { match.class == Pio::OpenFlow13::Match }
9
+ And { match.length == 8 }
10
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
11
+ And { match.match_length == 4 }
12
+
13
+ context 'with in_port: 1' do
14
+ When(:match) { Pio::OpenFlow13::Match.new(in_port: 1) }
15
+ Then { match.in_port == 1 }
16
+ And { match.class == Pio::OpenFlow13::Match }
17
+ And { match.length == 16 }
18
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
19
+ And { match.match_length == 12 }
20
+ And { match.match_fields.size == 1 }
21
+ And do
22
+ match.match_fields[0].oxm_class ==
23
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
24
+ end
25
+ And do
26
+ match.match_fields[0].oxm_field ==
27
+ Pio::OpenFlow13::Match::InPort::OXM_FIELD
28
+ end
29
+ And { match.match_fields[0].masked? == false }
30
+ And { match.match_fields[0].oxm_length == 4 }
31
+ end
32
+
33
+ context "with ether_source_address: '01:02:03:04:05:06'" do
34
+ When(:match) do
35
+ Pio::OpenFlow13::Match.new(ether_source_address: '01:02:03:04:05:06')
36
+ end
37
+ Then { match.ether_source_address == '01:02:03:04:05:06' }
38
+ And { match.class == Pio::OpenFlow13::Match }
39
+ And { match.length == 16 }
40
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
41
+ And { match.match_length == 14 }
42
+ And { match.match_fields.size == 1 }
43
+ And do
44
+ match.match_fields[0].oxm_class ==
45
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
46
+ end
47
+ And do
48
+ match.match_fields[0].oxm_field ==
49
+ Pio::OpenFlow13::Match::EtherSourceAddress::OXM_FIELD
50
+ end
51
+ And { match.match_fields[0].masked? == false }
52
+ And { match.match_fields[0].oxm_length == 6 }
53
+ end
54
+
55
+ context "with ether_source_address: '01:02:03:04:05:06', ether_source_address_mask: 'ff:ff:ff:00:00:00'" do
56
+ When(:match) do
57
+ Pio::OpenFlow13::Match.new(ether_source_address: '01:02:03:04:05:06',
58
+ ether_source_address_mask: 'ff:ff:ff:00:00:00')
59
+ end
60
+ Then { match.ether_source_address == '01:02:03:04:05:06' }
61
+ Then { match.ether_source_address_mask == 'ff:ff:ff:00:00:00' }
62
+ And { match.class == Pio::OpenFlow13::Match }
63
+ And { match.length == 24 }
64
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
65
+ And { match.match_length == 20 }
66
+ And { match.match_fields.size == 1 }
67
+ And do
68
+ match.match_fields[0].oxm_class ==
69
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
70
+ end
71
+ And do
72
+ match.match_fields[0].oxm_field ==
73
+ Pio::OpenFlow13::Match::EtherSourceAddress::OXM_FIELD
74
+ end
75
+ And { match.match_fields[0].masked? == true }
76
+ And { match.match_fields[0].oxm_length == 12 }
77
+ end
78
+
79
+ context 'with ether_type: 0x0800' do
80
+ When(:match) { Pio::OpenFlow13::Match.new(ether_type: 0x0800) }
81
+ Then { match.ether_type == 0x0800 }
82
+ And { match.class == Pio::OpenFlow13::Match }
83
+ And { match.length == 16 }
84
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
85
+ And { match.match_length == 10 }
86
+ And { match.match_fields.size == 1 }
87
+ And do
88
+ match.match_fields[0].oxm_class ==
89
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
90
+ end
91
+ And do
92
+ match.match_fields[0].oxm_field ==
93
+ Pio::OpenFlow13::Match::EtherType::OXM_FIELD
94
+ end
95
+ And { match.match_fields[0].masked? == false }
96
+ And { match.match_fields[0].oxm_length == 2 }
97
+ end
98
+
99
+ context "with ether_type: 0x0800, ipv4_source_address: '1.2.3.4'" do
100
+ When(:match) do
101
+ Pio::OpenFlow13::Match.new(ether_type: 0x0800,
102
+ ipv4_source_address: '1.2.3.4')
103
+ end
104
+ Then { match.ether_type == 0x0800 }
105
+ Then { match.ipv4_source_address == '1.2.3.4' }
106
+ And { match.class == Pio::OpenFlow13::Match }
107
+ And { match.length == 24 }
108
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
109
+ And { match.match_length == 18 }
110
+ And { match.match_fields.size == 2 }
111
+ And do
112
+ match.match_fields[0].oxm_class ==
113
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
114
+ end
115
+ And do
116
+ match.match_fields[0].oxm_field ==
117
+ Pio::OpenFlow13::Match::EtherType::OXM_FIELD
118
+ end
119
+ And { match.match_fields[0].masked? == false }
120
+ And { match.match_fields[0].oxm_length == 2 }
121
+ And do
122
+ match.match_fields[1].oxm_class ==
123
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
124
+ end
125
+ And do
126
+ match.match_fields[1].oxm_field ==
127
+ Pio::OpenFlow13::Match::Ipv4SourceAddress::OXM_FIELD
128
+ end
129
+ And { match.match_fields[1].masked? == false }
130
+ And { match.match_fields[1].oxm_length == 4 }
131
+ end
132
+
133
+ context "with ether_type: 0x0800, ipv4_destination_address: '1.2.3.4'" do
134
+ When(:match) do
135
+ Pio::OpenFlow13::Match.new(ether_type: 0x0800,
136
+ ipv4_destination_address: '1.2.3.4')
137
+ end
138
+ Then { match.ether_type == 0x0800 }
139
+ Then { match.ipv4_destination_address == '1.2.3.4' }
140
+ And { match.class == Pio::OpenFlow13::Match }
141
+ And { match.length == 24 }
142
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
143
+ And { match.match_length == 18 }
144
+ And { match.match_fields.size == 2 }
145
+ And do
146
+ match.match_fields[0].oxm_class ==
147
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
148
+ end
149
+ And do
150
+ match.match_fields[0].oxm_field ==
151
+ Pio::OpenFlow13::Match::EtherType::OXM_FIELD
152
+ end
153
+ And { match.match_fields[0].masked? == false }
154
+ And { match.match_fields[0].oxm_length == 2 }
155
+ And do
156
+ match.match_fields[1].oxm_class ==
157
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
158
+ end
159
+ And do
160
+ match.match_fields[1].oxm_field ==
161
+ Pio::OpenFlow13::Match::Ipv4DestinationAddress::OXM_FIELD
162
+ end
163
+ And { match.match_fields[1].masked? == false }
164
+ And { match.match_fields[1].oxm_length == 4 }
165
+ end
166
+ end
167
+
168
+ def read_raw_data_file(name)
169
+ IO.read File.join(__dir__, '..', '..', '..', name)
170
+ end
171
+
172
+ describe '.read' do
173
+ When(:match) { Pio::OpenFlow13::Match.read(raw_data) }
174
+
175
+ context 'with file "features/open_flow13/oxm_no_fields.raw"' do
176
+ Given(:raw_data) do
177
+ read_raw_data_file 'features/open_flow13/oxm_no_fields.raw'
178
+ end
179
+ Then { match.match_fields == [] }
180
+ And { match.class == Pio::OpenFlow13::Match }
181
+ And { match.length == 8 }
182
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
183
+ And { match.match_length == 4 }
184
+ end
185
+
186
+ context 'with file "features/open_flow13/oxm_in_port_field.raw"' do
187
+ Given(:raw_data) do
188
+ read_raw_data_file 'features/open_flow13/oxm_in_port_field.raw'
189
+ end
190
+ Then { match.in_port == 1 }
191
+ And { match.class == Pio::OpenFlow13::Match }
192
+ And { match.length == 16 }
193
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
194
+ And { match.match_length == 12 }
195
+ And { match.match_fields.size == 1 }
196
+ And do
197
+ match.match_fields[0].oxm_class ==
198
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
199
+ end
200
+ And do
201
+ match.match_fields[0].oxm_field ==
202
+ Pio::OpenFlow13::Match::InPort::OXM_FIELD
203
+ end
204
+ And { match.match_fields[0].masked? == false }
205
+ And { match.match_fields[0].oxm_length == 4 }
206
+ end
207
+
208
+ context 'with file "features/open_flow13/oxm_ether_destination_field.raw"' do
209
+ Given(:raw_data) do
210
+ read_raw_data_file 'features/open_flow13/oxm_ether_destination_field.raw'
211
+ end
212
+ Then { match.ether_destination_address == 'ff:ff:ff:ff:ff:ff' }
213
+ And { match.class == Pio::OpenFlow13::Match }
214
+ And { match.length == 16 }
215
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
216
+ And { match.match_length == 14 }
217
+ And { match.match_fields.size == 1 }
218
+ And do
219
+ match.match_fields[0].oxm_class ==
220
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
221
+ end
222
+ And do
223
+ match.match_fields[0].oxm_field ==
224
+ Pio::OpenFlow13::Match::EtherDestinationAddress::OXM_FIELD
225
+ end
226
+ And { match.match_fields[0].masked? == false }
227
+ And { match.match_fields[0].oxm_length == 6 }
228
+ end
229
+
230
+ context 'with file "features/open_flow13/oxm_ether_source_field.raw"' do
231
+ Given(:raw_data) do
232
+ read_raw_data_file 'features/open_flow13/oxm_ether_source_field.raw'
233
+ end
234
+ Then { match.ether_source_address == '01:02:03:04:05:06' }
235
+ And { match.class == Pio::OpenFlow13::Match }
236
+ And { match.length == 16 }
237
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
238
+ And { match.match_length == 14 }
239
+ And { match.match_fields.size == 1 }
240
+ And do
241
+ match.match_fields[0].oxm_class ==
242
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
243
+ end
244
+ And do
245
+ match.match_fields[0].oxm_field ==
246
+ Pio::OpenFlow13::Match::EtherSourceAddress::OXM_FIELD
247
+ end
248
+ And { match.match_fields[0].masked? == false }
249
+ And { match.match_fields[0].oxm_length == 6 }
250
+ end
251
+
252
+ context 'with file "features/open_flow13/oxm_masked_ether_destination_field.raw"' do
253
+ Given(:raw_data) do
254
+ read_raw_data_file 'features/open_flow13/oxm_masked_ether_destination_field.raw'
255
+ end
256
+ Then { match.ether_destination_address == 'ff:ff:ff:ff:ff:ff' }
257
+ Then { match.ether_destination_address_mask == 'ff:ff:ff:00:00:00' }
258
+ And { match.class == Pio::OpenFlow13::Match }
259
+ And { match.length == 24 }
260
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
261
+ And { match.match_length == 20 }
262
+ And { match.match_fields.size == 1 }
263
+ And do
264
+ match.match_fields[0].oxm_class ==
265
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
266
+ end
267
+ And do
268
+ match.match_fields[0].oxm_field ==
269
+ Pio::OpenFlow13::Match::EtherDestinationAddress::OXM_FIELD
270
+ end
271
+ And { match.match_fields[0].masked? == true }
272
+ And { match.match_fields[0].oxm_length == 12 }
273
+ end
274
+
275
+ context 'with file "features/open_flow13/oxm_masked_ether_source_field.raw"' do
276
+ Given(:raw_data) do
277
+ read_raw_data_file 'features/open_flow13/oxm_masked_ether_source_field.raw'
278
+ end
279
+ Then { match.ether_source_address == '01:02:03:04:05:06' }
280
+ Then { match.ether_source_address_mask == 'ff:ff:ff:00:00:00' }
281
+ And { match.class == Pio::OpenFlow13::Match }
282
+ And { match.length == 24 }
283
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
284
+ And { match.match_length == 20 }
285
+ And { match.match_fields.size == 1 }
286
+ And do
287
+ match.match_fields[0].oxm_class ==
288
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
289
+ end
290
+ And do
291
+ match.match_fields[0].oxm_field ==
292
+ Pio::OpenFlow13::Match::EtherSourceAddress::OXM_FIELD
293
+ end
294
+ And { match.match_fields[0].masked? == true }
295
+ And { match.match_fields[0].oxm_length == 12 }
296
+ end
297
+
298
+ context 'with file "features/open_flow13/oxm_ether_type_field.raw"' do
299
+ Given(:raw_data) do
300
+ read_raw_data_file 'features/open_flow13/oxm_ether_type_field.raw'
301
+ end
302
+ Then { match.ether_type == 0 }
303
+ And { match.class == Pio::OpenFlow13::Match }
304
+ And { match.length == 16 }
305
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
306
+ And { match.match_length == 10 }
307
+ And { match.match_fields.size == 1 }
308
+ And do
309
+ match.match_fields[0].oxm_class ==
310
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
311
+ end
312
+ And do
313
+ match.match_fields[0].oxm_field ==
314
+ Pio::OpenFlow13::Match::EtherType::OXM_FIELD
315
+ end
316
+ And { match.match_fields[0].masked? == false }
317
+ And { match.match_fields[0].oxm_length == 2 }
318
+ end
319
+
320
+ context 'with file "features/open_flow13/oxm_ipv4_source_field.raw"' do
321
+ Given(:raw_data) do
322
+ read_raw_data_file 'features/open_flow13/oxm_ipv4_source_field.raw'
323
+ end
324
+ Then { match.ether_type == 0x0800 }
325
+ Then { match.ipv4_source_address == '1.2.3.4' }
326
+ And { match.class == Pio::OpenFlow13::Match }
327
+ And { match.length == 24 }
328
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
329
+ And { match.match_length == 18 }
330
+ And { match.match_fields.size == 2 }
331
+ And do
332
+ match.match_fields[0].oxm_class ==
333
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
334
+ end
335
+ And do
336
+ match.match_fields[0].oxm_field ==
337
+ Pio::OpenFlow13::Match::EtherType::OXM_FIELD
338
+ end
339
+ And { match.match_fields[0].masked? == false }
340
+ And { match.match_fields[0].oxm_length == 2 }
341
+ And do
342
+ match.match_fields[1].oxm_class ==
343
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
344
+ end
345
+ And do
346
+ match.match_fields[1].oxm_field ==
347
+ Pio::OpenFlow13::Match::Ipv4SourceAddress::OXM_FIELD
348
+ end
349
+ And { match.match_fields[1].masked? == false }
350
+ And { match.match_fields[1].oxm_length == 4 }
351
+ end
352
+
353
+ context 'with file "features/open_flow13/oxm_ipv4_destination_field.raw"' do
354
+ Given(:raw_data) do
355
+ read_raw_data_file 'features/open_flow13/oxm_ipv4_destination_field.raw'
356
+ end
357
+ Then { match.ether_type == 0x0800 }
358
+ Then { match.ipv4_destination_address == '11.22.33.44' }
359
+ And { match.class == Pio::OpenFlow13::Match }
360
+ And { match.length == 24 }
361
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
362
+ And { match.match_length == 18 }
363
+ And { match.match_fields.size == 2 }
364
+ And do
365
+ match.match_fields[0].oxm_class ==
366
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
367
+ end
368
+ And do
369
+ match.match_fields[0].oxm_field ==
370
+ Pio::OpenFlow13::Match::EtherType::OXM_FIELD
371
+ end
372
+ And { match.match_fields[0].masked? == false }
373
+ And { match.match_fields[0].oxm_length == 2 }
374
+ And do
375
+ match.match_fields[1].oxm_class ==
376
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
377
+ end
378
+ And do
379
+ match.match_fields[1].oxm_field ==
380
+ Pio::OpenFlow13::Match::Ipv4DestinationAddress::OXM_FIELD
381
+ end
382
+ And { match.match_fields[1].masked? == false }
383
+ And { match.match_fields[1].oxm_length == 4 }
384
+ end
385
+ end
386
+ end
387
+ # rubocop:enable LineLength
@@ -86,8 +86,7 @@ describe Pio::PacketOut do
86
86
  When(:binary) { [1, 0, 0, 8, 0, 0, 0, 0].pack('C*') }
87
87
 
88
88
  Then do
89
- result == Failure(Pio::ParseError,
90
- 'Invalid PacketOut message.')
89
+ result == Failure(Pio::ParseError, 'Invalid PacketOut message.')
91
90
  end
92
91
  end
93
92
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.20.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yasuhito Takamiya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-22 00:00:00.000000000 Z
11
+ date: 2015-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bindata
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 1.9.4
47
+ version: 1.10.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 1.9.4
54
+ version: 1.10.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - ~>
74
74
  - !ruby/object:Gem::Version
75
- version: 2.12.5
75
+ version: 2.12.6
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ~>
81
81
  - !ruby/object:Gem::Version
82
- version: 2.12.5
82
+ version: 2.12.6
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: guard-bundler
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: 4.5.0
117
+ version: 4.5.2
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - ~>
123
123
  - !ruby/object:Gem::Version
124
- version: 4.5.0
124
+ version: 4.5.2
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: guard-rubocop
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -156,14 +156,14 @@ dependencies:
156
156
  requirements:
157
157
  - - ~>
158
158
  - !ruby/object:Gem::Version
159
- version: 0.9.4
159
+ version: 0.9.5
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - ~>
165
165
  - !ruby/object:Gem::Version
166
- version: 0.9.4
166
+ version: 0.9.5
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: rb-inotify
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -198,14 +198,14 @@ dependencies:
198
198
  requirements:
199
199
  - - ~>
200
200
  - !ruby/object:Gem::Version
201
- version: 0.5.10
201
+ version: 0.6.2
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - ~>
207
207
  - !ruby/object:Gem::Version
208
- version: 0.5.10
208
+ version: 0.6.2
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: relish
211
211
  requirement: !ruby/object:Gem::Requirement
@@ -254,14 +254,14 @@ dependencies:
254
254
  requirements:
255
255
  - - ~>
256
256
  - !ruby/object:Gem::Version
257
- version: 0.8.0
257
+ version: 0.8.1
258
258
  type: :development
259
259
  prerelease: false
260
260
  version_requirements: !ruby/object:Gem::Requirement
261
261
  requirements:
262
262
  - - ~>
263
263
  - !ruby/object:Gem::Version
264
- version: 0.8.0
264
+ version: 0.8.1
265
265
  - !ruby/object:Gem::Dependency
266
266
  name: cucumber
267
267
  requirement: !ruby/object:Gem::Requirement
@@ -310,14 +310,14 @@ dependencies:
310
310
  requirements:
311
311
  - - ~>
312
312
  - !ruby/object:Gem::Version
313
- version: 2.1.0
313
+ version: 2.2.1
314
314
  type: :development
315
315
  prerelease: false
316
316
  version_requirements: !ruby/object:Gem::Requirement
317
317
  requirements:
318
318
  - - ~>
319
319
  - !ruby/object:Gem::Version
320
- version: 2.1.0
320
+ version: 2.2.1
321
321
  - !ruby/object:Gem::Dependency
322
322
  name: rspec
323
323
  requirement: !ruby/object:Gem::Requirement
@@ -352,14 +352,14 @@ dependencies:
352
352
  requirements:
353
353
  - - ~>
354
354
  - !ruby/object:Gem::Version
355
- version: 0.30.0
355
+ version: 0.32.0
356
356
  type: :development
357
357
  prerelease: false
358
358
  version_requirements: !ruby/object:Gem::Requirement
359
359
  requirements:
360
360
  - - ~>
361
361
  - !ruby/object:Gem::Version
362
- version: 0.30.0
362
+ version: 0.32.0
363
363
  description: Pure ruby packet parser and generator.
364
364
  email:
365
365
  - yasuhito@gmail.com
@@ -480,6 +480,31 @@ files:
480
480
  - features/open_flow13/hello.feature
481
481
  - features/open_flow13/hello_no_version_bitmap.raw
482
482
  - features/open_flow13/hello_version_bitmap.raw
483
+ - features/open_flow13/match.feature
484
+ - features/open_flow13/oxm_ether_destination_field.raw
485
+ - features/open_flow13/oxm_ether_source_field.raw
486
+ - features/open_flow13/oxm_ether_type_field.raw
487
+ - features/open_flow13/oxm_in_phy_port_field.raw
488
+ - features/open_flow13/oxm_in_port_field.raw
489
+ - features/open_flow13/oxm_ipv4_destination_field.raw
490
+ - features/open_flow13/oxm_ipv4_source_field.raw
491
+ - features/open_flow13/oxm_ipv6_destination_field.raw
492
+ - features/open_flow13/oxm_ipv6_source_field.raw
493
+ - features/open_flow13/oxm_masked_ether_destination_field.raw
494
+ - features/open_flow13/oxm_masked_ether_source_field.raw
495
+ - features/open_flow13/oxm_masked_ipv4_destination_field.raw
496
+ - features/open_flow13/oxm_masked_ipv4_source_field.raw
497
+ - features/open_flow13/oxm_masked_ipv6_destination_field.raw
498
+ - features/open_flow13/oxm_masked_ipv6_source_field.raw
499
+ - features/open_flow13/oxm_metadata_field.raw
500
+ - features/open_flow13/oxm_metadata_masked_field.raw
501
+ - features/open_flow13/oxm_no_fields.raw
502
+ - features/open_flow13/oxm_tcp_destination_field.raw
503
+ - features/open_flow13/oxm_tcp_field.raw
504
+ - features/open_flow13/oxm_tcp_source_field.raw
505
+ - features/open_flow13/oxm_udp_destination_field.raw
506
+ - features/open_flow13/oxm_udp_field.raw
507
+ - features/open_flow13/oxm_udp_source_field.raw
483
508
  - features/step_definitions/open_flow_steps.rb
484
509
  - features/step_definitions/packet_data_steps.rb
485
510
  - features/support/env.rb
@@ -561,6 +586,7 @@ files:
561
586
  - lib/pio/open_flow13/features_reply.rb
562
587
  - lib/pio/open_flow13/features_request.rb
563
588
  - lib/pio/open_flow13/hello.rb
589
+ - lib/pio/open_flow13/match.rb
564
590
  - lib/pio/options.rb
565
591
  - lib/pio/parse_error.rb
566
592
  - lib/pio/payload.rb
@@ -575,6 +601,7 @@ files:
575
601
  - lib/pio/set_vlan_vid.rb
576
602
  - lib/pio/strip_vlan_header.rb
577
603
  - lib/pio/type/ip_address.rb
604
+ - lib/pio/type/ipv6_address.rb
578
605
  - lib/pio/type/mac_address.rb
579
606
  - lib/pio/udp.rb
580
607
  - lib/pio/udp_header.rb
@@ -602,6 +629,7 @@ files:
602
629
  - spec/pio/open_flow/phy_port_spec.rb
603
630
  - spec/pio/open_flow/type_spec.rb
604
631
  - spec/pio/open_flow13/hello_spec.rb
632
+ - spec/pio/open_flow13/match_spec.rb
605
633
  - spec/pio/packet_out_spec.rb
606
634
  - spec/pio/send_out_port_spec.rb
607
635
  - spec/pio/set_ether_destination_address_spec.rb
@@ -636,7 +664,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
636
664
  version: '0'
637
665
  requirements: []
638
666
  rubyforge_project:
639
- rubygems_version: 2.4.3
667
+ rubygems_version: 2.4.7
640
668
  signing_key:
641
669
  specification_version: 4
642
670
  summary: Packet parser and generator.
@@ -661,6 +689,7 @@ test_files:
661
689
  - spec/pio/lldp/options_spec.rb
662
690
  - spec/pio/set_vlan_priority_spec.rb
663
691
  - spec/pio/open_flow13/hello_spec.rb
692
+ - spec/pio/open_flow13/match_spec.rb
664
693
  - spec/pio/mac_spec.rb
665
694
  - spec/pio/icmp/request_spec.rb
666
695
  - spec/pio/icmp/reply_spec.rb
@@ -733,18 +762,43 @@ test_files:
733
762
  - features/open_flow10/echo_request.raw
734
763
  - features/lldp.minimal.pcap
735
764
  - features/open_flow13/echo_request_body.raw
765
+ - features/open_flow13/oxm_no_fields.raw
766
+ - features/open_flow13/oxm_ipv4_source_field.raw
736
767
  - features/open_flow13/hello_version_bitmap.raw
737
768
  - features/open_flow13/echo_reply_body.raw
738
769
  - features/open_flow13/features_reply.raw
739
770
  - features/open_flow13/features_request.feature
771
+ - features/open_flow13/oxm_masked_ether_destination_field.raw
772
+ - features/open_flow13/oxm_tcp_source_field.raw
773
+ - features/open_flow13/oxm_ipv6_destination_field.raw
740
774
  - features/open_flow13/echo_request.feature
741
775
  - features/open_flow13/features_request.raw
776
+ - features/open_flow13/oxm_masked_ipv6_destination_field.raw
777
+ - features/open_flow13/oxm_udp_field.raw
742
778
  - features/open_flow13/features_reply.feature
779
+ - features/open_flow13/oxm_masked_ether_source_field.raw
780
+ - features/open_flow13/oxm_in_port_field.raw
781
+ - features/open_flow13/oxm_tcp_field.raw
782
+ - features/open_flow13/oxm_in_phy_port_field.raw
783
+ - features/open_flow13/oxm_ether_type_field.raw
743
784
  - features/open_flow13/echo_reply_no_body.raw
785
+ - features/open_flow13/oxm_tcp_destination_field.raw
786
+ - features/open_flow13/oxm_masked_ipv4_source_field.raw
787
+ - features/open_flow13/match.feature
788
+ - features/open_flow13/oxm_udp_source_field.raw
744
789
  - features/open_flow13/echo_request_no_body.raw
790
+ - features/open_flow13/oxm_masked_ipv6_source_field.raw
791
+ - features/open_flow13/oxm_ipv6_source_field.raw
792
+ - features/open_flow13/oxm_masked_ipv4_destination_field.raw
745
793
  - features/open_flow13/echo_reply.feature
794
+ - features/open_flow13/oxm_metadata_field.raw
795
+ - features/open_flow13/oxm_metadata_masked_field.raw
796
+ - features/open_flow13/oxm_ipv4_destination_field.raw
797
+ - features/open_flow13/oxm_udp_destination_field.raw
746
798
  - features/open_flow13/hello.feature
799
+ - features/open_flow13/oxm_ether_source_field.raw
747
800
  - features/open_flow13/hello_no_version_bitmap.raw
801
+ - features/open_flow13/oxm_ether_destination_field.raw
748
802
  - features/step_definitions/packet_data_steps.rb
749
803
  - features/step_definitions/open_flow_steps.rb
750
804
  - features/icmp.pcap