pio 0.9.0 → 0.10.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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +36 -0
  4. data/examples/packet_out_new.rb +18 -0
  5. data/examples/packet_out_read.rb +6 -0
  6. data/features/packet_out_read.feature +5 -0
  7. data/lib/pio.rb +1 -0
  8. data/lib/pio/echo.rb +5 -6
  9. data/lib/pio/echo/message.rb +39 -13
  10. data/lib/pio/echo/reply.rb +1 -6
  11. data/lib/pio/echo/request.rb +3 -5
  12. data/lib/pio/enqueue.rb +62 -0
  13. data/lib/pio/features.rb +5 -15
  14. data/lib/pio/features/reply.rb +28 -48
  15. data/lib/pio/features/request.rb +11 -8
  16. data/lib/pio/hello.rb +24 -2
  17. data/lib/pio/monkey_patch/integer.rb +6 -0
  18. data/lib/pio/monkey_patch/integer/ranges.rb +22 -0
  19. data/lib/pio/open_flow.rb +1 -0
  20. data/lib/pio/open_flow/flags.rb +40 -26
  21. data/lib/pio/open_flow/message.rb +28 -0
  22. data/lib/pio/open_flow/parser.rb +22 -0
  23. data/lib/pio/open_flow/phy_port.rb +34 -50
  24. data/lib/pio/open_flow/port_number.rb +39 -0
  25. data/lib/pio/open_flow/type.rb +1 -0
  26. data/lib/pio/packet_in.rb +42 -9
  27. data/lib/pio/packet_out.rb +102 -0
  28. data/lib/pio/send_out_port.rb +74 -0
  29. data/lib/pio/set_eth_addr.rb +52 -0
  30. data/lib/pio/set_ip_addr.rb +49 -0
  31. data/lib/pio/set_ip_tos.rb +42 -0
  32. data/lib/pio/set_transport_port.rb +58 -0
  33. data/lib/pio/set_vlan.rb +37 -0
  34. data/lib/pio/set_vlan_priority.rb +18 -0
  35. data/lib/pio/set_vlan_vid.rb +30 -0
  36. data/lib/pio/strip_vlan_header.rb +19 -0
  37. data/lib/pio/type/ip_address.rb +11 -2
  38. data/lib/pio/type/ipv4_header.rb +1 -0
  39. data/lib/pio/type/mac_address.rb +2 -0
  40. data/lib/pio/version.rb +1 -1
  41. data/pio.gemspec +4 -4
  42. data/spec/pio/echo/reply_spec.rb +1 -4
  43. data/spec/pio/echo/request_spec.rb +5 -8
  44. data/spec/pio/enqueue_spec.rb +67 -0
  45. data/spec/pio/features/request_spec.rb +4 -4
  46. data/spec/pio/features_spec.rb +1 -2
  47. data/spec/pio/hello_spec.rb +1 -4
  48. data/spec/pio/packet_out_spec.rb +290 -0
  49. data/spec/pio/send_out_port_spec.rb +121 -0
  50. data/spec/pio/set_eth_dst_addr_spec.rb +28 -0
  51. data/spec/pio/set_eth_src_addr_spec.rb +28 -0
  52. data/spec/pio/set_ip_dst_addr_spec.rb +25 -0
  53. data/spec/pio/set_ip_src_addr_spec.rb +25 -0
  54. data/spec/pio/set_ip_tos_spec.rb +30 -0
  55. data/spec/pio/set_transport_dst_port_spec.rb +42 -0
  56. data/spec/pio/set_transport_src_port_spec.rb +42 -0
  57. data/spec/pio/set_vlan_priority_spec.rb +42 -0
  58. data/spec/pio/set_vlan_vid_spec.rb +42 -0
  59. data/spec/pio/strip_vlan_header_spec.rb +20 -0
  60. metadata +55 -13
  61. data/lib/pio/echo/format.rb +0 -22
  62. data/lib/pio/hello/format.rb +0 -18
  63. data/lib/pio/packet_in/format.rb +0 -55
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.9.0
4
+ version: 0.10.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: 2014-12-22 00:00:00.000000000 Z
11
+ date: 2015-01-06 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.7.9
47
+ version: 1.7.11
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.7.9
54
+ version: 1.7.11
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.10.4
75
+ version: 2.10.5
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.10.4
82
+ version: 2.10.5
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: guard-bundler
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -226,14 +226,14 @@ dependencies:
226
226
  requirements:
227
227
  - - ~>
228
228
  - !ruby/object:Gem::Version
229
- version: 0.4.3
229
+ version: 0.4.4
230
230
  type: :development
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - ~>
235
235
  - !ruby/object:Gem::Version
236
- version: 0.4.3
236
+ version: 0.4.4
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: coveralls
239
239
  requirement: !ruby/object:Gem::Requirement
@@ -254,14 +254,14 @@ dependencies:
254
254
  requirements:
255
255
  - - ~>
256
256
  - !ruby/object:Gem::Version
