packet_via_dmem 0.0.12 → 0.0.14

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: 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