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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c3437cddffd7d621744b7ac1d8fbfac6243d5b7f
4
- data.tar.gz: b50cb9dc98e3faeabb9be6f8d89cf96d28941edb
3
+ metadata.gz: 8817b2bac1c9fe1cdf6a2f24c90508bfb5bddc54
4
+ data.tar.gz: 092b207f0481c995223532662c21d37c001e42b1
5
5
  SHA512:
6
- metadata.gz: 299fbfc90cc15cdf0e122f850092995423757ad118878feef5811dfcd6b15d362c936e0dd8793bfe033ce7da08c0bd040da4c9a9fd1ecedaecffc41e52517028
7
- data.tar.gz: 741a8465e4209dce7d095d20ef888feac578f4bb3a33156919d425d0c6ff7094054008445c4c33c9a6986da756ac4c4fd00615c577ee6b6401793ba7480ad394
6
+ metadata.gz: 79f503258a66b6e81d43fb2c5e0d2109172172fbb0cb6942d19d2ac250ea6c2f2e4a142f8b3bb156e6ea50ea68c0c1ce80a36ffd37fc03bbeed73bbc01025856
7
+ data.tar.gz: a54c11bbc0021679f9dc45ca181cab80c99011bf6e1891e3aa1f9e9ac56ae923c84a1fea96f5ddbf1dd7ebc5af599fcd5468cda4c8b869fb32f47819d6840bd2
@@ -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
- @debug = opts.delete :debug
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 @debug
32
+ packets = Packets.new @log
28
33
  @sc.string = str
29
34
  while @sc.scan_until PACKET
30
35
  match = @sc.matched.split(/\s+/)
@@ -8,8 +8,9 @@ class PacketViaDMEM
8
8
  attr_reader :debug
9
9
 
10
10
  def initialize
11
- @opts = opts_parse
12
- @debug = @opts.debug?
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
- :debug=>@opts.debug?).parse file
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.header.join(' ') if @opts.headers?
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 '--headers', 'print headers to stderr'
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: %d (%s) # ' % [port, port.divmod(64).join('/')]
21
- str << "type: %d\n" % 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: %d (%s) # ' % [port, port.divmod(64) ]
35
- str << 'type: %d # ' % 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
- case header.type
58
- when *Type::MPLS, *Type::SELF, *Type::SENT
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
- push = pkt[0..11] + FAKE[:etype_mpls]
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
- $stderr.puts "magic_self: magic: (%x/%x), port: %x'" % [header.magic1, header.magic2, header.port] if @debug
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 debug
11
- @debug = debug
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, @debug
18
- when :sent then Sent.new packet, @debug
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
@@ -2,8 +2,8 @@ require_relative 'header/received'
2
2
  class PacketViaDMEM
3
3
  class Received < Packet
4
4
 
5
- def initialize packet, debug
6
- @debug = debug
5
+ def initialize packet, log
6
+ @log = log
7
7
  @type = :received
8
8
  @original = packet.dup
9
9
  @header = Header::Received.new
@@ -2,8 +2,8 @@ require_relative 'header/sent'
2
2
  class PacketViaDMEM
3
3
  class Sent < Packet
4
4
 
5
- def initialize packet, debug
6
- @debug = debug
5
+ def initialize packet, log
6
+ @log = log
7
7
  @type = :sent
8
8
  @original = packet.dup
9
9
  @header = Header::Sent.new
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'packet_via_dmem'
3
- s.version = '0.0.12'
3
+ s.version = '0.0.14'
4
4
  s.licenses = %w( Apache-2.0 )
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = [ 'Saku Ytti' ]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packet_via_dmem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Saku Ytti