Skip to content

Commit 40a969a

Browse files
bogdanvbalanbogdan.balan1iluxa
authored
Add tests to packet poller (#184)
* Add tests to packet poller * disable LayersPacket error * resolve issue 856 * Update tests --------- Co-authored-by: bogdan.balan1 <[email protected]> Co-authored-by: Ilya Gavrilov <[email protected]>
1 parent 96caf7d commit 40a969a

File tree

5 files changed

+645
-5
lines changed

5 files changed

+645
-5
lines changed

pkg/bpf/tls_stream.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,8 @@ func (t *TlsStream) writeLayers(timestamp uint64, cgroupId uint64, direction uin
170170

171171
pkt, parseErr := t.poller.layerParser.CreatePacket(bufBytes, cgroupId, unixpacket.PacketDirection(direction), ci, decodeOptions)
172172
if parseErr != nil {
173-
log.Error().Err(parseErr).Msg("DecodingLayerParser failed")
173+
// gopacket.NewPacket is recovers in case of errors, so we can return nil
174+
log.Debug().Err(parseErr).Msg("DecodingLayerParser failed")
174175
return
175176
}
176177
t.stats.PacketsGot++

pkg/decodedpacket/decoded_packet.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,3 +491,5 @@ func (p *DecodedPacket) SetErrorLayer(l gopacket.ErrorLayer) {
491491
}
492492
}
493493
}
494+
495+
func DetectIPVersion(data []byte) int { return detectIPVersion(data) }

pkg/poller/packets/packets_poller.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ import (
2222
"github.com/rs/zerolog/log"
2323
)
2424

25+
type perfReader interface {
26+
ReadInto(r *perf.Record) error
27+
Close() error
28+
SetDeadline(t time.Time)
29+
}
30+
2531
// Buffer pool for pktBuffer objects to avoid large allocations
2632
var pktBufferPool = sync.Pool{
2733
New: func() interface{} {
@@ -118,7 +124,7 @@ type PacketsPoller struct {
118124
pktsMaps []map[uint64]*pktBuffer // one map per CPU
119125
maxCPUs int
120126
// Original fields
121-
chunksReader *perf.Reader
127+
chunksReader perfReader
122128
gopacketWriter bpf.GopacketWriter
123129
rawPacketWriter rawpacket.RawPacketWriter
124130
receivedPackets uint64
@@ -342,6 +348,7 @@ func (p *PacketsPoller) handlePktChunk(chunk *pktBuffer) (bool, error) {
342348

343349
func (p *PacketsPoller) writePacket(pktBuf *pktBuffer, ptr *tracerPacketsData) (bool, error) {
344350
if p.gopacketWriter == nil {
351+
pktBufferPool.Put(pktBuf)
345352
return false, nil
346353
}
347354

@@ -379,9 +386,11 @@ func (p *PacketsPoller) writePacket(pktBuf *pktBuffer, ptr *tracerPacketsData) (
379386

380387
packet, parseErr := pktBuf.layerParser.CreatePacket(pkt, ptr.CgroupID, unixpacket.PacketDirection(ptr.Direction), ci, decodeOptions)
381388
if parseErr != nil {
382-
log.Error().Err(parseErr).Msg("DecodingLayerParser failed")
389+
log.Debug().Err(parseErr).Msg("DecodingLayerParser failed")
383390
p.stats.PacketsError++
384-
return false, parseErr
391+
pktBufferPool.Put(pktBuf)
392+
// gopacket.NewPacket is recovers in case of errors, so we can return nil
393+
return false, nil
385394
}
386395
p.stats.PacketsGot++
387396
p.stats.BytesProcessed += uint64(len(pkt))

0 commit comments

Comments
 (0)