packet_via_dmem 0.0.2 → 0.0.3
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 +3 -2
- data/lib/packet_via_dmem.rb +48 -19
- data/packet_via_dmem.gemspec +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b47f13f61222ca447bf34212f1de3d08670bceaa
|
4
|
+
data.tar.gz: d6d328de5f66ab0375feded9d1c98b591e93a76c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: adcfe3a75112cdecbd2ae523708f3f69dfab4a40d3835364d31d68bafb44d5a9df3fe9ca30041d45d5f8c8ba914159031837b404705db8824a872374383cb9d4
|
7
|
+
data.tar.gz: 9da8b106d908c403fbabb707a2f9217e3f6d45725998f8017aaec6710a037f1dc9ebbe6ae3d4efc083159fb0f8f9008b10cb2795d2dbdf80cc6a5f6bd01cb105
|
data/README.md
CHANGED
@@ -79,10 +79,11 @@ To capture say packets with IP address 10.11.12.13
|
|
79
79
|
* Second and third byte appear to tell nothing about where packet came from,
|
80
80
|
but more when it came from. Timing? Counter? Randomness?
|
81
81
|
|
82
|
-
* Fourth byte is 0xf0 on MX80, tendency for last nibble to be 0. Perhaps src fabric stream?
|
82
|
+
* Fourth byte is 0xf0 on MX80, tendency for last nibble to be 0. Perhaps src fabric stream? If it is zero, we get what seems to be trash (internal stuff?)
|
83
|
+
|
83
84
|
* Fifth byte appears to be source port?
|
84
85
|
|
85
|
-
* Sixth byte is perhaps source NPU?
|
86
|
+
* Sixth byte is perhaps source NPU? If it is zero, we get what seems to be trash (internal stuff)
|
86
87
|
|
87
88
|
* 00 (22) (33) (44) \<src\> (66)
|
88
89
|
* 10 (22) (33) (44) \<si\> \<ze\> \<src\> (66)
|
data/lib/packet_via_dmem.rb
CHANGED
@@ -5,7 +5,9 @@ class PacketViaDMEM
|
|
5
5
|
FAKE = {
|
6
6
|
:dmac => %w( 22 22 22 22 22 22 ),
|
7
7
|
:smac => %w( 66 66 66 66 66 66 ),
|
8
|
-
:
|
8
|
+
:etype_mpls => %w( 88 47 ),
|
9
|
+
:etype_ipv4 => %w( 08 00 ),
|
10
|
+
:ipv4 => %w( 45 ),
|
9
11
|
}
|
10
12
|
HEADER_SIZE = {
|
11
13
|
:received => 6,
|
@@ -49,26 +51,53 @@ class PacketViaDMEM
|
|
49
51
|
private
|
50
52
|
|
51
53
|
def get_pop_push type, pkt
|
52
|
-
|
53
|
-
|
54
|
-
case pkt.first.to_i(16)
|
55
|
-
when 0x00 # we're sending to fabric
|
56
|
-
# we may send MAC to fabric,byte 6, 7, 9, 11, 21?
|
57
|
-
if pkt[5].to_i(16) == 0xf0 # we don't send MAC to fabric
|
58
|
-
push = FAKE[:dmac] + FAKE[:smac] + FAKE[:etype]
|
59
|
-
24
|
60
|
-
else # we send MAC to fabric
|
61
|
-
33
|
62
|
-
end
|
63
|
-
when 0x08 then 13
|
64
|
-
else @sent
|
65
|
-
end
|
54
|
+
if type == :sent
|
55
|
+
get_pop_push_sent pkt
|
66
56
|
else
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
57
|
+
get_pop_push_received pkt
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_pop_push_sent pkt
|
62
|
+
pop, push = nil, []
|
63
|
+
case pkt.first.to_i(16)
|
64
|
+
when 0x00 # we're sending to fabric
|
65
|
+
# we may send MAC to fabric,byte 6, 7, 9, 11, 21?
|
66
|
+
if pkt[5].to_i(16) == 0xf0 # we don't send MAC to fabric
|
67
|
+
push = FAKE[:dmac] + FAKE[:smac] + FAKE[:etype_mpls]
|
68
|
+
pop = 24
|
69
|
+
else # we send MAC to fabric
|
70
|
+
pop = 33
|
71
71
|
end
|
72
|
+
when 0x08 then pop = 13
|
73
|
+
else pop = @sent
|
74
|
+
end
|
75
|
+
[pop, push]
|
76
|
+
end
|
77
|
+
|
78
|
+
def get_pop_push_received pkt
|
79
|
+
pop, push = 6, []
|
80
|
+
offset = 0
|
81
|
+
case pkt.first.to_i(16)
|
82
|
+
when 0x00 then offset = 0 #1,2,3,4,5,6
|
83
|
+
when 0x10 then offset = 2 #1,2,3,4,7,8,5,6
|
84
|
+
else pop = @received
|
85
|
+
end
|
86
|
+
pop += offset
|
87
|
+
case pkt[4+offset..5+offset].join.to_i(16)
|
88
|
+
when 0x8000 then pop+=14
|
89
|
+
when 0x4220 # ae/802.1AX is special, no L2 received, but something extra
|
90
|
+
pop+=18
|
91
|
+
push = FAKE[:dmac] + FAKE[:smac] + FAKE[:etype_ipv4]
|
92
|
+
when 0x2000 # these were BFD packets from control-plane
|
93
|
+
pop+=5
|
94
|
+
push = FAKE[:dmac] + FAKE[:smac] + FAKE[:etype_ipv4]
|
95
|
+
# some BGP packets like this
|
96
|
+
# also SMB2 TCP Seq1 (maybe post ARP from control-plane?)
|
97
|
+
# they are misssing all of ipv4 headers before TTL
|
98
|
+
when 0x1f00
|
99
|
+
pop+=7
|
100
|
+
push = FAKE[:dmac] + FAKE[:smac] + FAKE[:etype_ipv4] + FAKE[:ipv4]
|
72
101
|
end
|
73
102
|
[pop, push]
|
74
103
|
end
|
data/packet_via_dmem.gemspec
CHANGED