packet_via_dmem 0.0.5 → 0.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28abcdc9ceedec9ebdf16bbbfa2042d7b6c39d52
4
- data.tar.gz: b53337153602aba2419d04d7d707f94b7821062a
3
+ metadata.gz: 9a5e83611fb35ed4c593d62c0c15e643bc40ff8e
4
+ data.tar.gz: a8b95c28a02ddcfdb38f114b736315eb36660153
5
5
  SHA512:
6
- metadata.gz: 58ba362cdd5a27229ecb9ca4138c10c291b1b158e0f15310edd6be4efe4526070fbc7dfc501e6b856b3d0efbee8fb697254eb81fef98ecd69c9d994a9192d645
7
- data.tar.gz: 61b94c892afa4793638e01ea3f62ba47de3a05eba13b86e74bc06c2a5372ffa0fb91bd15a88e82c98a8b2e8f7320376debabb240377d935d2757e8c22ead66da
6
+ metadata.gz: aefcd401cb0bb61ffd7deca8a91bef83bdfbe0f44ab4dba56c89cbbb7d5660f79d321b6d31be9930144b8e87101c0fb51887bb4d3fe1430f62d1f719a8578c6e
7
+ data.tar.gz: e51a8739969f00208b65fa59bc0d757a4c307a8480b0117423988abc84c251d8d0d0e73c3b4d2fccef7d21e58ba99b0e21882698488b72055de7f7363cda387a
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  gems
2
- cfg*
2
+ *.pcap
3
+ capture/*.txt
data/README.md CHANGED
@@ -14,14 +14,14 @@ 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
+ ## Install
18
+ % gem install packet_via_dmem
17
19
 
18
20
  ## CLI
19
- % ./bin/packet-via-dmem -s 1 ~/output.txt|wc -l
21
+ % ./bin/packet-via-dmem --both ~/output.txt|grep Packet|wc -l
20
22
  55
21
- % ./bin/packet-via-dmem ~/output.txt |wc -l
23
+ % ./bin/packet-via-dmem ~/output.txt|grep Packet|wc -l
22
24
  28
23
- % ./bin/packet-via-dmem -r 0 ~/output.txt |wc -l
24
- 0
25
25
  % ./bin/packet-via-dmem ~/output.txt|text2pcap - output.pcap
26
26
  Input from: Standard input
27
27
  Output to: output.pcap
@@ -99,7 +99,7 @@ To capture say packets with IP address 10.11.12.13
99
99
  * value of fift+sixth seems to sometime indicate special cases
100
100
  * 0x1fff - Packet missing everything before IPv4 TTL, yet has some extra. I saw BGP from control-plane with this and also TCP/SMB2 with Seq1, it was transit, but perhaps it was via ARP resolve/punt and thus coming from control-plane?
101
101
  * 0x2000 - BFD frames from control-plane, missing L2
102
- * 0x4220 - Was traffic for AE/802.1AX, no L2 included, but something extra aadded
102
+ * 0x4220 - Was traffic for AE/802.1AX, missing ethertype, MACs changed, 2 mystery bytes
103
103
  * 0x8000 - I need to pop 14 bytes extra
104
104
 
105
105
  * 00 (22) (33) (44) \<src\> (66)
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'packet_via_dmem'
4
+
5
+ # takes 1 or more argument pointing to filename as 'input-something.txt'
6
+ # this input should be data gathered from juniper
7
+ # writes to output received-something.txt, sent-something.txt,
8
+ # original-something.txt and header-something.txt
9
+ # This is used to generate files for testing
10
+
11
+ class PacketViaDMEM
12
+ class CreateTestFiles
13
+ def initialize
14
+ @dmem = PacketViaDMEM.new
15
+ end
16
+ def run file
17
+ name, ext = file.split '.'
18
+ return unless ext == 'txt'
19
+ direction, name = name.split '-'
20
+ return unless direction == 'input'
21
+ headers, received, sent, originals = [], [], [], []
22
+ @dmem.parse(File.read(file)).each do |packet|
23
+ case packet.type
24
+ when :received then received << packet.packet.join
25
+ when :sent then sent << packet.packet.join
26
+ else raise StandardError, "invalid type #{type}"
27
+ end
28
+ headers << packet.header.join
29
+ originals << packet.original.join
30
+ end
31
+ File.write('header-' + name + '.txt', headers.join("\n"))
32
+ File.write('sent-' + name + '.txt', sent.join("\n"))
33
+ File.write('received-' + name + '.txt', received.join("\n"))
34
+ File.write('original-' + name + '.txt', originals.join("\n"))
35
+ end
36
+ end
37
+ end
38
+
39
+ runner = PacketViaDMEM::CreateTestFiles.new
40
+ ARGV.each do |arg|
41
+ runner.run arg
42
+ end
@@ -19,9 +19,12 @@ class PacketViaDMEM
19
19
  pop += offset
20
20
  case pkt[4+offset..5+offset].join.to_i(16)
21
21
  when 0x8000 then pop+=14
22
- when 0x4220 # ae/802.1AX is special, no L2 received, but something extra
23
- pop+=18
24
- push = FAKE[:dmac] + FAKE[:smac] + FAKE[:etype_ipv4]
22
+ # ae/802.1AX is special, I seem to have 2 bytes I don't know
23
+ # and ethertype missing, and MAC is weird, mpls labels are present
24
+ # i'd need example carrying IPv4/IPv6 instead of MPLS to decide those two bytes
25
+ when 0x4220
26
+ pop+=14 #pop macs and weird two bytes (return macs in push)
27
+ push = pkt[8+offset..19+offset] + FAKE[:etype_mpls]
25
28
  when 0x2000 # these were BFD packets from control-plane
26
29
  pop+=5
27
30
  push = FAKE[:dmac] + FAKE[:smac] + FAKE[:etype_ipv4]
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'packet_via_dmem'
3
- s.version = '0.0.5'
3
+ s.version = '0.0.6'
4
4
  s.licenses = %w( Apache-2.0 )
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = [ 'Saku Ytti' ]
@@ -0,0 +1,85 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/pride'
3
+ require_relative '../lib/packet_via_dmem'
4
+
5
+ CAPTURES = File.expand_path File.join(File.dirname(__FILE__), '..', 'capture')
6
+
7
+ describe PacketViaDMEM do
8
+
9
+ before do
10
+ @dmem = PacketViaDMEM.new
11
+ @input = {}
12
+ @sent = {}
13
+ @received = {}
14
+ @original = {}
15
+ @header = {}
16
+ Dir.glob(File.join(CAPTURES, '*.txt')) do |entry|
17
+ _directory, file = File.split entry
18
+ file, _ext = file.split '.'
19
+ type, name = file.split '-'
20
+ next unless name
21
+ case type
22
+ when 'input' then @input[name] = File.read entry
23
+ when 'received' then @received[name] = File.read(entry).split
24
+ when 'sent' then @sent[name] = File.read(entry).split
25
+ when 'original' then @original[name] = File.read(entry).split
26
+ when 'header' then @header[name] = File.read(entry).split
27
+ end
28
+ end
29
+ end
30
+
31
+ describe '#parse' do
32
+ before do
33
+ @parsed = {}
34
+ @input.each do |name, str|
35
+ @parsed[name] = @dmem.parse str
36
+ end
37
+ end
38
+
39
+ it 'returns as many times as called' do
40
+ @parsed.size.must_equal @input.size
41
+ end
42
+
43
+ it 'produces correct headers' do
44
+ @parsed.each do |name, packets|
45
+ packets.each_with_index do |packet, index|
46
+ packet.header.join.must_equal @header[name][index], "header #{name} at line #{index+1}"
47
+ end
48
+ packets.size.must_equal @header[name].size, "header #{name} has incorrect amount of packets"
49
+ end
50
+ end
51
+
52
+ it 'produces correct received frames' do
53
+ @parsed.each do |name, packets|
54
+ index = -1
55
+ packets.each do |packet|
56
+ next unless packet.type == :received
57
+ packet.packet.join.must_equal @received[name][index+=1], "received #{name} at line #{index+1}"
58
+ end
59
+ @received[name].size.must_equal index+1, "received #{name} has incorrect amount of packets"
60
+ end
61
+ end
62
+
63
+ it 'produces correct sent frames' do
64
+ @parsed.each do |name, packets|
65
+ index = -1
66
+ packets.each do |packet|
67
+ next unless packet.type == :sent
68
+ packet.packet.join.must_equal @sent[name][index+=1], "sent #{name} at line #{index+1}"
69
+ end
70
+ @sent[name].size.must_equal index+1, "sent #{name} has incorrect amount of packets"
71
+ end
72
+ end
73
+
74
+ it 'produces correct original frames' do
75
+ @parsed.each do |name, packets|
76
+ packets.each_with_index do |packet, index|
77
+ packet.original.join.must_equal @original[name][index], "original #{name} at line #{index+1}"
78
+ end
79
+ packets.size.must_equal @header[name].size, "original #{name} has incorrect amount of packets"
80
+ end
81
+ end
82
+
83
+ end
84
+
85
+ end
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.5
4
+ version: 0.0.6
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-02-27 00:00:00.000000000 Z
11
+ date: 2015-02-28 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/generate.rb
41
42
  - lib/packet_via_dmem.rb
42
43
  - lib/packet_via_dmem/cli.rb
43
44
  - lib/packet_via_dmem/packet.rb
@@ -45,6 +46,7 @@ files:
45
46
  - lib/packet_via_dmem/received.rb
46
47
  - lib/packet_via_dmem/sent.rb
47
48
  - packet_via_dmem.gemspec
49
+ - spec/packet_via_dmem_spec.rb
48
50
  homepage: http://github.com/ytti/packet_via_dmem
49
51
  licenses:
50
52
  - Apache-2.0