packet_via_dmem 0.0.5 → 0.0.6

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