-
Notifications
You must be signed in to change notification settings - Fork 4
/
capture_interface.go
61 lines (46 loc) · 1003 Bytes
/
capture_interface.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// SPDX-FileCopyrightText: 2023 Steffen Vogel <post@steffenvogel.de>
// SPDX-License-Identifier: Apache-2.0
package gont
import (
"errors"
"io"
"time"
"github.com/gopacket/gopacket/pcapgo"
"go.uber.org/zap"
)
type captureStats struct {
PacketsReceived uint64
PacketsDropped uint64
}
type captureInterface struct {
*Interface
pcapInterfaceIndex int
pcapInterface pcapgo.NgInterface
StartTime time.Time
source packetSource
logger *zap.Logger
}
func (ci *captureInterface) Flush() {
}
func (ci *captureInterface) readPackets(c *Capture) {
for {
if err := ci.readPacket(c); err != nil {
if errors.Is(err, io.EOF) {
break
} else {
c.logger.Error("Failed to read packet data", zap.Error(err))
continue
}
}
}
}
func (ci *captureInterface) readPacket(c *Capture) error {
var err error
var cp CapturePacket
if cp.Data, cp.CaptureInfo, err = ci.source.ReadPacketData(); err != nil {
return err
}
cp.Interface = ci
c.newPacket(cp)
return nil
}