pio 0.18.2 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -0
  3. data/README.md +40 -344
  4. data/Rakefile +32 -0
  5. data/bin/_guard-core +16 -0
  6. data/bin/byebug +16 -0
  7. data/bin/cc-tddium-post-worker +16 -0
  8. data/bin/cdiff +16 -0
  9. data/bin/coderay +16 -0
  10. data/bin/colortab +16 -0
  11. data/bin/coveralls +16 -0
  12. data/bin/cucumber +16 -0
  13. data/bin/decolor +16 -0
  14. data/bin/flay +16 -0
  15. data/bin/flog +16 -0
  16. data/bin/guard +16 -0
  17. data/bin/htmldiff +16 -0
  18. data/bin/inch +16 -0
  19. data/bin/ldiff +16 -0
  20. data/bin/listen +16 -0
  21. data/bin/minitar +16 -0
  22. data/bin/pry +16 -0
  23. data/bin/rake +16 -0
  24. data/bin/reek +16 -0
  25. data/bin/relish +16 -0
  26. data/bin/restclient +16 -0
  27. data/bin/rspec +16 -0
  28. data/bin/rubocop +16 -0
  29. data/bin/ruby-parse +16 -0
  30. data/bin/ruby-rewrite +16 -0
  31. data/bin/ruby_parse +16 -0
  32. data/bin/ruby_parse_extract_error +16 -0
  33. data/bin/sparkr +16 -0
  34. data/bin/term_display +16 -0
  35. data/bin/term_mandel +16 -0
  36. data/bin/thor +16 -0
  37. data/bin/unparser +16 -0
  38. data/bin/yard +16 -0
  39. data/bin/yardoc +16 -0
  40. data/bin/yri +16 -0
  41. data/features/arp.feature +61 -0
  42. data/features/dhcp.feature +4 -0
  43. data/features/icmp.feature +130 -0
  44. data/features/lldp.feature +47 -0
  45. data/features/open_flow10/echo_reply.feature +95 -0
  46. data/features/open_flow10/echo_request.feature +95 -0
  47. data/features/open_flow10/exact_match.feature +36 -0
  48. data/features/{features_read.feature → open_flow10/features_reply.feature} +54 -17
  49. data/features/open_flow10/features_request.feature +79 -0
  50. data/features/{flow_mod_read.feature → open_flow10/flow_mod.feature} +16 -21
  51. data/features/open_flow10/hello.feature +79 -0
  52. data/features/open_flow10/packet_in.feature +58 -0
  53. data/features/{packet_out_read.feature → open_flow10/packet_out.feature} +4 -5
  54. data/features/open_flow10/port_status.feature +23 -0
  55. data/features/open_flow13/echo_reply.feature +115 -0
  56. data/features/open_flow13/echo_request.feature +115 -0
  57. data/features/open_flow13/hello.feature +74 -0
  58. data/features/packet_data/echo13_reply_body.raw +0 -0
  59. data/features/packet_data/echo13_reply_no_body.raw +0 -0
  60. data/features/packet_data/echo13_request_body.raw +0 -0
  61. data/features/packet_data/echo13_request_no_body.raw +0 -0
  62. data/features/packet_data/hello13_no_version_bitmap.raw +0 -0
  63. data/features/packet_data/hello13_version_bitmap.raw +0 -0
  64. data/features/packet_data/udp_no_payload.raw +0 -0
  65. data/features/packet_data/udp_with_payload.raw +0 -0
  66. data/features/step_definitions/packet_data_steps.rb +49 -29
  67. data/features/support/env.rb +3 -0
  68. data/features/{udp_read.feature → udp.feature} +3 -4
  69. data/lib/pio.rb +1 -0
  70. data/lib/pio/echo.rb +67 -0
  71. data/lib/pio/hello13.rb +111 -0
  72. data/lib/pio/open_flow/message.rb +2 -1
  73. data/lib/pio/open_flow/open_flow_header.rb +21 -38
  74. data/lib/pio/open_flow/transaction_id.rb +25 -0
  75. data/lib/pio/version.rb +1 -1
  76. data/pio.gemspec +9 -14
  77. data/spec/pio/flow_mod_spec.rb +1 -1
  78. data/spec/pio/hello13_spec.rb +114 -0
  79. metadata +182 -138
  80. data/examples/arp_new.rb +0 -16
  81. data/examples/arp_read.rb +0 -4
  82. data/examples/dhcp_new.rb +0 -34
  83. data/examples/dhcp_read.rb +0 -4
  84. data/examples/echo_new.rb +0 -9
  85. data/examples/echo_read.rb +0 -4
  86. data/examples/features_new.rb +0 -28
  87. data/examples/features_read.rb +0 -4
  88. data/examples/flow_mod_new.rb +0 -13
  89. data/examples/flow_mod_read.rb +0 -6
  90. data/examples/hello_new.rb +0 -4
  91. data/examples/hello_read.rb +0 -4
  92. data/examples/icmp_new.rb +0 -21
  93. data/examples/icmp_read.rb +0 -4
  94. data/examples/lldp_new.rb +0 -4
  95. data/examples/lldp_read.rb +0 -4
  96. data/examples/packet_in_new.rb +0 -17
  97. data/examples/packet_in_read.rb +0 -5
  98. data/examples/packet_out_new.rb +0 -18
  99. data/examples/packet_out_read.rb +0 -6
  100. data/features/arp_read.feature +0 -10
  101. data/features/dhcp_read.feature +0 -6
  102. data/features/echo_read.feature +0 -29
  103. data/features/exact_match.feature +0 -38
  104. data/features/hello_read.feature +0 -14
  105. data/features/icmp_read.feature +0 -55
  106. data/features/lldp_read.feature +0 -26
  107. data/features/packet_in_read.feature +0 -22
  108. data/features/port_status_read.feature +0 -24
  109. data/features/step_definitions/pending_steps.rb +0 -3
  110. data/spec/pio/echo/reply_spec.rb +0 -135
  111. data/spec/pio/echo/request_spec.rb +0 -137
  112. data/spec/pio/features/reply_spec.rb +0 -137
  113. data/spec/pio/features/request_spec.rb +0 -112
  114. data/spec/pio/hello_spec.rb +0 -106
  115. data/spec/pio/lldp_spec.rb +0 -244
  116. data/spec/pio/packet_in_spec.rb +0 -146