257
- version: 1.3.17
257
+ version: 1.3.18
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: 1.3.17
264
+ version: 1.3.18
265
265
  - !ruby/object:Gem::Dependency
266
266
  name: flay
267
267
  requirement: !ruby/object:Gem::Requirement
@@ -378,6 +378,8 @@ files:
378
378
  - examples/lldp_read.rb
379
379
  - examples/packet_in_new.rb
380
380
  - examples/packet_in_read.rb
381
+ - examples/packet_out_new.rb
382
+ - examples/packet_out_read.rb
381
383
  - features/arp_read.feature
382
384
  - features/dhcp_read.feature
383
385
  - features/echo_read.feature
@@ -425,6 +427,7 @@ files:
425
427
  - features/packet_data/vendor.raw
426
428
  - features/packet_data/vendor_stats_request.raw
427
429
  - features/packet_in_read.feature
430
+ - features/packet_out_read.feature
428
431
  - features/step_definitions/packet_data_steps.rb
429
432
  - features/step_definitions/pending_steps.rb
430
433
  - features/support/env.rb
@@ -454,15 +457,14 @@ files:
454
457
  - lib/pio/dhcp/parameter_list.rb
455
458
  - lib/pio/dhcp/request.rb
456
459
  - lib/pio/echo.rb
457
- - lib/pio/echo/format.rb
458
460
  - lib/pio/echo/message.rb
459
461
  - lib/pio/echo/reply.rb
460
462
  - lib/pio/echo/request.rb
463
+ - lib/pio/enqueue.rb
461
464
  - lib/pio/features.rb
462
465
  - lib/pio/features/reply.rb
463
466
  - lib/pio/features/request.rb
464
467
  - lib/pio/hello.rb
465
- - lib/pio/hello/format.rb
466
468
  - lib/pio/icmp.rb
467
469
  - lib/pio/icmp/format.rb
468
470
  - lib/pio/icmp/message.rb
@@ -486,17 +488,30 @@ files:
486
488
  - lib/pio/lldp/ttl_tlv.rb
487
489
  - lib/pio/mac.rb
488
490
  - lib/pio/message_type_selector.rb
491
+ - lib/pio/monkey_patch/integer.rb
492
+ - lib/pio/monkey_patch/integer/ranges.rb
489
493
  - lib/pio/open_flow.rb
490
494
  - lib/pio/open_flow/flags.rb
491
495
  - lib/pio/open_flow/message.rb
492
496
  - lib/pio/open_flow/open_flow_header.rb
497
+ - lib/pio/open_flow/parser.rb
493
498
  - lib/pio/open_flow/phy_port.rb
499
+ - lib/pio/open_flow/port_number.rb
494
500
  - lib/pio/open_flow/type.rb
495
501
  - lib/pio/options.rb
496
502
  - lib/pio/packet_in.rb
497
- - lib/pio/packet_in/format.rb
503
+ - lib/pio/packet_out.rb
498
504
  - lib/pio/parse_error.rb
499
505
  - lib/pio/pcap.rb
506
+ - lib/pio/send_out_port.rb
507
+ - lib/pio/set_eth_addr.rb
508
+ - lib/pio/set_ip_addr.rb
509
+ - lib/pio/set_ip_tos.rb
510
+ - lib/pio/set_transport_port.rb
511
+ - lib/pio/set_vlan.rb
512
+ - lib/pio/set_vlan_priority.rb
513
+ - lib/pio/set_vlan_vid.rb
514
+ - lib/pio/strip_vlan_header.rb
500
515
  - lib/pio/type/ethernet_header.rb
501
516
  - lib/pio/type/ip_address.rb
502
517
  - lib/pio/type/ipv4_header.rb
@@ -517,6 +532,7 @@ files:
517
532
  - spec/pio/echo/reply_spec.rb
518
533
  - spec/pio/echo/request_spec.rb
519
534
  - spec/pio/echo_spec.rb
535
+ - spec/pio/enqueue_spec.rb
520
536
  - spec/pio/features/reply_spec.rb
521
537
  - spec/pio/features/request_spec.rb
522
538
  - spec/pio/features_spec.rb
@@ -531,6 +547,18 @@ files:
531
547
  - spec/pio/open_flow/phy_port_spec.rb
532
548
  - spec/pio/open_flow/type_spec.rb
533
549
  - spec/pio/packet_in_spec.rb
550
+ - spec/pio/packet_out_spec.rb
551
+ - spec/pio/send_out_port_spec.rb
552
+ - spec/pio/set_eth_dst_addr_spec.rb
553
+ - spec/pio/set_eth_src_addr_spec.rb
554
+ - spec/pio/set_ip_dst_addr_spec.rb
555
+ - spec/pio/set_ip_src_addr_spec.rb
556
+ - spec/pio/set_ip_tos_spec.rb
557
+ - spec/pio/set_transport_dst_port_spec.rb
558
+ - spec/pio/set_transport_src_port_spec.rb
559
+ - spec/pio/set_vlan_priority_spec.rb
560
+ - spec/pio/set_vlan_vid_spec.rb
561
+ - spec/pio/strip_vlan_header_spec.rb
534
562
  - spec/spec_helper.rb
