pio 0.15.2 → 0.16.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/features/dhcp_read.feature +1 -0
- data/features/icmp_read.feature +50 -0
- data/features/step_definitions/packet_data_steps.rb +15 -1
- data/features/udp_read.feature +29 -0
- data/lib/pio.rb +1 -0
- data/lib/pio/arp/format.rb +2 -2
- data/lib/pio/dhcp/boot_reply_options.rb +2 -2
- data/lib/pio/dhcp/boot_request_options.rb +2 -2
- data/lib/pio/dhcp/frame.rb +16 -71
- data/lib/pio/dhcp/message.rb +2 -2
- data/lib/pio/ethernet_header.rb +40 -0
- data/lib/pio/exact_match.rb +0 -1
- data/lib/pio/icmp/format.rb +23 -97
- data/lib/pio/icmp/message.rb +5 -27
- data/lib/pio/icmp/options.rb +0 -2
- data/lib/pio/icmp/reply.rb +2 -1
- data/lib/pio/icmp/request.rb +15 -30
- data/lib/pio/ipv4_header.rb +64 -0
- data/lib/pio/lldp/frame.rb +2 -2
- data/lib/pio/packet_in.rb +5 -5
- data/lib/pio/payload.rb +11 -0
- data/lib/pio/type/ip_address.rb +8 -0
- data/lib/pio/udp.rb +19 -0
- data/lib/pio/udp_header.rb +56 -0
- data/lib/pio/version.rb +1 -1
- data/spec/pio/dhcp_spec.rb +16 -16
- data/spec/pio/icmp/request_spec.rb +23 -4
- metadata +86 -83
- data/lib/pio/dhcp/csum_util.rb +0 -81
- data/lib/pio/type/ethernet_header.rb +0 -43
- data/lib/pio/type/ipv4_header.rb +0 -33
- data/lib/pio/type/udp_header.rb +0 -15
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.16.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-02
|
11
|
+
date: 2015-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bindata
|
@@ -439,6 +439,7 @@ files:
|
|
439
439
|
- features/step_definitions/packet_data_steps.rb
|
440
440
|
- features/step_definitions/pending_steps.rb
|
441
441
|
- features/support/env.rb
|
442
|
+
- features/udp_read.feature
|
442
443
|
- lib/pio.rb
|
443
444
|
- lib/pio/arp.rb
|
444
445
|
- lib/pio/arp/format.rb
|
@@ -453,7 +454,6 @@ files:
|
|
453
454
|
- lib/pio/dhcp/boot_request_options.rb
|
454
455
|
- lib/pio/dhcp/client_id.rb
|
455
456
|
- lib/pio/dhcp/common_options.rb
|
456
|
-
- lib/pio/dhcp/csum_util.rb
|
457
457
|
- lib/pio/dhcp/dhcp_field.rb
|
458
458
|
- lib/pio/dhcp/dhcp_tlv_options.rb
|
459
459
|
- lib/pio/dhcp/discover.rb
|
@@ -466,6 +466,7 @@ files:
|
|
466
466
|
- lib/pio/dhcp/request.rb
|
467
467
|
- lib/pio/echo.rb
|
468
468
|
- lib/pio/enqueue.rb
|
469
|
+
- lib/pio/ethernet_header.rb
|
469
470
|
- lib/pio/exact_match.rb
|
470
471
|
- lib/pio/features.rb
|
471
472
|
- lib/pio/flow_mod.rb
|
@@ -477,6 +478,7 @@ files:
|
|
477
478
|
- lib/pio/icmp/reply.rb
|
478
479
|
- lib/pio/icmp/request.rb
|
479
480
|
- lib/pio/ipv4_address.rb
|
481
|
+
- lib/pio/ipv4_header.rb
|
480
482
|
- lib/pio/lldp.rb
|
481
483
|
- lib/pio/lldp/chassis_id_tlv.rb
|
482
484
|
- lib/pio/lldp/end_of_lldpdu_value.rb
|
@@ -507,6 +509,7 @@ files:
|
|
507
509
|
- lib/pio/packet_in.rb
|
508
510
|
- lib/pio/packet_out.rb
|
509
511
|
- lib/pio/parse_error.rb
|
512
|
+
- lib/pio/payload.rb
|
510
513
|
- lib/pio/pcap.rb
|
511
514
|
- lib/pio/port_status.rb
|
512
515
|
- lib/pio/send_out_port.rb
|
@@ -518,11 +521,10 @@ files:
|
|
518
521
|
- lib/pio/set_vlan_priority.rb
|
519
522
|
- lib/pio/set_vlan_vid.rb
|
520
523
|
- lib/pio/strip_vlan_header.rb
|
521
|
-
- lib/pio/type/ethernet_header.rb
|
522
524
|
- lib/pio/type/ip_address.rb
|
523
|
-
- lib/pio/type/ipv4_header.rb
|
524
525
|
- lib/pio/type/mac_address.rb
|
525
|
-
- lib/pio/
|
526
|
+
- lib/pio/udp.rb
|
527
|
+
- lib/pio/udp_header.rb
|
526
528
|
- lib/pio/version.rb
|
527
529
|
- pio.gemspec
|
528
530
|
- spec/pio/arp/reply/options_spec.rb
|
@@ -587,108 +589,109 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
587
589
|
version: '0'
|
588
590
|
requirements: []
|
589
591
|
rubyforge_project:
|
590
|
-
rubygems_version: 2.4.
|
592
|
+
rubygems_version: 2.4.6
|
591
593
|
signing_key:
|
592
594
|
specification_version: 4
|
593
595
|
summary: Packet parser and generator.
|
594
596
|
test_files:
|
595
|
-
- spec/pio/set_eth_src_addr_spec.rb
|
596
|
-
- spec/pio/features/request_spec.rb
|
597
|
-
- spec/pio/features/reply_spec.rb
|
598
|
-
- spec/pio/set_vlan_vid_spec.rb
|
599
|
-
- spec/pio/set_transport_dst_port_spec.rb
|
600
|
-
- spec/pio/strip_vlan_header_spec.rb
|
601
|
-
- spec/pio/ipv4_address_spec.rb
|
602
|
-
- spec/pio/open_flow/type_spec.rb
|
603
|
-
- spec/pio/open_flow/phy_port_spec.rb
|
604
|
-
- spec/pio/enqueue_spec.rb
|
605
|
-
- spec/pio/hello_spec.rb
|
606
|
-
- spec/pio/set_ip_src_addr_spec.rb
|
607
|
-
- spec/pio/dhcp/request_spec.rb
|
608
|
-
- spec/pio/dhcp/offer_spec.rb
|
609
|
-
- spec/pio/dhcp/ack_spec.rb
|
610
|
-
- spec/pio/dhcp/discover_spec.rb
|
611
|
-
- spec/pio/set_transport_src_port_spec.rb
|
612
|
-
- spec/pio/arp/request_spec.rb
|
613
597
|
- spec/pio/arp/reply/options_spec.rb
|
614
|
-
- spec/pio/arp/request/options_spec.rb
|
615
598
|
- spec/pio/arp/reply_spec.rb
|
599
|
+
- spec/pio/arp/request/options_spec.rb
|
600
|
+
- spec/pio/arp/request_spec.rb
|
601
|
+
- spec/pio/arp_spec.rb
|
602
|
+
- spec/pio/dhcp/ack_spec.rb
|
603
|
+
- spec/pio/dhcp/discover_spec.rb
|
604
|
+
- spec/pio/dhcp/offer_spec.rb
|
605
|
+
- spec/pio/dhcp/request_spec.rb
|
606
|
+
- spec/pio/dhcp_spec.rb
|
607
|
+
- spec/pio/echo/reply_spec.rb
|
608
|
+
- spec/pio/echo/request_spec.rb
|
609
|
+
- spec/pio/enqueue_spec.rb
|
610
|
+
- spec/pio/features/reply_spec.rb
|
611
|
+
- spec/pio/features/request_spec.rb
|
616
612
|
- spec/pio/flow_mod_spec.rb
|
617
|
-
- spec/pio/
|
618
|
-
- spec/pio/set_vlan_priority_spec.rb
|
619
|
-
- spec/pio/set_ip_dst_addr_spec.rb
|
620
|
-
- spec/pio/mac_spec.rb
|
621
|
-
- spec/pio/icmp/request_spec.rb
|
613
|
+
- spec/pio/hello_spec.rb
|
622
614
|
- spec/pio/icmp/reply_spec.rb
|
615
|
+
- spec/pio/icmp/request_spec.rb
|
623
616
|
- spec/pio/icmp_spec.rb
|
624
|
-
- spec/pio/
|
625
|
-
- spec/pio/
|
626
|
-
- spec/pio/set_ip_tos_spec.rb
|
627
|
-
- spec/pio/send_out_port_spec.rb
|
628
|
-
- spec/pio/packet_in_spec.rb
|
617
|
+
- spec/pio/ipv4_address_spec.rb
|
618
|
+
- spec/pio/lldp/options_spec.rb
|
629
619
|
- spec/pio/lldp_spec.rb
|
630
|
-
- spec/pio/
|
631
|
-
- spec/pio/echo/request_spec.rb
|
632
|
-
- spec/pio/echo/reply_spec.rb
|
633
|
-
- spec/pio/set_eth_dst_addr_spec.rb
|
620
|
+
- spec/pio/mac_spec.rb
|
634
621
|
- spec/pio/match_spec.rb
|
622
|
+
- spec/pio/open_flow/phy_port_spec.rb
|
623
|
+
- spec/pio/open_flow/type_spec.rb
|
624
|
+
- spec/pio/packet_in_spec.rb
|
635
625
|
- spec/pio/packet_out_spec.rb
|
626
|
+
- spec/pio/send_out_port_spec.rb
|
627
|
+
- spec/pio/set_eth_dst_addr_spec.rb
|
628
|
+
- spec/pio/set_eth_src_addr_spec.rb
|
629
|
+
- spec/pio/set_ip_dst_addr_spec.rb
|
630
|
+
- spec/pio/set_ip_src_addr_spec.rb
|
631
|
+
- spec/pio/set_ip_tos_spec.rb
|
632
|
+
- spec/pio/set_transport_dst_port_spec.rb
|
633
|
+
- spec/pio/set_transport_src_port_spec.rb
|
634
|
+
- spec/pio/set_vlan_priority_spec.rb
|
635
|
+
- spec/pio/set_vlan_vid_spec.rb
|
636
|
+
- spec/pio/strip_vlan_header_spec.rb
|
637
|
+
- spec/pio/wildcards_spec.rb
|
636
638
|
- spec/spec_helper.rb
|
639
|
+
- features/arp_read.feature
|
640
|
+
- features/dhcp_read.feature
|
641
|
+
- features/echo_read.feature
|
642
|
+
- features/exact_match.feature
|
643
|
+
- features/features_read.feature
|
644
|
+
- features/flow_mod_read.feature
|
637
645
|
- features/hello_read.feature
|
638
|
-
- features/
|
646
|
+
- features/icmp_read.feature
|
647
|
+
- features/lldp_read.feature
|
648
|
+
- features/packet_data/aggregate_stats_reply.raw
|
649
|
+
- features/packet_data/aggregate_stats_request.raw
|
650
|
+
- features/packet_data/arp-storm.pcap
|
651
|
+
- features/packet_data/arp.pcap
|
652
|
+
- features/packet_data/barrier_reply.raw
|
653
|
+
- features/packet_data/barrier_request.raw
|
639
654
|
- features/packet_data/desc_stats_reply.raw
|
655
|
+
- features/packet_data/desc_stats_request.raw
|
640
656
|
- features/packet_data/dhcp.pcap
|
641
657
|
- features/packet_data/echo_reply.raw
|
642
|
-
- features/packet_data/
|
643
|
-
- features/packet_data/
|
658
|
+
- features/packet_data/echo_request.raw
|
659
|
+
- features/packet_data/error.raw
|
644
660
|
- features/packet_data/features_reply.raw
|
645
|
-
- features/packet_data/aggregate_stats_reply.raw
|
646
|
-
- features/packet_data/queue_get_config_reply.raw
|
647
|
-
- features/packet_data/arp.pcap
|
648
661
|
- features/packet_data/features_request.raw
|
649
|
-
- features/packet_data/
|
650
|
-
- features/packet_data/
|
651
|
-
- features/packet_data/port_stats_request.raw
|
662
|
+
- features/packet_data/flow_mod_add.raw
|
663
|
+
- features/packet_data/flow_mod_delete.raw
|
652
664
|
- features/packet_data/flow_mod_delete_strict.raw
|
653
|
-
- features/packet_data/
|
654
|
-
- features/packet_data/
|
655
|
-
- features/packet_data/
|
656
|
-
- features/packet_data/
|
665
|
+
- features/packet_data/flow_mod_modify.raw
|
666
|
+
- features/packet_data/flow_mod_modify_strict.raw
|
667
|
+
- features/packet_data/flow_removed.raw
|
668
|
+
- features/packet_data/flow_stats_reply.raw
|
669
|
+
- features/packet_data/flow_stats_request.raw
|
657
670
|
- features/packet_data/get_config_reply.raw
|
658
|
-
- features/packet_data/
|
671
|
+
- features/packet_data/get_config_request.raw
|
659
672
|
- features/packet_data/hello.raw
|
660
|
-
- features/packet_data/
|
661
|
-
- features/packet_data/
|
662
|
-
- features/packet_data/
|
663
|
-
- features/packet_data/
|
664
|
-
- features/packet_data/table_stats_reply.raw
|
673
|
+
- features/packet_data/icmp.pcap
|
674
|
+
- features/packet_data/lldp.detailed.pcap
|
675
|
+
- features/packet_data/lldp.minimal.pcap
|
676
|
+
- features/packet_data/packet_in_arp_request.raw
|
665
677
|
- features/packet_data/packet_in_cbench.raw
|
678
|
+
- features/packet_data/packet_out.raw
|
679
|
+
- features/packet_data/port_mod.raw
|
680
|
+
- features/packet_data/port_stats_reply.raw
|
681
|
+
- features/packet_data/port_stats_request.raw
|
682
|
+
- features/packet_data/port_status.raw
|
683
|
+
- features/packet_data/queue_get_config_reply.raw
|
666
684
|
- features/packet_data/queue_get_config_request.raw
|
667
|
-
- features/packet_data/
|
668
|
-
- features/packet_data/
|
669
|
-
- features/packet_data/icmp.pcap
|
670
|
-
- features/packet_data/arp-storm.pcap
|
671
|
-
- features/packet_data/flow_stats_reply.raw
|
672
|
-
- features/packet_data/desc_stats_request.raw
|
673
|
-
- features/packet_data/barrier_request.raw
|
685
|
+
- features/packet_data/set_config.raw
|
686
|
+
- features/packet_data/table_stats_reply.raw
|
674
687
|
- features/packet_data/table_stats_request.raw
|
675
|
-
- features/packet_data/
|
676
|
-
- features/packet_data/
|
677
|
-
- features/
|
678
|
-
- features/
|
679
|
-
- features/packet_data/aggregate_stats_request.raw
|
680
|
-
- features/packet_data/echo_request.raw
|
681
|
-
- features/exact_match.feature
|
682
|
-
- features/icmp_read.feature
|
688
|
+
- features/packet_data/vendor.raw
|
689
|
+
- features/packet_data/vendor_stats_request.raw
|
690
|
+
- features/packet_in_read.feature
|
691
|
+
- features/packet_out_read.feature
|
683
692
|
- features/port_status_read.feature
|
684
|
-
- features/arp_read.feature
|
685
|
-
- features/step_definitions/pending_steps.rb
|
686
693
|
- features/step_definitions/packet_data_steps.rb
|
687
|
-
- features/
|
688
|
-
- features/
|
689
|
-
- features/
|
690
|
-
- features/features_read.feature
|
691
|
-
- features/packet_out_read.feature
|
692
|
-
- features/packet_in_read.feature
|
693
|
-
- features/echo_read.feature
|
694
|
+
- features/step_definitions/pending_steps.rb
|
695
|
+
- features/support/env.rb
|
696
|
+
- features/udp_read.feature
|
694
697
|
has_rdoc:
|
data/lib/pio/dhcp/csum_util.rb
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
module Pio
|
2
|
-
class Dhcp
|
3
|
-
# Checksum Calculate Utility.
|
4
|
-
module CsumUtil
|
5
|
-
private
|
6
|
-
|
7
|
-
def ip_csum
|
8
|
-
ipv4_header_2bytewise_slices.reduce(:+)
|
9
|
-
end
|
10
|
-
|
11
|
-
def udp_csum
|
12
|
-
udp_header_2bytewise_slices.reduce(:+)
|
13
|
-
end
|
14
|
-
|
15
|
-
def ipv4_header_2bytewise_slices
|
16
|
-
[
|
17
|
-
ipversion_ipheaderlength_iptypeofservice, ip_total_length,
|
18
|
-
ip_identifier, ipflag_ipfragment,
|
19
|
-
ipttl_ipproto,
|
20
|
-
ip_source_address_upper,
|
21
|
-
ip_source_address_lower,
|
22
|
-
ip_destination_address_upper,
|
23
|
-
ip_destination_address_lower
|
24
|
-
]
|
25
|
-
end
|
26
|
-
|
27
|
-
def ip_source_address_upper
|
28
|
-
ip_source_address.get.to_i >> 16
|
29
|
-
end
|
30
|
-
|
31
|
-
def ip_source_address_lower
|
32
|
-
ip_source_address.get.to_i & 0xffff
|
33
|
-
end
|
34
|
-
|
35
|
-
def ip_destination_address_upper
|
36
|
-
ip_destination_address.get.to_i >> 16
|
37
|
-
end
|
38
|
-
|
39
|
-
def ip_destination_address_lower
|
40
|
-
ip_destination_address.get.to_i & 0xffff
|
41
|
-
end
|
42
|
-
|
43
|
-
def ipversion_ipheaderlength_iptypeofservice
|
44
|
-
ip_version << 12 | ip_header_length << 8 | ip_type_of_service
|
45
|
-
end
|
46
|
-
|
47
|
-
def ipflag_ipfragment
|
48
|
-
ip_flag << 13 | ip_fragment
|
49
|
-
end
|
50
|
-
|
51
|
-
def ipttl_ipproto
|
52
|
-
ip_ttl << 8 | ip_protocol
|
53
|
-
end
|
54
|
-
|
55
|
-
def udp_header_2bytewise_slices
|
56
|
-
[
|
57
|
-
pseudo_header_2bytewise_slices,
|
58
|
-
udp_src_port,
|
59
|
-
udp_dst_port,
|
60
|
-
udp_len,
|
61
|
-
payload_2bytewise_slices
|
62
|
-
]
|
63
|
-
end
|
64
|
-
|
65
|
-
def payload_2bytewise_slices
|
66
|
-
(dhcp.to_binary_s + trail_data).unpack('n*').reduce(:+)
|
67
|
-
end
|
68
|
-
|
69
|
-
def pseudo_header_2bytewise_slices
|
70
|
-
[
|
71
|
-
ip_source_address_upper,
|
72
|
-
ip_source_address_lower,
|
73
|
-
ip_destination_address_upper,
|
74
|
-
ip_destination_address_lower,
|
75
|
-
ip_protocol,
|
76
|
-
udp_len
|
77
|
-
].pack('n*').unpack('n*').reduce(:+)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'pio/type/mac_address'
|
2
|
-
|
3
|
-
module Pio
|
4
|
-
module Type
|
5
|
-
# Adds ethernet_header macro.
|
6
|
-
module EthernetHeader
|
7
|
-
# rubocop:disable MethodLength
|
8
|
-
# rubocop:disable AbcSize
|
9
|
-
def ethernet_header(options = { ether_type: 0x0800 })
|
10
|
-
class_eval do
|
11
|
-
mac_address :destination_mac
|
12
|
-
mac_address :source_mac
|
13
|
-
uint16 :ether_type_internal, initial_value: options[:ether_type]
|
14
|
-
|
15
|
-
bit3 :vlan_pcp_internal, onlyif: -> { vlan? }
|
16
|
-
bit1 :vlan_cfi, onlyif: -> { vlan? }
|
17
|
-
bit12 :vlan_vid_internal, onlyif: -> { vlan? }
|
18
|
-
|
19
|
-
uint16 :ether_type_vlan, onlyif: -> { vlan? },
|
20
|
-
initial_value: options[:ether_type]
|
21
|
-
|
22
|
-
def ether_type
|
23
|
-
ether_type_internal
|
24
|
-
end
|
25
|
-
|
26
|
-
def vlan_vid
|
27
|
-
vlan? ? vlan_vid_internal : 0xffff
|
28
|
-
end
|
29
|
-
|
30
|
-
def vlan_pcp
|
31
|
-
vlan? ? vlan_pcp_internal : 0
|
32
|
-
end
|
33
|
-
|
34
|
-
def vlan?
|
35
|
-
ether_type == 0x8100
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
# rubocop:enable MethodLength
|
40
|
-
# rubocop:enable AbcSize
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
data/lib/pio/type/ipv4_header.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'pio/type/ip_address'
|
2
|
-
|
3
|
-
module Pio
|
4
|
-
module Type
|
5
|
-
# IP Version 4 Header Format
|
6
|
-
module IPv4Header
|
7
|
-
# This method smells of :reek:TooManyStatements
|
8
|
-
# rubocop:disable MethodLength
|
9
|
-
# rubocop:disable AbcSize
|
10
|
-
def ipv4_header(options = {})
|
11
|
-
class_eval do
|
12
|
-
bit4 :ip_version, initial_value: 0x4
|
13
|
-
bit4 :ip_header_length, initial_value: 0x5
|
14
|
-
uint8 :ip_type_of_service, initial_value: 0
|
15
|
-
uint16be :ip_total_length,
|
16
|
-
initial_value: options[:ip_total_length] || 0
|
17
|
-
uint16be :ip_identifier, initial_value: 0
|
18
|
-
bit3 :ip_flag, initial_value: 0
|
19
|
-
bit13 :ip_fragment, initial_value: 0
|
20
|
-
uint8 :ip_ttl, initial_value: 128
|
21
|
-
uint8 :ip_protocol, initial_value: options[:ip_protocol] || 0
|
22
|
-
uint16be :ip_header_checksum,
|
23
|
-
initial_value: options[:ip_header_checksum] || 0
|
24
|
-
ip_address :ip_source_address
|
25
|
-
ip_address :ip_destination_address
|
26
|
-
string :option, read_length: -> { 20 - ip_header_length * 4 }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
# rubocop:enable AbcSize
|
30
|
-
# rubocop:enable MethodLength
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/lib/pio/type/udp_header.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
module Pio
|
2
|
-
module Type
|
3
|
-
# UDP Header Format.
|
4
|
-
module UdpHeader
|
5
|
-
def udp_header(options)
|
6
|
-
class_eval do
|
7
|
-
uint16be :udp_src_port
|
8
|
-
uint16be :udp_dst_port
|
9
|
-
uint16be :udp_length, initial_value: options[:udp_length]
|
10
|
-
uint16be :udp_checksum, initial_value: options[:udp_checksum]
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|