data/examples/arp_new.rb DELETED
@@ -1,16 +0,0 @@
1
- require 'pio'
2
-
3
- request = Pio::Arp::Request.new(
4
- source_mac: '00:26:82:eb:ea:d1',
5
- sender_protocol_address: '192.168.83.3',
6
- target_protocol_address: '192.168.83.254'
7
- )
8
- request.to_binary # => Arp Request frame in binary format.
9
-
10
- reply = Pio::Arp::Reply.new(
11
- source_mac: '00:16:9d:1d:9c:c4',
12
- destination_mac: '00:26:82:eb:ea:d1',
13
- sender_protocol_address: '192.168.83.254',
14
- target_protocol_address: '192.168.83.3'
15
- )
16
- reply.to_binary # => Arp Reply frame in binary format.
data/examples/arp_read.rb DELETED
@@ -1,4 +0,0 @@
1
- require 'pio'
2
-
3
- arp = Pio::Arp.read(binary_data)
4
- arp.source_mac.to_s # => '00:26:82:eb:ea:d1'
data/examples/dhcp_new.rb DELETED
@@ -1,34 +0,0 @@
1
- require 'pio'
2
-
3
- dhcp_client_mac_address = '24:db:ac:41:e5:5b'
4
-
5
- dhcp_server_options =
6
- {
7
- source_mac: '00:26:82:eb:ea:d1',
8
- destination_mac: '24:db:ac:41:e5:5b',
9
- ip_source_address: '192.168.0.100',
10
- ip_destination_address: '192.168.0.1'
11
- }
12
-
13
- # Client side
14
- discover = Pio::Dhcp::Discover.new(source_mac: dhcp_client_mac_address)
15
- discover.to_binary # => DHCP Discover frame in binary format
16
-
17
- # Server side
18
- offer = Pio::Dhcp::Offer.new(dhcp_server_options
19
- .merge(transaction_id: discover.transaction_id))
20
- offer.to_binary # => DHCP Offer frame in binary format
21
-
22
- # Client side
23
- request = Pio::Dhcp::Request.new(
24
- source_mac: dhcp_client_mac_address,
25
- server_identifier: dhcp_server_options[:ip_source_address],
26
- requested_ip_address: dhcp_server_options[:ip_destination_address],
27
- transaction_id: offer.transaction_id
28
- )
29
- request.to_binary # => DHCP Request frame in binary format
30
-
31
- # Server side
32
- ack = Pio::Dhcp::Ack.new(dhcp_server_options
33
- .merge(transaction_id: request.transaction_id))
34
- ack.to_binary # => DHCP Ack frame in binary format
@@ -1,4 +0,0 @@
1
- require 'pio'
2
-
3
- dhcp = Pio::Dhcp.read(binary_data)
4
- dhcp.destination_mac.to_s # => 'ff:ff:ff:ff:ff:ff'
data/examples/echo_new.rb DELETED
@@ -1,9 +0,0 @@
1
- require 'pio'
2
-
3
- request = Pio::Echo::Request.new
4
- request.to_binary # => ECHO Request message in binary format.
5
-
6
- # The ECHO xid (transaction_id)
7
- # should be same as that of the request.
8
- reply = Pio::Echo::Reply.new(xid: request.xid)
9
- reply.to_binary # => ECHO Reply message in binary format.
@@ -1,4 +0,0 @@
1
- require 'pio'
2
-
3
- echo = Pio::Echo::Request.read(binary_data)
4
- echo.xid # => 123
@@ -1,28 +0,0 @@
1
- require 'pio'
2
-
3
- request = Pio::Features::Request.new
4
- request.to_binary # => Features Request message in binary format.
5
-
6
- # The Features xid (transaction_id)
7
- # should be same as that of the request.
8
- reply =
9
- Pio::Features::Reply.new(xid: request.xid,
10
- dpid: 0x123,
11
- n_buffers: 0x100,
12
- n_tables: 0xfe,
13
- capabilities: [:flow_stats, :table_stats,
14
- :port_stats, :queue_stats,
15
- :arp_match_ip],
16
- actions: [:output, :set_vlan_vid,
17
- :set_vlan_pcp, :strip_vlan,
18
- :set_dl_src, :set_dl_dst,
19
- :set_nw_src, :set_nw_dst,
20
- :set_nw_tos, :set_tp_src,
21
- :set_tp_dst, :enqueue],
22
- ports: [{ port_no: 1,
23
- hardware_address: '11:22:33:44:55:66',
24
- name: 'port123',
25
- config: [:port_down],
26
- state: [:link_down],
27
- curr: [:port_10gb_fd, :port_copper] }])
28
- reply.to_binary # => Features Reply message in binary format.
@@ -1,4 +0,0 @@
1
- require 'pio'
2
-
3
- features = Pio::Features::Request.read(binary_data)
4
- features.xid # => 123
@@ -1,13 +0,0 @@
1
- require 'pio'
2
-
3
- flow_mod = Pio::FlowMod.new(transaction_id: 0x15,
4
- buffer_id: 0xffffffff,
5
- match: Pio::Match.new(in_port: 1),
6
- cookie: 1,
7
- command: :add,
8
- priority: 0xffff,
9
- out_port: 2,
10
- flags: [:send_flow_rem, :check_overwrap],
11
- actions: Pio::SendOutPort.new(2))
12
-
13
- flow_mod.to_binary # => Flow mod message in binary format.
@@ -1,6 +0,0 @@
1
- require 'pio'
2
-
3
- flow_mod = Pio::FlowMod.read(binary_data)
4
- flow_mod.match.in_port # => 1
5
- flow_mod.match.dl_src # => '00:00:00:00:00:0a'
6
- # ...
@@ -1,4 +0,0 @@
1
- require 'pio'
2
-
3
- hello = Pio::Hello.new(transaction_id: 123)
4
- hello.to_binary # => HELLO message in binary format.
@@ -1,4 +0,0 @@
1
- require 'pio'
2
-
3
- hello = Pio::Hello.read(binary_data)
4
- hello.transaction_id # => 123
data/examples/icmp_new.rb DELETED
@@ -1,21 +0,0 @@
1
- require 'pio'
2
-
3
- request = Pio::Icmp::Request.new(
4
- source_mac: '00:16:9d:1d:9c:c4',
5
- destination_mac: '00:26:82:eb:ea:d1',
6
- ip_source_address: '192.168.83.3',
7
- ip_destination_address: '192.168.83.254'
8
- )
9
- request.to_binary # => ICMP Request frame in binary format.
10
-
11
- reply = Pio::Icmp::Reply.new(
12
- source_mac: '00:26:82:eb:ea:d1',
13
- destination_mac: '00:16:9d:1d:9c:c4',
14
- ip_source_address: '192.168.83.254',
15
- ip_destination_address: '192.168.83.3',
16
- # The ICMP Identifier and the ICMP Sequence number
17
- # should be same as those of the request.
18
- identifier: request.icmp_identifier,
19
- sequence_number: request.icmp_sequence_number
20
- )
21
- reply.to_binary # => ICMP Reply frame in binary format.
@@ -1,4 +0,0 @@
1
- require 'pio'
2
-
3
- icmp = Pio::Icmp.read(binary_data)
4
- icmp.source_mac.to_s # => '00:26:82:eb:ea:d1'
data/examples/lldp_new.rb DELETED
@@ -1,4 +0,0 @@
1
- require 'pio'
2
-
3
- lldp = Pio::Lldp.new(dpid: 0x123, port_number: 12)
4
- lldp.to_binary # => LLDP frame in binary format.
@@ -1,4 +0,0 @@
1
- require 'pio'
2
-
3
- lldp = Pio::Lldp.read(binary_data)
4
- lldp.ttl # => 120
@@ -1,17 +0,0 @@
1
- require 'pio'
2
-
3
- data_dump = [
4
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0x5d, 0x10, 0x31, 0x37,
5
- 0x79, 0x08, 0x06, 0x00, 0x01, 0x08, 0x00, 0x06, 0x04, 0x00, 0x01,
6
- 0xac, 0x5d, 0x10, 0x31, 0x37, 0x79, 0xc0, 0xa8, 0x02, 0xfe, 0xff,
7
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xa8, 0x02, 0x05, 0x00, 0x00,
8
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
9
- 0x00, 0x00, 0x00, 0x00, 0x00
10
- ].pack('C*')
11
-
12
- packet_in = Pio::PacketIn.new(transaction_id: 0,
13
- buffer_id: 0xffffff00,
14
- in_port: 1,
15
- reason: :no_match,
16
- raw_data: data_dump)
17
- packet_in.to_binary # => Packet-In message in binary format.
@@ -1,5 +0,0 @@
1
- require 'pio'
2
-
3
- packet_in = Pio::PacketIn.read(binary_data)
4
- packet_in.in_port # => 1
5
- packet_in.buffer_id # => 4294967040
@@ -1,18 +0,0 @@
1
- require 'pio'
2
-
3
- data_dump = [
4
- 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e, 0x01, 0x02, 0x03, 0x04,
5
- 0x05, 0x06, 0x88, 0xcc, 0x02, 0x09, 0x07, 0x00, 0x00, 0x00,
6
- 0x00, 0x00, 0x00, 0x01, 0x23, 0x04, 0x05, 0x07, 0x00, 0x00,
7
- 0x00, 0x0c, 0x06, 0x02, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00,
8
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
9
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
10
- 0x00, 0x00, 0x00, 0x00
11
- ].pack('C*')
12
-
13
- packet_out = Pio::PacketOut.new(transaction_id: 0x16,
14
- buffer_id: 0xffffffff,
15
- in_port: 0xffff,
16
- actions: Pio::SendOutPort.new(2),
17
- raw_data: data_dump)
18
- packet_out.to_binary # => Packet-Out message in binary format.
@@ -1,6 +0,0 @@
1
- require 'pio'
2
-
3
- packet_out = Pio::PacketOut.read(binary_data)
4
- packet_out.actions.length # => 1
5
- packet_out.actions[0] # => Pio::SendOutPort
6
- packet_out.actions[0].port_number # => 2
@@ -1,10 +0,0 @@
1
- Feature: Pio::Arp.read
2
- Scenario: arp.pcap
3
- Given a packet data file "arp.pcap"
4
- When I try to parse the file with "Arp" class
5
- Then it should finish successfully
6
-
7
- Scenario: arp-storm.pcap
8
- Given a packet data file "arp-storm.pcap"
9
- When I try to parse the file with "Arp" class
10
- Then it should finish successfully
@@ -1,6 +0,0 @@
1
- @announce
2
- Feature: Pio::Dhcp.read
3
- Scenario: dhcp.pcap
4
- Given a packet data file "dhcp.pcap"
5
- When I try to parse the file with "Dhcp" class
6
- Then it should finish successfully
@@ -1,29 +0,0 @@
1
- Feature: Pio::Echo.read
2
- Scenario: echo_request.raw
3
- Given a packet data file "echo_request.raw"
4
- When I try to parse the file with "Echo::Request" class
5
- Then it should finish successfully
6
- And the parsed data have the following field and value:
7
- | field | value |
8
- | class | Pio::Echo::Request |
9
- | ofp_version | 1 |
10
- | message_type | 2 |
11
- | message_length | 8 |
12
- | transaction_id | 0 |
13
- | xid | 0 |
14
- | body | |
15
-
16
- Scenario: echo_reply.raw
17
- Given a packet data file "echo_reply.raw"
18
- When I try to parse the file with "Echo::Reply" class
19
- Then it should finish successfully
20
- And the parsed data have the following field and value:
21
- | field | value |
22
- | class | Pio::Echo::Reply |
23
- | ofp_version | 1 |
24
- | message_type | 3 |
25
- | message_length | 8 |
26
- | transaction_id | 6 |
27
- | xid | 6 |
28
- | body | |
29
-
@@ -1,38 +0,0 @@
1
- Feature: Pio::ExactMatch.new
2
- Scenario: packet_in_arp_request.raw
3
- Given a packet data file "packet_in_arp_request.raw"
4
- When I try to create an exact match from the packet
5
- And the parsed data have the following field and value:
6
- | field | value |
7
- | wildcards | {} |
8
- | in_port | 1 |
9
- | dl_src | ac:5d:10:31:37:79 |
10
- | dl_dst | ff:ff:ff:ff:ff:ff |
11
- | dl_vlan | 65535 |
12
- | dl_vlan_pcp | 0 |
13
- | dl_type | 2054 |
14
- | nw_tos | 0 |
15
- | nw_proto | 1 |
16
- | nw_src | 192.168.2.254 |
17
- | nw_dst | 192.168.2.5 |
18
- | tp_src | 0 |
19
- | tp_dst | 0 |
20
-
21
- Scenario: packet_in_cbench.raw (ARP request)
22
- Given a packet data file "packet_in_cbench.raw"
23
- When I try to create an exact match from the packet
24
- And the parsed data have the following field and value:
25
- | field | value |
26
- | wildcards | {} |
27
- | in_port | 1 |
28
- | dl_src | 00:00:00:00:00:01 |
29
- | dl_dst | 80:00:00:00:00:01 |
30
- | dl_vlan | 65535 |
31
- | dl_vlan_pcp | 0 |
32
- | dl_type | 2048 |
33
- | nw_tos | 0 |
34
- | nw_proto | 255 |
35
- | nw_src | 192.168.0.40 |
36
- | nw_dst | 192.168.1.40 |
37
- | tp_src | 31256 |
38
- | tp_dst | 22635 |
@@ -1,14 +0,0 @@
1
- Feature: Pio::Hello.read
2
- Scenario: hello.raw
3
- Given a packet data file "hello.raw"
4
- When I try to parse the file with "Hello" class
5
- Then it should finish successfully
6
- And the parsed data have the following field and value:
7
- | field | value |
8
- | class | Pio::Hello |
9
- | ofp_version | 1 |
10
- | message_type | 0 |
11
- | message_length | 8 |
12
- | transaction_id | 23 |
13
- | xid | 23 |
14
- | body | |
@@ -1,55 +0,0 @@
1
- Feature: Pio::Icmp.read
2
- Scenario: icmp.pcap
3
- Given a packet data file "icmp.pcap"
4
- When I try to parse the file with "Icmp" class
5
- Then it should finish successfully
6
- And the parsed data #1 have the following field and value:
7
- | field | value |
8
- | class | Pio::Icmp::Request |
9
- | destination_mac | 00:13:46:0b:22:ba |
10
- | source_mac | 00:16:ce:6e:8b:24 |
11
- | ether_type | 2048 |
12
- | ip_version | 4 |
13
- | ip_header_length | 5 |
14
- | ip_type_of_service | 0 |
15
- | ip_total_length | 60 |
16
- | ip_identifier | 36507 |
17
- | ip_flag | 0 |
18
- | ip_fragment | 0 |
19
- | ip_ttl | 128 |
20
- | ip_protocol | 1 |
21
- | ip_header_checksum | 10850 |
22
- | ip_source_address | 192.168.0.114 |
23
- | ip_destination_address | 192.168.0.1 |
24
- | ip_option | |
25
- | icmp_type | 8 |
26
- | icmp_code | 0 |
27
- | icmp_checksum | 18780 |
28
- | icmp_identifier | 768 |
29
- | icmp_sequence_number | 256 |
30
- | echo_data | abcdefghijklmnopqrstuvwabcdefghi |
31
- And the parsed data #2 have the following field and value:
32
- | field | value |
33
- | class | Pio::Icmp::Reply |
34
- | destination_mac | 00:16:ce:6e:8b:24 |
35
- | source_mac | 00:13:46:0b:22:ba |
36
- | ether_type | 2048 |
37
- | ip_version | 4 |
38
- | ip_header_length | 5 |
39
- | ip_type_of_service | 0 |
40
- | ip_total_length | 60 |
41
- | ip_identifier | 24150 |
42
- | ip_flag | 0 |
43
- | ip_fragment | 0 |
44
- | ip_ttl | 127 |
45
- | ip_protocol | 1 |
46
- | ip_header_checksum | 23463 |
47
- | ip_source_address | 192.168.0.1 |
48
- | ip_destination_address | 192.168.0.114 |
49
- | ip_option | |
50
- | icmp_type | 0 |
51
- | icmp_code | 0 |
52
- | icmp_checksum | 20828 |
53
- | icmp_identifier | 768 |
54
- | icmp_sequence_number | 256 |
55
- | echo_data | abcdefghijklmnopqrstuvwabcdefghi |
@@ -1,26 +0,0 @@
1
- Feature: Pio::Lldp.read
2
- Scenario: lldp.minimal.pcap
3
- Given a packet data file "lldp.minimal.pcap"
4
- When I try to parse the file with "Lldp" class
5
- Then it should finish successfully
6
- Then the parsed data #1 have the following field and value:
7
- | field | value |
8
- | class | Pio::Lldp |
9
- | destination_mac | 01:80:c2:00:00:0e |
10
- | source_mac | 00:04:96:1f:a7:26 |
11
- | ether_type | 35020 |
12
- | chassis_id | 19698525990 |
13
- | dpid | 19698525990 |
14
- | port_id | 1/3 |
15
- | ttl | 120 |
16
- | port_description | |
17
- | system_name | |
18
- | system_description | |
19
- | system_capabilities | |
20
- | management_address | |
21
- | organizationally_specific | |
22
-
23
- Scenario: lldp.detailed.pcap
24
- Given a packet data file "lldp.detailed.pcap"
25
- When I try to parse the file with "Lldp" class
26
- Then it should finish successfully
@@ -1,22 +0,0 @@
1
- Feature: Pio::PacketIn.read
2
- Scenario: packet_in_arp_request.raw
3
- Given a packet data file "packet_in_arp_request.raw"
4
- When I try to parse the file with "PacketIn" class
5
- Then it should finish successfully
6
- And the parsed data have the following field and value:
7
- | field | value |
8
- | class | Pio::PacketIn |
9
- | ofp_version | 1 |
10
- | message_type | 10 |
11
- | message_length | 78 |
12
- | transaction_id | 0 |
13
- | xid | 0 |
14
- | buffer_id | 4294967040 |
15
- | total_len | 60 |
16
- | in_port | 1 |
17
- | reason | no_match |
18
- | raw_data.length | 60 |
19
- | source_mac | ac:5d:10:31:37:79 |
20
- | source_mac.class | Pio::Mac |
21
- | destination_mac | ff:ff:ff:ff:ff:ff |
22
- | destination_mac.class | Pio::Mac |