535
563
  homepage: http://github.com/trema/pio
536
564
  licenses:
@@ -570,6 +598,7 @@ test_files:
570
598
  - spec/pio/echo/reply_spec.rb
571
599
  - spec/pio/echo/request_spec.rb
572
600
  - spec/pio/echo_spec.rb
601
+ - spec/pio/enqueue_spec.rb
573
602
  - spec/pio/features/reply_spec.rb
574
603
  - spec/pio/features/request_spec.rb
575
604
  - spec/pio/features_spec.rb
@@ -584,6 +613,18 @@ test_files:
584
613
  - spec/pio/open_flow/phy_port_spec.rb
585
614
  - spec/pio/open_flow/type_spec.rb
586
615
  - spec/pio/packet_in_spec.rb
616
+ - spec/pio/packet_out_spec.rb
617
+ - spec/pio/send_out_port_spec.rb
618
+ - spec/pio/set_eth_dst_addr_spec.rb
619
+ - spec/pio/set_eth_src_addr_spec.rb
620
+ - spec/pio/set_ip_dst_addr_spec.rb
621
+ - spec/pio/set_ip_src_addr_spec.rb
622
+ - spec/pio/set_ip_tos_spec.rb
623
+ - spec/pio/set_transport_dst_port_spec.rb
624
+ - spec/pio/set_transport_src_port_spec.rb
625
+ - spec/pio/set_vlan_priority_spec.rb
626
+ - spec/pio/set_vlan_vid_spec.rb
627
+ - spec/pio/strip_vlan_header_spec.rb
587
628
  - spec/spec_helper.rb
588
629
  - features/arp_read.feature
589
630
  - features/dhcp_read.feature
@@ -632,6 +673,7 @@ test_files:
632
673
  - features/packet_data/vendor.raw
633
674
  - features/packet_data/vendor_stats_request.raw
634
675
  - features/packet_in_read.feature
676
+ - features/packet_out_read.feature
635
677
  - features/step_definitions/packet_data_steps.rb
636
678
  - features/step_definitions/pending_steps.rb
637
679
  - features/support/env.rb
@@ -1,22 +0,0 @@
1
- require 'bindata'
2
- require 'pio/open_flow'
3
-
4
- module Pio
5
- class Echo
6
- # OpenFlow 1.0 Echo request and reply message parser.
7
- class Format < BinData::Record
8
- include Pio::OpenFlow::Type
9
-
10
- def message_type
11
- open_flow_header.message_type
12
- end
13
-
14
- endian :big
15
-
16
- open_flow_header :open_flow_header
17
- virtual assert: -> { [ECHO_REQUEST, ECHO_REPLY].include?(message_type) }
18
-
19
- string :body
20
- end
21
- end
22
- end
@@ -1,18 +0,0 @@
1
- require 'bindata'
2
- require 'pio/open_flow'
3
-
4
- module Pio
5
- class Hello < Pio::OpenFlow::Message
6
- # OpenFlow 1.0 Hello message parser and generator.
7
- class Format < BinData::Record
8
- include Pio::OpenFlow::Type
9
-
10
- endian :big
11
-
12
- open_flow_header :open_flow_header, message_type_value: HELLO
13
- virtual assert: -> { open_flow_header.message_type == HELLO }
14
-
15
- string :body # ignored
16
- end
17
- end
18
- end
@@ -1,55 +0,0 @@
1
- require 'bindata'
2
- require 'pio/open_flow'
3
-
4
- module Pio
5
- class PacketIn < Pio::OpenFlow::Message
6
- # Why is this packet being sent to the controller?
7
- # (enum ofp_packet_in_reason)
8
- class Reason < BinData::Primitive
9
- REASONS = { no_match: 0, action: 1 }
10
-
11
- uint8 :reason
12
-
13
- def get
14
- REASONS.invert.fetch(reason)
15
- end
16
-
17
- def set(value)
18
- self.reason = REASONS.fetch(value)
19
- end
20
- end
21
-
22
- # Message body of Packet-In.
23
- class Body < BinData::Record
24
- endian :big
25
-
26
- uint32 :buffer_id
27
- uint16 :total_len, value: -> { data.length }
28
- uint16 :in_port
29
- reason :reason
30
- uint8 :padding
31
- hide :padding
32
- string :data, read_length: :total_len
33
-
34
- def empty?
35
- false
36
- end
37
-
38
- def length
39
- 10 + data.length
40
- end
41
- end
42
-
43
- # OpenFlow 1.0 Packet-In message parser and generator.
44
- class Format < BinData::Record
45
- include Pio::OpenFlow::Type
46
-
47
- endian :big
48
-
49
- open_flow_header :open_flow_header, message_type_value: PACKET_IN
50
- virtual assert: -> { open_flow_header.message_type == PACKET_IN }
51
-
52
- body :body
53
- end
54
- end
55
- end