pio 0.20.1 → 0.21.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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/README.md +1 -0
  4. data/Rakefile +5 -8
  5. data/bin/byebug +16 -0
  6. data/bin/terminal-notifier +16 -0
  7. data/features/open_flow10/flow_mod.feature +5 -5
  8. data/features/open_flow10/packet_in.feature +2 -2
  9. data/features/open_flow10/port_status.feature +1 -1
  10. data/features/open_flow13/action_copy_ttl_in.raw +0 -0
  11. data/features/open_flow13/action_copy_ttl_out.raw +0 -0
  12. data/features/open_flow13/action_dec_mpls_ttl.raw +0 -0
  13. data/features/open_flow13/action_dec_nw_ttl.raw +0 -0
  14. data/features/open_flow13/action_group.raw +0 -0
  15. data/features/open_flow13/action_pop_mpls.raw +0 -0
  16. data/features/open_flow13/action_pop_pbb.raw +0 -0
  17. data/features/open_flow13/action_pop_vlan.raw +0 -0
  18. data/features/open_flow13/action_push_mpls.raw +0 -0
  19. data/features/open_flow13/action_push_pbb.raw +0 -0
  20. data/features/open_flow13/action_push_vlan.raw +0 -0
  21. data/features/open_flow13/action_set_field.raw +0 -0
  22. data/features/open_flow13/action_set_mpls_ttl.raw +0 -0
  23. data/features/open_flow13/action_set_nw_ttl.raw +0 -0
  24. data/features/open_flow13/action_set_queue.raw +0 -0
  25. data/features/open_flow13/apply_actions.feature +43 -0
  26. data/features/open_flow13/apply_actions.raw +0 -0
  27. data/features/open_flow13/flow_add_apply_no_match.raw +0 -0
  28. data/features/open_flow13/flow_mod.feature +146 -0
  29. data/features/open_flow13/flow_mod_add_apply_no_match.raw +0 -0
  30. data/features/open_flow13/flow_mod_no_match_or_instructions.raw +0 -0
  31. data/features/open_flow13/goto_table.feature +26 -0
  32. data/features/open_flow13/instruction_clear_actions.raw +0 -0
  33. data/features/open_flow13/instruction_goto_table.raw +0 -0
  34. data/features/open_flow13/instruction_meter.raw +0 -0
  35. data/features/open_flow13/instruction_write_actions.raw +0 -0
  36. data/features/open_flow13/instruction_write_metadata.raw +0 -0
  37. data/features/open_flow13/match.feature +36 -0
  38. data/features/open_flow13/meter.feature +26 -0
  39. data/features/open_flow13/send_out_port.feature +28 -0
  40. data/features/open_flow13/send_out_port.raw +0 -0
  41. data/features/open_flow13/write_metadata.feature +28 -0
  42. data/features/step_definitions/open_flow_steps.rb +20 -0
  43. data/features/step_definitions/packet_data_steps.rb +5 -15
  44. data/lib/pio/monkey_patch/integer.rb +2 -0
  45. data/lib/pio/monkey_patch/integer/base_conversions.rb +10 -0
  46. data/lib/pio/open_flow.rb +0 -2
  47. data/lib/pio/open_flow10.rb +1 -0
  48. data/lib/pio/{open_flow → open_flow10}/actions.rb +1 -1
  49. data/lib/pio/open_flow10/echo.rb +1 -0
  50. data/lib/pio/{open_flow → open_flow10}/message.rb +1 -0
  51. data/lib/pio/{send_out_port.rb → open_flow10/send_out_port.rb} +0 -0
  52. data/lib/pio/open_flow13.rb +6 -0
  53. data/lib/pio/open_flow13/apply.rb +74 -0
  54. data/lib/pio/open_flow13/flow_mod.rb +195 -0
  55. data/lib/pio/open_flow13/goto_table.rb +33 -0
  56. data/lib/pio/open_flow13/hello.rb +1 -2
  57. data/lib/pio/open_flow13/match.rb +38 -5
  58. data/lib/pio/open_flow13/meter.rb +32 -0
  59. data/lib/pio/open_flow13/send_out_port.rb +48 -0
  60. data/lib/pio/open_flow13/write_metadata.rb +51 -0
  61. data/lib/pio/version.rb +1 -1
  62. data/spec/pio/{send_out_port_spec.rb → open_flow10/send_out_port_spec.rb} +1 -1
  63. data/spec/pio/open_flow13/goto_table_spec.rb +12 -0
  64. data/spec/pio/open_flow13/match_spec.rb +45 -0
  65. data/spec/pio/open_flow13/meter_spec.rb +12 -0
  66. data/spec/pio/open_flow13/write_metadata_spec.rb +28 -0
  67. metadata +185 -108
