packet_via_dmem 0.0.12 → 0.0.14
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/lib/packet_via_dmem.rb +7 -2
- data/lib/packet_via_dmem/cli.rb +6 -5
- data/lib/packet_via_dmem/header/received.rb +2 -2
- data/lib/packet_via_dmem/header/sent.rb +2 -2
- data/lib/packet_via_dmem/packet.rb +11 -6
- data/lib/packet_via_dmem/packets.rb +4 -4
- data/lib/packet_via_dmem/received.rb +2 -2
- data/lib/packet_via_dmem/sent.rb +2 -2
- data/packet_via_dmem.gemspec +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8817b2bac1c9fe1cdf6a2f24c90508bfb5bddc54
|
4
|
+
data.tar.gz: 092b207f0481c995223532662c21d37c001e42b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79f503258a66b6e81d43fb2c5e0d2109172172fbb0cb6942d19d2ac250ea6c2f2e4a142f8b3bb156e6ea50ea68c0c1ce80a36ffd37fc03bbeed73bbc01025856
|
7
|
+
data.tar.gz: a54c11bbc0021679f9dc45ca181cab80c99011bf6e1891e3aa1f9e9ac56ae923c84a1fea96f5ddbf1dd7ebc5af599fcd5468cda4c8b869fb32f47819d6840bd2
|
data/lib/packet_via_dmem.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'strscan'
|
2
|
+
require 'logger'
|
2
3
|
|
3
4
|
class PacketViaDMEM
|
4
5
|
PACKET = /^(Received|Sent) \d+ byte parcel:.*\n/
|
@@ -18,13 +19,17 @@ class PacketViaDMEM
|
|
18
19
|
def initialize opts={}
|
19
20
|
@received = opts.delete :received
|
20
21
|
@sent = opts.delete :sent
|
21
|
-
@
|
22
|
+
@log = opts.delete :log
|
23
|
+
if not @log
|
24
|
+
@log = Logger.new STDERR
|
25
|
+
@log.level = Logger::FATAL
|
26
|
+
end
|
22
27
|
@received ||= HEADER_SIZE[:received]
|
23
28
|
@sc = StringScanner.new ''
|
24
29
|
end
|
25
30
|
|
26
31
|
def parse str
|
27
|
-
packets = Packets.new @
|
32
|
+
packets = Packets.new @log
|
28
33
|
@sc.string = str
|
29
34
|
while @sc.scan_until PACKET
|
30
35
|
match = @sc.matched.split(/\s+/)
|
data/lib/packet_via_dmem/cli.rb
CHANGED
@@ -8,8 +8,9 @@ class PacketViaDMEM
|
|
8
8
|
attr_reader :debug
|
9
9
|
|
10
10
|
def initialize
|
11
|
-
@opts
|
12
|
-
@
|
11
|
+
@opts = opts_parse
|
12
|
+
@log = Logger.new STDERR
|
13
|
+
@log.level = Logger::INFO unless @opts.debug?
|
13
14
|
end
|
14
15
|
|
15
16
|
def run
|
@@ -22,7 +23,7 @@ class PacketViaDMEM
|
|
22
23
|
end
|
23
24
|
packets = PacketViaDMEM.new(:received=>@opts.received?,
|
24
25
|
:sent=>@opts.sent?,
|
25
|
-
:
|
26
|
+
:log=>@log).parse file
|
26
27
|
count = 0
|
27
28
|
packets.each do |pkt|
|
28
29
|
pop = false
|
@@ -37,7 +38,7 @@ class PacketViaDMEM
|
|
37
38
|
packet = pkt.pretty pkt.pop(pop) if pop
|
38
39
|
puts pkt.header.to_s count+=1
|
39
40
|
puts packet
|
40
|
-
$stderr.puts pkt.
|
41
|
+
$stderr.puts pkt.popped.join(' ') if @opts.popped?
|
41
42
|
puts
|
42
43
|
end
|
43
44
|
end
|
@@ -46,7 +47,7 @@ class PacketViaDMEM
|
|
46
47
|
|
47
48
|
def opts_parse
|
48
49
|
Slop.parse do |o|
|
49
|
-
o.bool '--
|
50
|
+
o.bool '--popped', 'print popped bytes to stderr'
|
50
51
|
o.bool '-o', '--original', 'print original frames'
|
51
52
|
o.bool '-r', '--received', 'print received frames only (DEFAULT)'
|
52
53
|
o.bool '-s', '--sent', 'print sent frames only'
|
@@ -17,8 +17,8 @@ class Header
|
|
17
17
|
str << '# RX %03d # ' % packet_number
|
18
18
|
str << 'bytes: %d # ' % size if msg_type > 0
|
19
19
|
str << 'stream: %d # ' % stream
|
20
|
-
str << 'port: %
|
21
|
-
str << "type: %
|
20
|
+
str << 'port: %x (%s) # ' % [port, port.divmod(64).join('/')]
|
21
|
+
str << "type: %x\n" % type
|
22
22
|
str << '# '
|
23
23
|
str << 'table: %d # ' % table
|
24
24
|
str << 'offset: %d # ' % offset
|
@@ -31,8 +31,8 @@ class Header
|
|
31
31
|
str << (decrement_reference ? 'D' : 'd')
|
32
32
|
str << (prequeue_priority ? 'P' : 'p')
|
33
33
|
str << ' # '
|
34
|
-
str << 'port: %
|
35
|
-
str << 'type: %
|
34
|
+
str << 'port: %x (%s) # ' % [port, port.divmod(64) ]
|
35
|
+
str << 'type: %x # ' % type
|
36
36
|
str << 'QoS: %d@%d # ' % [queue_number, queue_system]
|
37
37
|
str << "QueueDropOp: %d\n" % [queue_drop_opcode]
|
38
38
|
str << '# '
|
@@ -54,13 +54,12 @@ class PacketViaDMEM
|
|
54
54
|
def get_pop_push pkt, header
|
55
55
|
header.port = pkt.shift.to_i(16)
|
56
56
|
header.type = pkt.shift.to_i(16)
|
57
|
-
|
58
|
-
|
57
|
+
if Type::NOPOP.include? header.type # no-op, DMAC follows
|
58
|
+
[0, []]
|
59
|
+
else # *Type::MPLS, *Type::SELF, *Type::SENT (But be robust for unexpected)
|
59
60
|
header.magic1 = pkt.shift.to_i(16)
|
60
61
|
header.magic2 = pkt.shift.to_i(16)
|
61
62
|
magic pkt, header
|
62
|
-
when *Type::NOPOP # no-op, DMAC follows
|
63
|
-
[0, []]
|
64
63
|
end
|
65
64
|
end
|
66
65
|
|
@@ -69,13 +68,18 @@ class PacketViaDMEM
|
|
69
68
|
when 0x00 # the super dodgy one
|
70
69
|
magic_self pkt, header
|
71
70
|
when 0x01 # we're missing ethertype, need more data to discover etype
|
72
|
-
|
71
|
+
etype = FAKE[:etype_ipv4]
|
72
|
+
etype = FAKE[:etype_mpls] if Type::MPLS.include? header.type
|
73
|
+
push = pkt[0..11] + etype
|
73
74
|
[ 12 , push ]
|
74
75
|
when 0x20 # we have extra crap
|
75
76
|
[ 21, [] ]
|
76
77
|
when 0x80 # sent... only?
|
77
78
|
header.magic3 = pkt.shift.to_i(16)
|
78
79
|
[ 0, [] ]
|
80
|
+
else
|
81
|
+
@log.warn "unknown magic1: (%x/%x), type: %x, port: %x'" % [header.magic1, header.magic2, header.type, header.port]
|
82
|
+
[ 0, [] ]
|
79
83
|
end
|
80
84
|
end
|
81
85
|
|
@@ -90,7 +94,8 @@ class PacketViaDMEM
|
|
90
94
|
push = FAKE[:dmac] + FAKE[:smac] + FAKE[:etype_ipv4]
|
91
95
|
[ 3, push ]
|
92
96
|
else
|
93
|
-
|
97
|
+
@log.warn "unknown port: magic: (%x/%x), type: %x, port: %x'" % [header.magic1, header.magic2, header.type, header.port]
|
98
|
+
[ 0, [] ]
|
94
99
|
end
|
95
100
|
end
|
96
101
|
|
@@ -7,15 +7,15 @@ class PacketViaDMEM
|
|
7
7
|
include Enumerable
|
8
8
|
class InvalidType < Error; end
|
9
9
|
|
10
|
-
def initialize
|
11
|
-
@
|
10
|
+
def initialize log
|
11
|
+
@log = log
|
12
12
|
@packets = []
|
13
13
|
end
|
14
14
|
|
15
15
|
def add packet, type
|
16
16
|
packet = case type
|
17
|
-
when :received then Received.new packet, @
|
18
|
-
when :sent then Sent.new packet, @
|
17
|
+
when :received then Received.new packet, @log
|
18
|
+
when :sent then Sent.new packet, @log
|
19
19
|
else raise InvalidType, "#{type} not valid packet type"
|
20
20
|
end
|
21
21
|
@packets << packet
|
data/lib/packet_via_dmem/sent.rb
CHANGED
data/packet_via_dmem.gemspec
CHANGED