From f01b79e6255751bf2fe7a5db22226d205748e2b6 Mon Sep 17 00:00:00 2001 From: eddc005 Date: Mon, 6 May 2024 23:04:54 +0100 Subject: [PATCH] rebase and remove replayDelay --- cmd/root.go | 3 --- io/pcap.go | 20 ++++++++++---------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index d6c0083..136f456 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -137,7 +137,6 @@ func initConfig() { } viper.SetDefault("replay.realtime", true) - viper.SetDefault("replay.replayDelay", 10 * time.Millisecond) } func initLogger() { @@ -185,7 +184,6 @@ type cliConfigIO struct { type cliConfigReplay struct { Realtime bool `mapstructure:"realtime"` - ReplayDelay time.Duration `mapstructure:"replayDelay"` } type cliConfigWorkers struct { @@ -216,7 +214,6 @@ func (c *cliConfig) fillIO(config *engine.Config) error { ioImpl, err = io.NewPcapPacketIO(io.PcapPacketIOConfig{ PcapFile: pcapFile, Realtime: c.Replay.Realtime, - ReplayDelay: c.Replay.ReplayDelay, }) } else { // Setup IO for nfqueue diff --git a/io/pcap.go b/io/pcap.go index 36bbbaa..995332b 100644 --- a/io/pcap.go +++ b/io/pcap.go @@ -24,7 +24,6 @@ type pcapPacketIO struct { type PcapPacketIOConfig struct { PcapFile string Realtime bool - ReplayDelay time.Duration } func NewPcapPacketIO(config PcapPacketIOConfig) (PacketIO, error) { @@ -34,8 +33,6 @@ func NewPcapPacketIO(config PcapPacketIOConfig) (PacketIO, error) { return nil, err } - print(config.ReplayDelay) - return &pcapPacketIO{ pcap: handle, lastTime: nil, @@ -58,8 +55,9 @@ func (p *pcapPacketIO) Register(ctx context.Context, cb PacketCallback) error { id := crc32.Checksum([]byte(strings.Join(endpoints, ",")), crc32.IEEETable) cb(&pcapPacket{ - streamID: id, - data: packet.LinkLayer().LayerPayload(), + streamID: id, + timestamp: packet.Metadata().Timestamp, + data: packet.LinkLayer().LayerPayload(), }, nil) } } @@ -91,10 +89,8 @@ func (p *pcapPacketIO) Close() error { // Intentionally slow down the replay // In realtime mode, this is to match the timestamps in the capture -// In non realtime mode, this helps to avoid flooding the workers func (p *pcapPacketIO) wait(packet gopacket.Packet) error { if !p.config.Realtime { - time.Sleep(p.config.ReplayDelay) return nil } @@ -112,15 +108,19 @@ func (p *pcapPacketIO) wait(packet gopacket.Packet) error { var _ Packet = (*pcapPacket)(nil) type pcapPacket struct { - streamID uint32 - data []byte + streamID uint32 + timestamp time.Time + data []byte } func (p *pcapPacket) StreamID() uint32 { return p.streamID } +func (p *pcapPacket) Timestamp() time.Time { + return p.timestamp +} + func (p *pcapPacket) Data() []byte { return p.data } -