@@ -0,0 +1,33 @@
1
+ require 'forwardable'
2
+
3
+ # Base module.
4
+ module Pio
5
+ # Resubmit to the table_id
6
+ class GotoTable
7
+ # OpenFlow 1.3.4 OFPIT_GOTO_TABLE instruction format
8
+ class Format < BinData::Record
9
+ endian :big
10
+
11
+ uint16 :instruction_type, value: 1
12
+ uint16 :instruction_length, value: 8
13
+ uint8 :table_id
14
+ bit24 :padding
15
+ end
16
+
17
+ def self.read(raw_data)
18
+ allocate.tap do |goto_table|
19
+ goto_table.instance_variable_set :@format, Format.read(raw_data)
20
+ end
21
+ end
22
+
23
+ extend Forwardable
24
+
25
+ def_delegators :@format, :instruction_type
26
+ def_delegators :@format, :instruction_length
27
+ def_delegators :@format, :table_id
28
+
29
+ def initialize(table_id)
30
+ @format = Format.new(table_id: table_id)
31
+ end
32
+ end
33
+ end
@@ -103,8 +103,7 @@ module Pio
103
103
  body_attrs = { elements: [{ element_type: 1,
104
104
  element_length: 8,
105
105
  element_value: 16 }] }
106
- @format = Format.new(open_flow_header: header_attrs,
107
- body: body_attrs)
106
+ @format = Format.new(open_flow_header: header_attrs, body: body_attrs)
108
107
  end
109
108
 
110
109
  def method_missing(method, *args, &block)
@@ -27,6 +27,31 @@ module Pio
27
27
  end
28
28
  end
29
29
 
30
+ # The value of OXM_OF_METADATA match field
31
+ class Metadata < BinData::Record
32
+ OXM_FIELD = 2
33
+
34
+ endian :big
35
+
36
+ uint64 :metadata
37
+
38
+ def length
39
+ 8
40
+ end
41
+ end
42
+
43
+ # Masked OXM_OF_METADATA match field
44
+ class MaskedMetadata < BinData::Record
45
+ endian :big
46
+
47
+ uint64 :metadata
48
+ uint64 :metadata_mask
49
+
50
+ def length
51
+ 16
52
+ end
53
+ end
54
+
30
55
  # The value of OXM_OF_ETH_DST match field.
31
56
  class EtherDestinationAddress < BinData::Record
32
57
  OXM_FIELD = 3
@@ -262,7 +287,7 @@ module Pio
262
287
  end
263
288
 
264
289
  # OXM format
265
- class Format < BinData::Record
290
+ class Oxm < BinData::Record
266
291
  # OXM match field.
267
292
  class MatchField < BinData::Record
268
293
  endian :big
@@ -275,6 +300,8 @@ module Pio
275
300
  read_length: :oxm_length,
276
301
  selection: :choose_tlv_value do
277
302
  in_port InPort
303
+ metadata Metadata
304
+ masked_metadata MaskedMetadata
278
305
  ether_destination_address EtherDestinationAddress
279
306
  masked_ether_destination_address MaskedEtherDestinationAddress
280
307
  ether_source_address EtherSourceAddress
@@ -317,6 +344,8 @@ module Pio
317
344
  case oxm_field
318
345
  when InPort::OXM_FIELD
319
346
  InPort
347
+ when Metadata::OXM_FIELD
348
+ masked? ? MaskedMetadata : Metadata
320
349
  when EtherDestinationAddress::OXM_FIELD
321
350
  masked? ? MaskedEtherDestinationAddress : EtherDestinationAddress
322
351
  when EtherSourceAddress::OXM_FIELD
@@ -362,6 +391,10 @@ module Pio
362
391
  string :padding, length: :padding_length
363
392
  hide :padding
364
393
 
394
+ def length
395
+ match_length + padding_length
396
+ end
397
+
365
398
  def method_missing(method, *args, &block)
366
399
  match_fields.each do |each|
367
400
  next unless each.tlv_value.respond_to?(method)
@@ -405,7 +438,7 @@ module Pio
405
438
  tlv_value: { each => user_attrs.fetch(each) } }
406
439
  end
407
440
 
