packet_via_dmem 0.0.14 → 0.0.15
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/README.md +21 -11
- data/capture/do_pcaps.rb +8 -0
- data/lib/packet_via_dmem/cli.rb +20 -12
- data/lib/packet_via_dmem/header/sent.rb +1 -1
- data/lib/packet_via_dmem.rb +15 -0
- data/packet_via_dmem.gemspec +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf0a459e14095b84895caa6e51e0e091ea79e7e5
|
4
|
+
data.tar.gz: 36878c10f2139b87e7ddfc16f0e1d320eca7b071
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a19d2c19db3f377685c02a2516d76294c35ca506c591e4a541e27eade78da36d6d52012ac522299d0c81cf46a8da15971affc03c8de674a27b08880d1200688e
|
7
|
+
data.tar.gz: 662664c85751129cb1b39b2317040994c0642b91dd7e82d24c480e6f5d32c244257e18b13e64d1623368c4dabbf20761782777c9d47acbff4be6f6dc40934060
|
data/README.md
CHANGED
@@ -14,6 +14,21 @@ To capture say packets with IP address 10.11.12.13
|
|
14
14
|
MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem dump
|
15
15
|
MX104-ABB-0(test2nqe31-re1.dk vty)# test jnh 0 packet-via-dmem disable
|
16
16
|
|
17
|
+
* in capture the 0x3 sets flags for what type of packets we want, for 0x3 we
|
18
|
+
set two flags on, 'Packet' and 'PacketHead' (show mqchip N lo stats). These
|
19
|
+
two cover all real traffic.
|
20
|
+
1. Packet (whole packet seen)
|
21
|
+
2. PacketHead (334B packet, inclusive internal headers)
|
22
|
+
|
23
|
+
* after capture flags we can set up-to 8 bytes of data to match anywhere in
|
24
|
+
32B window
|
25
|
+
|
26
|
+
* after match trigger we have optional 3rd argument which gives the byte
|
27
|
+
offset where our 32B window starts from, default to 0. If you're capturing
|
28
|
+
IPv6, the DADDR won't fit in the first 32B window, so you might give offest
|
29
|
+
of say 19B to get DADDR there too (in case of L2 MAC headers, without VLAN
|
30
|
+
or MPLS)
|
31
|
+
|
17
32
|
## Install
|
18
33
|
% gem install packet_via_dmem
|
19
34
|
|
@@ -68,6 +83,11 @@ To capture say packets with IP address 10.11.12.13
|
|
68
83
|
-h, --help
|
69
84
|
%
|
70
85
|
|
86
|
+
You can also read from STDIN for live capture, some thing like this should work:
|
87
|
+
|
88
|
+
% sshfs nms: nms
|
89
|
+
% tail -fn 10000 nms/output.txt|packet-via-dmem -|text2pcap - -|wireshark -k -i -
|
90
|
+
|
71
91
|
## Library
|
72
92
|
require 'packet_via_dmem'
|
73
93
|
dmem = PacketViaDMEM.new
|
@@ -181,17 +201,7 @@ Example from MX80
|
|
181
201
|
10 0b 00 f0 02 28 81 08
|
182
202
|
|
183
203
|
### Sent header
|
184
|
-
|
185
|
-
our type. For all my examples, when we sent frame without L2 headers for
|
186
|
-
fabric, it was MPLS, but almost certainly it can be IPv4, IPv6, ARP etc too.
|
187
|
-
Need data to know which header tells that. So we are going to pop wrong amount
|
188
|
-
of bytes in many sent cases.
|
189
|
-
|
190
|
-
* first byte is output
|
191
|
-
* 0x00 == to fabric
|
192
|
-
* 0x08 == to wan
|
193
|
-
|
194
|
-
* byte 6, 7, 9, 11 or 21 probably defines type (different if we sent layer2 to fabric or if we don't)
|
204
|
+
*FIXME* check the source...
|
195
205
|
|
196
206
|
Example from MX960
|
197
207
|
|
data/capture/do_pcaps.rb
ADDED
data/lib/packet_via_dmem/cli.rb
CHANGED
@@ -9,23 +9,19 @@ class PacketViaDMEM
|
|
9
9
|
|
10
10
|
def initialize
|
11
11
|
@opts = opts_parse
|
12
|
+
@debug = @opts.debug?
|
12
13
|
@log = Logger.new STDERR
|
13
|
-
@log.level = Logger::INFO unless @
|
14
|
+
@log.level = Logger::INFO unless @debug
|
14
15
|
end
|
15
16
|
|
16
17
|
def run
|
17
|
-
file = @opts.
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
raise InvalidFile, "unable to read #{file}"
|
23
|
-
end
|
24
|
-
packets = PacketViaDMEM.new(:received=>@opts.received?,
|
25
|
-
:sent=>@opts.sent?,
|
26
|
-
:log=>@log).parse file
|
18
|
+
file = get_file if not @opts.stdin?
|
19
|
+
dmem = PacketViaDMEM.new :received=>@opts.received?,
|
20
|
+
:sent=>@opts.sent?,
|
21
|
+
:log=>@log
|
22
|
+
|
27
23
|
count = 0
|
28
|
-
|
24
|
+
block = Proc.new do |pkt|
|
29
25
|
pop = false
|
30
26
|
if pkt.type == :received
|
31
27
|
next if @opts.sent?
|
@@ -41,12 +37,24 @@ class PacketViaDMEM
|
|
41
37
|
$stderr.puts pkt.popped.join(' ') if @opts.popped?
|
42
38
|
puts
|
43
39
|
end
|
40
|
+
packets = @opts.stdin? ? dmem.stream($stdin, &block) : dmdm.parse(file).each(&block)
|
44
41
|
end
|
45
42
|
|
46
43
|
private
|
47
44
|
|
45
|
+
def get_file
|
46
|
+
file = @opts.arguments.shift
|
47
|
+
raise NoFile, 'filename is mandatory argument' unless file
|
48
|
+
begin
|
49
|
+
file = File.read(file)
|
50
|
+
rescue
|
51
|
+
raise InvalidFile, "unable to read #{file}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
48
55
|
def opts_parse
|
49
56
|
Slop.parse do |o|
|
57
|
+
o.bool '-', '--stdin', 'stream from STDIN'
|
50
58
|
o.bool '--popped', 'print popped bytes to stderr'
|
51
59
|
o.bool '-o', '--original', 'print original frames'
|
52
60
|
o.bool '-r', '--received', 'print received frames only (DEFAULT)'
|
@@ -31,7 +31,7 @@ class Header
|
|
31
31
|
str << (decrement_reference ? 'D' : 'd')
|
32
32
|
str << (prequeue_priority ? 'P' : 'p')
|
33
33
|
str << ' # '
|
34
|
-
str << 'port: %x (%s) # ' % [port, port.divmod(64)
|
34
|
+
str << 'port: %x (%s) # ' % [port, port.divmod(64).join('/')]
|
35
35
|
str << 'type: %x # ' % type
|
36
36
|
str << 'QoS: %d@%d # ' % [queue_number, queue_system]
|
37
37
|
str << "QueueDropOp: %d\n" % [queue_drop_opcode]
|
data/lib/packet_via_dmem.rb
CHANGED
@@ -28,6 +28,20 @@ class PacketViaDMEM
|
|
28
28
|
@sc = StringScanner.new ''
|
29
29
|
end
|
30
30
|
|
31
|
+
def stream io
|
32
|
+
packet = ''
|
33
|
+
while not io.eof?
|
34
|
+
line = io.readline
|
35
|
+
if line.match PACKET
|
36
|
+
packet = parse(packet).first
|
37
|
+
yield packet if packet
|
38
|
+
packet = line
|
39
|
+
else
|
40
|
+
packet << line
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
31
45
|
def parse str
|
32
46
|
packets = Packets.new @log
|
33
47
|
@sc.string = str
|
@@ -42,6 +56,7 @@ class PacketViaDMEM
|
|
42
56
|
pkt = parse_packet pkt
|
43
57
|
packets.add pkt, type
|
44
58
|
end
|
59
|
+
@sc.string = ''
|
45
60
|
packets
|
46
61
|
end
|
47
62
|
|
data/packet_via_dmem.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: packet_via_dmem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Saku Ytti
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slop
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- README.md
|
39
39
|
- Rakefile
|
40
40
|
- bin/packet-via-dmem
|
41
|
+
- capture/do_pcaps.rb
|
41
42
|
- capture/generate.rb
|
42
43
|
- lib/packet_via_dmem.rb
|
43
44
|
- lib/packet_via_dmem/cli.rb
|