pio 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
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