pio 0.9.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +36 -0
- data/examples/packet_out_new.rb +18 -0
- data/examples/packet_out_read.rb +6 -0
- data/features/packet_out_read.feature +5 -0
- data/lib/pio.rb +1 -0
- data/lib/pio/echo.rb +5 -6
- data/lib/pio/echo/message.rb +39 -13
- data/lib/pio/echo/reply.rb +1 -6
- data/lib/pio/echo/request.rb +3 -5
- data/lib/pio/enqueue.rb +62 -0
- data/lib/pio/features.rb +5 -15
- data/lib/pio/features/reply.rb +28 -48
- data/lib/pio/features/request.rb +11 -8
- data/lib/pio/hello.rb +24 -2
- data/lib/pio/monkey_patch/integer.rb +6 -0
- data/lib/pio/monkey_patch/integer/ranges.rb +22 -0
- data/lib/pio/open_flow.rb +1 -0
- data/lib/pio/open_flow/flags.rb +40 -26
- data/lib/pio/open_flow/message.rb +28 -0
- data/lib/pio/open_flow/parser.rb +22 -0
- data/lib/pio/open_flow/phy_port.rb +34 -50
- data/lib/pio/open_flow/port_number.rb +39 -0
- data/lib/pio/open_flow/type.rb +1 -0
- data/lib/pio/packet_in.rb +42 -9
- data/lib/pio/packet_out.rb +102 -0
- data/lib/pio/send_out_port.rb +74 -0
- data/lib/pio/set_eth_addr.rb +52 -0
- data/lib/pio/set_ip_addr.rb +49 -0
- data/lib/pio/set_ip_tos.rb +42 -0
- data/lib/pio/set_transport_port.rb +58 -0
- data/lib/pio/set_vlan.rb +37 -0
- data/lib/pio/set_vlan_priority.rb +18 -0
- data/lib/pio/set_vlan_vid.rb +30 -0
- data/lib/pio/strip_vlan_header.rb +19 -0
- data/lib/pio/type/ip_address.rb +11 -2
- data/lib/pio/type/ipv4_header.rb +1 -0
- data/lib/pio/type/mac_address.rb +2 -0
- data/lib/pio/version.rb +1 -1
- data/pio.gemspec +4 -4
- data/spec/pio/echo/reply_spec.rb +1 -4
- data/spec/pio/echo/request_spec.rb +5 -8
- data/spec/pio/enqueue_spec.rb +67 -0
- data/spec/pio/features/request_spec.rb +4 -4
- data/spec/pio/features_spec.rb +1 -2
- data/spec/pio/hello_spec.rb +1 -4
- data/spec/pio/packet_out_spec.rb +290 -0
- data/spec/pio/send_out_port_spec.rb +121 -0
- data/spec/pio/set_eth_dst_addr_spec.rb +28 -0
- data/spec/pio/set_eth_src_addr_spec.rb +28 -0
- data/spec/pio/set_ip_dst_addr_spec.rb +25 -0
- data/spec/pio/set_ip_src_addr_spec.rb +25 -0
- data/spec/pio/set_ip_tos_spec.rb +30 -0
- data/spec/pio/set_transport_dst_port_spec.rb +42 -0
- data/spec/pio/set_transport_src_port_spec.rb +42 -0
- data/spec/pio/set_vlan_priority_spec.rb +42 -0
- data/spec/pio/set_vlan_vid_spec.rb +42 -0
- data/spec/pio/strip_vlan_header_spec.rb +20 -0
- metadata +55 -13
- data/lib/pio/echo/format.rb +0 -22
- data/lib/pio/hello/format.rb +0 -18
- 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.
|
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:
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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/
|
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
|
data/lib/pio/echo/format.rb
DELETED
@@ -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
|
data/lib/pio/hello/format.rb
DELETED
@@ -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
|
data/lib/pio/packet_in/format.rb
DELETED
@@ -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
|