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