408
- [:ether_destination_address, :ether_source_address,
441
+ [:metadata, :ether_destination_address, :ether_source_address,
409
442
  :ipv4_source_address, :ipv4_destination_address,
410
443
  :ipv6_source_address, :ipv6_destination_address].each do |each|
411
444
  next unless user_attrs.key?(each)
@@ -428,15 +461,15 @@ module Pio
428
461
 
429
462
  def self.read(raw_data)
430
463
  allocate.tap do |message|
431
- message.instance_variable_set(:@format, Format.read(raw_data))
464
+ message.instance_variable_set(:@format, Oxm.read(raw_data))
432
465
  end
433
466
  end
434
467
 
435
468
  def initialize(user_attrs = {})
436
469
  @format = if user_attrs.empty?
437
- Format.new
470
+ Oxm.new
438
471
  else
439
- Format.new(Options.new(user_attrs).to_hash)
472
+ Oxm.new(Options.new(user_attrs).to_hash)
440
473
  end
441
474
  end
442
475
 
@@ -0,0 +1,32 @@
1
+ require 'forwardable'
2
+
3
+ # Base module.
4
+ module Pio
5
+ # Metering
6
+ class Meter
7
+ # OpenFlow 1.3.4 OFPIT_METER instruction format
8
+ class Format < BinData::Record
9
+ endian :big
10
+
11
+ uint16 :instruction_type, value: 6
12
+ uint16 :instruction_length, value: 8
13
+ uint32 :meter_id
14
+ end
15
+
16
+ def self.read(raw_data)
17
+ allocate.tap do |meter|
18
+ meter.instance_variable_set :@format, Format.read(raw_data)
19
+ end
20
+ end
21
+
22
+ extend Forwardable
23
+
24
+ def_delegators :@format, :instruction_type
25
+ def_delegators :@format, :instruction_length
26
+ def_delegators :@format, :meter_id
27
+
28
+ def initialize(meter_id)
29
+ @format = Format.new(meter_id: meter_id)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,48 @@
1
+ require 'forwardable'
2
+
3
+ # Base module.
4
+ module Pio
5
+ remove_const :SendOutPort if const_defined?(:SendOutPort)
6
+
7
+ # Output to switch port.
8
+ class SendOutPort
9
+ # OpenFlow 1.3.4 OFPAT_OUTPUT action format.
10
+ class Format < BinData::Record
11
+ NO_BUFFER = 0xffff
12
+
13
+ endian :big
14
+
15
+ uint16 :action_type, value: 0
16
+ uint16 :action_length, value: 16
17
+ uint32 :port
18
+ uint16 :max_length, initial_value: NO_BUFFER
19
+ uint48 :padding
20
+ end
21
+
22
+ def self.read(raw_data)
23
+ allocate.tap do |send_out_port|
24
+ send_out_port.instance_variable_set :@format, Format.read(raw_data)
25
+ end
26
+ end
27
+
28
+ extend Forwardable
29
+
30
+ def_delegators :@format, :action_type
31
+ def_delegators :@format, :action_length
32
+ def_delegators :@format, :port
33
+ def_delegator :@format, :to_binary_s, :to_binary
34
+
35
+ def initialize(port)
36
+ @format = Format.new(port: port)
37
+ end
38
+
39
+ def max_length
40
+ case @format.max_length
41
+ when Format::NO_BUFFER
42
+ :no_buffer
43
+ else
44
+ @format.max_length
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,51 @@
1
+ require 'forwardable'
2
+
3
+ # Base module.
4
+ module Pio
5
+ # Write metadata
6
+ class WriteMetadata
7
+ # OpenFlow 1.3.4 OFPIT_WRITE_METADATA instruction format
8
+ class Format < BinData::Record
9
+ endian :big
10
+
11
+ uint16 :instruction_type, value: 2
12
+ uint16 :instruction_length, value: 24
13
+ uint32 :padding
14
+ uint64 :metadata
15
+ uint64 :metadata_mask
16
+ end
17
+
18
+ def self.read(raw_data)
19
+ allocate.tap do |write_metadata|
20
+ write_metadata.instance_variable_set :@format, Format.read(raw_data)
21
+ end
22
+ end
23
+
24
+ extend Forwardable
25
+
26
+ def_delegators :@format, :instruction_type
27
+ def_delegators :@format, :instruction_length
28
+ def_delegators :@format, :metadata
29
+ def_delegators :@format, :metadata_mask
30
+
31
+ def initialize(user_options)
32
+ @options = user_options
33
+ @format = Format.new(options)
34
+ end
35
+
36
+ def options
37
+ {
38
+ metadata: metadata_option,
39
+ metadata_mask: metadata_mask_option
40
+ }
41
+ end
42
+
43
+ def metadata_option
44
+ @options[:metadata]
45
+ end
46
+
47
+ def metadata_mask_option
48
+ @options[:metadata_mask]
49
+ end
50
+ end
51
+ end
data/lib/pio/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # Base module.
2
2
  module Pio
3
3
  # gem version.
4
- VERSION = '0.20.1'.freeze
4
+ VERSION = '0.21.0'.freeze
5
5
  end
@@ -1,4 +1,4 @@
1
- require 'pio/send_out_port'
1
+ require 'pio/open_flow10/send_out_port'
2
2
 
3
3
  describe Pio::SendOutPort do
4
4
  describe '.new' do
@@ -0,0 +1,12 @@
1
+ require 'pio/open_flow13/goto_table'
2
+
3
+ describe Pio::GotoTable do
4
+ describe '.new' do
5
+ When(:goto_table) { Pio::GotoTable.new(options) }
6
+
7
+ context 'with 1' do
8
+ Given(:options) { 1 }
9
+ Then { goto_table.table_id == 1 }
10
+ end
11
+ end
12
+ end
@@ -52,6 +52,51 @@ describe Pio::OpenFlow13::Match do
52
52
  And { match.match_fields[0].oxm_length == 6 }
53
53
  end
54
54
 
55
+ context 'with metadata: 1' do
56
+ When(:match) do
57
+ Pio::OpenFlow13::Match.new(metadata: 1)
58
+ end
59
+ Then { match.metadata == 1 }
60
+ And { match.class == Pio::OpenFlow13::Match }
61
+ And { match.length == 16 }
62
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
63
+ And { match.match_length == 16 }
64
+ And { match.match_fields.size == 1 }
65
+ And do
66
+ match.match_fields[0].oxm_class ==
67
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
68
+ end
69
+ And do
70
+ match.match_fields[0].oxm_field ==
71
+ Pio::OpenFlow13::Match::Metadata::OXM_FIELD
72
+ end
73
+ And { match.match_fields[0].masked? == false }
74
+ And { match.match_fields[0].oxm_length == 8 }
75
+ end
76
+
77
+ context 'with metadata: 1, metadata_mask: 1' do
78
+ When(:match) do
79
+ Pio::OpenFlow13::Match.new(metadata: 1, metadata_mask: 1)
80
+ end
81
+ Then { match.metadata == 1 }
82
+ Then { match.metadata_mask == 1 }
83
+ And { match.class == Pio::OpenFlow13::Match }
84
+ And { match.length == 24 }
85
+ And { match.match_type == Pio::OpenFlow13::MATCH_TYPE_OXM }
86
+ And { match.match_length == 24 }
87
+ And { match.match_fields.size == 1 }
88
+ And do
89
+ match.match_fields[0].oxm_class ==
90
+ Pio::OpenFlow13::Match::OXM_CLASS_OPENFLOW_BASIC
91
+ end
92
+ And do
93
+ match.match_fields[0].oxm_field ==
94
+ Pio::OpenFlow13::Match::Metadata::OXM_FIELD
95
+ end
96
+ And { match.match_fields[0].masked? == true }
97
+ And { match.match_fields[0].oxm_length == 16 }
98
+ end
99
+
55
100
  context "with ether_source_address: '01:02:03:04:05:06', ether_source_address_mask: 'ff:ff:ff:00:00:00'" do
56
101
  When(:match) do
57
102
  Pio::OpenFlow13::Match.new(ether_source_address: '01:02:03:04:05:06',
@@ -0,0 +1,12 @@
1
+ require 'pio/open_flow13/meter'
2
+
3
+ describe Pio::Meter do
4
+ describe '.new' do
5
+ When(:meter) { Pio::Meter.new(options) }
6
+
7
+ context 'with 1' do
8
+ Given(:options) { 1 }
9
+ Then { meter.meter_id == 1 }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,28 @@
1
+ require 'pio/open_flow13/write_metadata'
2
+
3
+ describe Pio::WriteMetadata do
4
+ describe '.new' do
5
+ When(:write_metadata) { Pio::WriteMetadata.new(options) }
6
+
7
+ context 'with metadata: 1' do
8
+ Given(:options) do
9
+ {
10
+ metadata: 0x1
11
+ }
12
+ end
13
+ Then { write_metadata.metadata == 1 }
14
+ Then { write_metadata.metadata_mask == 0 }
15
+ end
16
+
17
+ context 'with metadata: 1, metadata_mask: 1' do
18
+ Given(:options) do
19
+ {
20
+ metadata: 0x1,
21
+ metadata_mask: 0x1
22
+ }
23
+ end
24
+ Then { write_metadata.metadata == 1 }
25
+ Then { write_metadata.metadata_mask == 1 }
26
+ end
27
+ end
28
+ 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.1
4
+ version: 0.21.0
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-06-10 00:00:00.000000000 Z
11
+ date: 2015-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bindata
@@ -377,6 +377,7 @@ files:
377
377
  - README.md
378
378
  - Rakefile
379
379
  - bin/_guard-core
380
+ - bin/byebug
380
381
  - bin/cc-tddium-post-worker
381
382
  - bin/cdiff
382
383
  - bin/coderay
@@ -406,6 +407,7 @@ files:
406
407
  - bin/sparkr
407
408
  - bin/term_display
408
409
  - bin/term_mandel
410
+ - bin/terminal-notifier
409
411
  - bin/thor
410
412
  - bin/unparser
411
413
  - bin/yard
@@ -467,6 +469,23 @@ files:
467
469
  - features/open_flow10/table_stats_request.raw
468
470
  - features/open_flow10/vendor.raw
469
471
  - features/open_flow10/vendor_stats_request.raw
472
+ - features/open_flow13/action_copy_ttl_in.raw
473
+ - features/open_flow13/action_copy_ttl_out.raw
474
+ - features/open_flow13/action_dec_mpls_ttl.raw
475
+ - features/open_flow13/action_dec_nw_ttl.raw
476
+ - features/open_flow13/action_group.raw
477
+ - features/open_flow13/action_pop_mpls.raw
478
+ - features/open_flow13/action_pop_pbb.raw
479
+ - features/open_flow13/action_pop_vlan.raw
480
+ - features/open_flow13/action_push_mpls.raw
481
+ - features/open_flow13/action_push_pbb.raw
482
+ - features/open_flow13/action_push_vlan.raw
483
+ - features/open_flow13/action_set_field.raw
484
+ - features/open_flow13/action_set_mpls_ttl.raw
485
+ - features/open_flow13/action_set_nw_ttl.raw
486
+ - features/open_flow13/action_set_queue.raw
487
+ - features/open_flow13/apply_actions.feature
488
+ - features/open_flow13/apply_actions.raw
470
489
  - features/open_flow13/echo_reply.feature
471
490
  - features/open_flow13/echo_reply_body.raw
472
491
  - features/open_flow13/echo_reply_no_body.raw
@@ -477,10 +496,21 @@ files:
477
496
  - features/open_flow13/features_reply.raw
478
497
  - features/open_flow13/features_request.feature
479
498
  - features/open_flow13/features_request.raw
499
+ - features/open_flow13/flow_add_apply_no_match.raw
500
+ - features/open_flow13/flow_mod.feature
501
+ - features/open_flow13/flow_mod_add_apply_no_match.raw
502
+ - features/open_flow13/flow_mod_no_match_or_instructions.raw
503
+ - features/open_flow13/goto_table.feature
480
504
  - features/open_flow13/hello.feature
481
505
  - features/open_flow13/hello_no_version_bitmap.raw
482
506
  - features/open_flow13/hello_version_bitmap.raw
507
+ - features/open_flow13/instruction_clear_actions.raw
508
+ - features/open_flow13/instruction_goto_table.raw
509
+ - features/open_flow13/instruction_meter.raw
510
+ - features/open_flow13/instruction_write_actions.raw
511
+ - features/open_flow13/instruction_write_metadata.raw
483
512
  - features/open_flow13/match.feature
513
+ - features/open_flow13/meter.feature
484
514
  - features/open_flow13/oxm_ether_destination_field.raw
485
515
  - features/open_flow13/oxm_ether_source_field.raw
486
516
  - features/open_flow13/oxm_ether_type_field.raw
@@ -505,6 +535,9 @@ files:
505
535
  - features/open_flow13/oxm_udp_destination_field.raw
506
536
  - features/open_flow13/oxm_udp_field.raw
507
537
  - features/open_flow13/oxm_udp_source_field.raw
538
+ - features/open_flow13/send_out_port.feature
539
+ - features/open_flow13/send_out_port.raw
540
+ - features/open_flow13/write_metadata.feature
508
541
  - features/step_definitions/open_flow_steps.rb
509
542
  - features/step_definitions/packet_data_steps.rb
510
543
  - features/support/env.rb
@@ -562,36 +595,43 @@ files:
562
595
  - lib/pio/mac.rb
563
596
  - lib/pio/message_type_selector.rb
564
597
  - lib/pio/monkey_patch/integer.rb
598
+ - lib/pio/monkey_patch/integer/base_conversions.rb
565
599
  - lib/pio/monkey_patch/integer/ranges.rb
566
600
  - lib/pio/open_flow.rb
567
- - lib/pio/open_flow/actions.rb
568
601
  - lib/pio/open_flow/flags.rb
569
- - lib/pio/open_flow/message.rb
570
602
  - lib/pio/open_flow/open_flow_header.rb
571
603
  - lib/pio/open_flow/phy_port.rb
572
604
  - lib/pio/open_flow/port_number.rb
573
605
  - lib/pio/open_flow/transaction_id.rb
574
606
  - lib/pio/open_flow10.rb
607
+ - lib/pio/open_flow10/actions.rb
575
608
  - lib/pio/open_flow10/echo.rb
576
609
  - lib/pio/open_flow10/exact_match.rb
577
610
  - lib/pio/open_flow10/features.rb
578
611
  - lib/pio/open_flow10/flow_mod.rb
579
612
  - lib/pio/open_flow10/hello.rb
580
613
  - lib/pio/open_flow10/match.rb
614
+ - lib/pio/open_flow10/message.rb
581
615
  - lib/pio/open_flow10/packet_in.rb
582
616
  - lib/pio/open_flow10/packet_out.rb
583
617
  - lib/pio/open_flow10/port_status.rb
618
+ - lib/pio/open_flow10/send_out_port.rb
584
619
  - lib/pio/open_flow13.rb
620
+ - lib/pio/open_flow13/apply.rb
585
621
  - lib/pio/open_flow13/echo.rb
586
622
  - lib/pio/open_flow13/features_reply.rb
587
623
  - lib/pio/open_flow13/features_request.rb
624
+ - lib/pio/open_flow13/flow_mod.rb
625
+ - lib/pio/open_flow13/goto_table.rb
588
626
  - lib/pio/open_flow13/hello.rb
589
627
  - lib/pio/open_flow13/match.rb
628
+ - lib/pio/open_flow13/meter.rb
629
+ - lib/pio/open_flow13/send_out_port.rb
630
+ - lib/pio/open_flow13/write_metadata.rb
590
631
  - lib/pio/options.rb
591
632
  - lib/pio/parse_error.rb
592
633
  - lib/pio/payload.rb
593
634
  - lib/pio/pcap.rb
594
- - lib/pio/send_out_port.rb
595
635
  - lib/pio/set_ether_address.rb
596
636
  - lib/pio/set_ip_address.rb
597
637
  - lib/pio/set_ip_tos.rb
@@ -628,10 +668,13 @@ files:
628
668
  - spec/pio/match_spec.rb
629
669
  - spec/pio/open_flow/phy_port_spec.rb
630
670
  - spec/pio/open_flow/type_spec.rb
671
+ - spec/pio/open_flow10/send_out_port_spec.rb
672
+ - spec/pio/open_flow13/goto_table_spec.rb
631
673
  - spec/pio/open_flow13/hello_spec.rb
632
674
  - spec/pio/open_flow13/match_spec.rb
675
+ - spec/pio/open_flow13/meter_spec.rb
676
+ - spec/pio/open_flow13/write_metadata_spec.rb
633
677
  - spec/pio/packet_out_spec.rb
634
- - spec/pio/send_out_port_spec.rb
635
678
  - spec/pio/set_ether_destination_address_spec.rb
636
679
  - spec/pio/set_ether_source_address_spec.rb
637
680
  - spec/pio/set_ip_destination_address_spec.rb
@@ -664,146 +707,180 @@ required_rubygems_version: !ruby/object:Gem::Requirement
664
707
  version: '0'
665
708
  requirements: []
666
709
  rubyforge_project:
667
- rubygems_version: 2.4.7
710
+ rubygems_version: 2.4.6
668
711
  signing_key:
669
712
  specification_version: 4
670
713
  summary: Packet parser and generator.
671
714
  test_files:
672
- - spec/pio/set_vlan_vid_spec.rb
673
- - spec/pio/strip_vlan_header_spec.rb
674
- - spec/pio/set_transport_destination_port_spec.rb
675
- - spec/pio/ipv4_address_spec.rb
676
- - spec/pio/open_flow/type_spec.rb
677
- - spec/pio/open_flow/phy_port_spec.rb
678
- - spec/pio/enqueue_spec.rb
679
- - spec/pio/dhcp/request_spec.rb
680
- - spec/pio/dhcp/offer_spec.rb
681
- - spec/pio/dhcp/ack_spec.rb
682
- - spec/pio/dhcp/discover_spec.rb
683
- - spec/pio/arp/request_spec.rb
684
715
  - spec/pio/arp/reply/options_spec.rb
685
- - spec/pio/arp/request/options_spec.rb
686
716
  - spec/pio/arp/reply_spec.rb
687
- - spec/pio/set_ether_destination_address_spec.rb
717
+ - spec/pio/arp/request/options_spec.rb
718
+ - spec/pio/arp/request_spec.rb
719
+ - spec/pio/arp_spec.rb
720
+ - spec/pio/dhcp/ack_spec.rb
721
+ - spec/pio/dhcp/discover_spec.rb
722
+ - spec/pio/dhcp/offer_spec.rb
723
+ - spec/pio/dhcp/request_spec.rb
724
+ - spec/pio/dhcp_spec.rb
725
+ - spec/pio/enqueue_spec.rb
688
726
  - spec/pio/flow_mod_spec.rb
727
+ - spec/pio/icmp/reply_spec.rb
728
+ - spec/pio/icmp/request_spec.rb
729
+ - spec/pio/icmp_spec.rb
730
+ - spec/pio/ipv4_address_spec.rb
689
731
  - spec/pio/lldp/options_spec.rb
690
- - spec/pio/set_vlan_priority_spec.rb
732
+ - spec/pio/mac_spec.rb
733
+ - spec/pio/match_spec.rb
734
+ - spec/pio/open_flow/phy_port_spec.rb
735
+ - spec/pio/open_flow/type_spec.rb
736
+ - spec/pio/open_flow10/send_out_port_spec.rb
737
+ - spec/pio/open_flow13/goto_table_spec.rb
691
738
  - spec/pio/open_flow13/hello_spec.rb
692
739
  - spec/pio/open_flow13/match_spec.rb
693
- - spec/pio/mac_spec.rb
694
- - spec/pio/icmp/request_spec.rb
695
- - spec/pio/icmp/reply_spec.rb
696
- - spec/pio/icmp_spec.rb
697
- - spec/pio/wildcards_spec.rb
698
- - spec/pio/dhcp_spec.rb
699
- - spec/pio/set_ip_tos_spec.rb
700
- - spec/pio/send_out_port_spec.rb
740
+ - spec/pio/open_flow13/meter_spec.rb
741
+ - spec/pio/open_flow13/write_metadata_spec.rb
742
+ - spec/pio/packet_out_spec.rb
743
+ - spec/pio/set_ether_destination_address_spec.rb
701
744
  - spec/pio/set_ether_source_address_spec.rb
702
745
  - spec/pio/set_ip_destination_address_spec.rb
703
- - spec/pio/set_transport_source_port_spec.rb
704
- - spec/pio/arp_spec.rb
705
746
  - spec/pio/set_ip_source_address_spec.rb
706
- - spec/pio/match_spec.rb
707
- - spec/pio/packet_out_spec.rb
747
+ - spec/pio/set_ip_tos_spec.rb
748
+ - spec/pio/set_transport_destination_port_spec.rb
749
+ - spec/pio/set_transport_source_port_spec.rb
750
+ - spec/pio/set_vlan_priority_spec.rb
751
+ - spec/pio/set_vlan_vid_spec.rb
752
+ - spec/pio/strip_vlan_header_spec.rb
753
+ - spec/pio/wildcards_spec.rb
708
754
  - spec/spec_helper.rb
709
- - features/dhcp.pcap
710
- - features/udp_with_payload.raw
711
- - features/dhcp.feature
712
- - features/lldp.feature
755
+ - features/arp-storm.pcap
713
756
  - features/arp.feature
714
- - features/udp.feature
715
- - features/support/env.rb
716
757
  - features/arp.pcap
758
+ - features/dhcp.feature
759
+ - features/dhcp.pcap
760
+ - features/icmp.feature
761
+ - features/icmp.pcap
762
+ - features/lldp.detailed.pcap
763
+ - features/lldp.feature
764
+ - features/lldp.minimal.pcap
765
+ - features/open_flow10/aggregate_stats_reply.raw
766
+ - features/open_flow10/aggregate_stats_request.raw
767
+ - features/open_flow10/barrier_reply.raw
768
+ - features/open_flow10/barrier_request.raw
717
769
  - features/open_flow10/desc_stats_reply.raw
770
+ - features/open_flow10/desc_stats_request.raw
771
+ - features/open_flow10/echo_reply.feature
718
772
  - features/open_flow10/echo_reply.raw
719
- - features/open_flow10/packet_in.feature
720
- - features/open_flow10/flow_mod_modify_strict.raw
721
- - features/open_flow10/flow_mod_add.raw
773
+ - features/open_flow10/echo_request.feature
774
+ - features/open_flow10/echo_request.raw
775
+ - features/open_flow10/error.raw
776
+ - features/open_flow10/exact_match.feature
777
+ - features/open_flow10/features_reply.feature
722
778
  - features/open_flow10/features_reply.raw
723
779
  - features/open_flow10/features_request.feature
724
- - features/open_flow10/aggregate_stats_reply.raw
725
- - features/open_flow10/queue_get_config_reply.raw
726
- - features/open_flow10/echo_request.feature
727
780
  - features/open_flow10/features_request.raw
728
- - features/open_flow10/flow_stats_request.raw
729
- - features/open_flow10/packet_in_arp_request.raw
730
- - features/open_flow10/port_stats_request.raw
781
+ - features/open_flow10/flow_mod.feature
782
+ - features/open_flow10/flow_mod_add.raw
783
+ - features/open_flow10/flow_mod_delete.raw
731
784
  - features/open_flow10/flow_mod_delete_strict.raw
732
- - features/open_flow10/barrier_reply.raw
733
- - features/open_flow10/get_config_request.raw
734
- - features/open_flow10/vendor.raw
735
- - features/open_flow10/port_mod.raw
785
+ - features/open_flow10/flow_mod_modify.raw
786
+ - features/open_flow10/flow_mod_modify_strict.raw
787
+ - features/open_flow10/flow_removed.raw
788
+ - features/open_flow10/flow_stats_reply.raw
789
+ - features/open_flow10/flow_stats_request.raw
736
790
  - features/open_flow10/get_config_reply.raw
737
- - features/open_flow10/exact_match.feature
738
- - features/open_flow10/features_reply.feature
791
+ - features/open_flow10/get_config_request.raw
792
+ - features/open_flow10/hello.feature
739
793
  - features/open_flow10/hello.raw
740
- - features/open_flow10/flow_removed.raw
741
- - features/open_flow10/set_config.raw
742
- - features/open_flow10/port_stats_reply.raw
794
+ - features/open_flow10/packet_in.feature
795
+ - features/open_flow10/packet_in_arp_request.raw
796
+ - features/open_flow10/packet_in_cbench.raw
797
+ - features/open_flow10/packet_out.feature
743
798
  - features/open_flow10/packet_out.raw
744
- - features/open_flow10/table_stats_reply.raw
799
+ - features/open_flow10/port_mod.raw
800
+ - features/open_flow10/port_stats_reply.raw
801
+ - features/open_flow10/port_stats_request.raw
745
802
  - features/open_flow10/port_status.feature
746
- - features/open_flow10/packet_in_cbench.raw
803
+ - features/open_flow10/port_status.raw
804
+ - features/open_flow10/queue_get_config_reply.raw
747
805
  - features/open_flow10/queue_get_config_request.raw
748
- - features/open_flow10/error.raw
749
- - features/open_flow10/vendor_stats_request.raw
750
- - features/open_flow10/flow_mod.feature
751
- - features/open_flow10/packet_out.feature
752
- - features/open_flow10/echo_reply.feature
753
- - features/open_flow10/flow_stats_reply.raw
754
- - features/open_flow10/desc_stats_request.raw
755
- - features/open_flow10/hello.feature
756
- - features/open_flow10/barrier_request.raw
806
+ - features/open_flow10/set_config.raw
807
+ - features/open_flow10/table_stats_reply.raw
757
808
  - features/open_flow10/table_stats_request.raw
758
- - features/open_flow10/port_status.raw
759
- - features/open_flow10/flow_mod_modify.raw
760
- - features/open_flow10/flow_mod_delete.raw
761
- - features/open_flow10/aggregate_stats_request.raw
762
- - features/open_flow10/echo_request.raw
763
- - features/lldp.minimal.pcap
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
767
- - features/open_flow13/hello_version_bitmap.raw
809
+ - features/open_flow10/vendor.raw
810
+ - features/open_flow10/vendor_stats_request.raw
811
+ - features/open_flow13/action_copy_ttl_in.raw
812
+ - features/open_flow13/action_copy_ttl_out.raw
813
+ - features/open_flow13/action_dec_mpls_ttl.raw
814
+ - features/open_flow13/action_dec_nw_ttl.raw
815
+ - features/open_flow13/action_group.raw
816
+ - features/open_flow13/action_pop_mpls.raw
817
+ - features/open_flow13/action_pop_pbb.raw
818
+ - features/open_flow13/action_pop_vlan.raw
819
+ - features/open_flow13/action_push_mpls.raw
820
+ - features/open_flow13/action_push_pbb.raw
821
+ - features/open_flow13/action_push_vlan.raw
822
+ - features/open_flow13/action_set_field.raw
823
+ - features/open_flow13/action_set_mpls_ttl.raw
824
+ - features/open_flow13/action_set_nw_ttl.raw
825
+ - features/open_flow13/action_set_queue.raw
826
+ - features/open_flow13/apply_actions.feature
827
+ - features/open_flow13/apply_actions.raw
828
+ - features/open_flow13/echo_reply.feature
768
829
  - features/open_flow13/echo_reply_body.raw
830
+ - features/open_flow13/echo_reply_no_body.raw
831
+ - features/open_flow13/echo_request.feature
832
+ - features/open_flow13/echo_request_body.raw
833
+ - features/open_flow13/echo_request_no_body.raw
834
+ - features/open_flow13/features_reply.feature
769
835
  - features/open_flow13/features_reply.raw
770
836
  - 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
774
- - features/open_flow13/echo_request.feature
775
837
  - features/open_flow13/features_request.raw
776
- - features/open_flow13/oxm_masked_ipv6_destination_field.raw
777
- - features/open_flow13/oxm_udp_field.raw
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
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
838
+ - features/open_flow13/flow_add_apply_no_match.raw
839
+ - features/open_flow13/flow_mod.feature
840
+ - features/open_flow13/flow_mod_add_apply_no_match.raw
841
+ - features/open_flow13/flow_mod_no_match_or_instructions.raw
842
+ - features/open_flow13/goto_table.feature
843
+ - features/open_flow13/hello.feature
844
+ - features/open_flow13/hello_no_version_bitmap.raw
845
+ - features/open_flow13/hello_version_bitmap.raw
846
+ - features/open_flow13/instruction_clear_actions.raw
847
+ - features/open_flow13/instruction_goto_table.raw
848
+ - features/open_flow13/instruction_meter.raw
849
+ - features/open_flow13/instruction_write_actions.raw
850
+ - features/open_flow13/instruction_write_metadata.raw
787
851
  - features/open_flow13/match.feature
788
- - features/open_flow13/oxm_udp_source_field.raw
789
- - features/open_flow13/echo_request_no_body.raw
790
- - features/open_flow13/oxm_masked_ipv6_source_field.raw
852
+ - features/open_flow13/meter.feature
853
+ - features/open_flow13/oxm_ether_destination_field.raw
854
+ - features/open_flow13/oxm_ether_source_field.raw
855
+ - features/open_flow13/oxm_ether_type_field.raw
856
+ - features/open_flow13/oxm_in_phy_port_field.raw
857
+ - features/open_flow13/oxm_in_port_field.raw
858
+ - features/open_flow13/oxm_ipv4_destination_field.raw
859
+ - features/open_flow13/oxm_ipv4_source_field.raw
860
+ - features/open_flow13/oxm_ipv6_destination_field.raw
791
861
  - features/open_flow13/oxm_ipv6_source_field.raw
862
+ - features/open_flow13/oxm_masked_ether_destination_field.raw
863
+ - features/open_flow13/oxm_masked_ether_source_field.raw
792
864
  - features/open_flow13/oxm_masked_ipv4_destination_field.raw
793
- - features/open_flow13/echo_reply.feature
865
+ - features/open_flow13/oxm_masked_ipv4_source_field.raw
866
+ - features/open_flow13/oxm_masked_ipv6_destination_field.raw
867
+ - features/open_flow13/oxm_masked_ipv6_source_field.raw
794
868
  - features/open_flow13/oxm_metadata_field.raw
795
869
  - features/open_flow13/oxm_metadata_masked_field.raw
796
- - features/open_flow13/oxm_ipv4_destination_field.raw
870
+ - features/open_flow13/oxm_no_fields.raw
871
+ - features/open_flow13/oxm_tcp_destination_field.raw
872
+ - features/open_flow13/oxm_tcp_field.raw
873
+ - features/open_flow13/oxm_tcp_source_field.raw
797
874
  - features/open_flow13/oxm_udp_destination_field.raw
798
- - features/open_flow13/hello.feature
799
- - features/open_flow13/oxm_ether_source_field.raw
800
- - features/open_flow13/hello_no_version_bitmap.raw
801
- - features/open_flow13/oxm_ether_destination_field.raw
802
- - features/step_definitions/packet_data_steps.rb
875
+ - features/open_flow13/oxm_udp_field.raw
876
+ - features/open_flow13/oxm_udp_source_field.raw
877
+ - features/open_flow13/send_out_port.feature
878
+ - features/open_flow13/send_out_port.raw
879
+ - features/open_flow13/write_metadata.feature
803
880
  - features/step_definitions/open_flow_steps.rb
804
- - features/icmp.pcap
805
- - features/arp-storm.pcap
881
+ - features/step_definitions/packet_data_steps.rb
882
+ - features/support/env.rb
883
+ - features/udp.feature
806
884
  - features/udp_no_payload.raw
807
- - features/icmp.feature
808
- - features/lldp.detailed.pcap
885
+ - features/udp_with_payload.raw
809
886
  has_rdoc: