Skip to content

Commit 153f993

Browse files
committed
userspace to switch to use ringbuf
Signed-off-by: Mohamed Mahmoud <[email protected]>
1 parent 44acae4 commit 153f993

File tree

10 files changed

+22
-816
lines changed

10 files changed

+22
-816
lines changed

Diff for: examples/packetcapture-dump/README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ Start the packetcapture-client using: (in a secondary shell)
1919

2020
Start the agent using:
2121
```bash
22-
sudo TARGET_HOST=localhost TARGET_PORT=9990 ENABLE_PCA="true" FILTER_IP_CIDR="0.0.0.0/0" FILTER_PROTOCOL="TCP" FILTER_PORT=22 FILTER_ACTION="Accept" ./bin/netobserv-ebpf-agent
22+
sudo TARGET_HOST=localhost TARGET_PORT=9990 ENABLE_PCA="true" FLOW_FILTER_RULES='[{"ip_cidr":"0.0.0.0/0","protocol":"TCP","action":"Accept"}]' ./bin/netobserv-ebpf-agent
23+
2324
```
2425

2526
You should see output such as:

Diff for: pkg/agent/packets_agent.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
"github.com/netobserv/netobserv-ebpf-agent/pkg/model"
1616
"github.com/netobserv/netobserv-ebpf-agent/pkg/tracer"
1717

18-
"github.com/cilium/ebpf/perf"
18+
"github.com/cilium/ebpf/ringbuf"
1919
"github.com/sirupsen/logrus"
2020
)
2121

@@ -47,7 +47,7 @@ type ebpfPacketFetcher interface {
4747
AttachTCX(iface ifaces.Interface) error
4848
DetachTCX(iface ifaces.Interface) error
4949
LookupAndDeleteMap(*metrics.Metrics) map[int][]*byte
50-
ReadPerf() (perf.Record, error)
50+
ReadPerf() (ringbuf.Record, error)
5151
}
5252

5353
// PacketsAgent instantiates a new agent, given a configuration.

Diff for: pkg/flow/tracer_perf.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"fmt"
88
"time"
99

10-
"github.com/cilium/ebpf/perf"
10+
"github.com/cilium/ebpf/ringbuf"
1111
"github.com/netobserv/gopipes/pkg/node"
1212
"github.com/netobserv/netobserv-ebpf-agent/pkg/model"
1313
"github.com/sirupsen/logrus"
@@ -24,7 +24,7 @@ type PerfTracer struct {
2424
}
2525

2626
type perfReader interface {
27-
ReadPerf() (perf.Record, error)
27+
ReadPerf() (ringbuf.Record, error)
2828
}
2929

3030
func NewPerfTracer(
@@ -46,7 +46,7 @@ func (m *PerfTracer) TraceLoop(ctx context.Context) node.StartFunc[*model.Packet
4646
default:
4747
if err := m.listenAndForwardPerf(out); err != nil {
4848

49-
if errors.Is(err, perf.ErrClosed) {
49+
if errors.Is(err, ringbuf.ErrClosed) {
5050
pblog.Debug("Received signal, exiting..")
5151
return
5252
}

Diff for: pkg/model/packet_record.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,25 @@ func NewPacketRecord(
2828
return &pr
2929
}
3030

31-
// ReadRawPacket reads a PacketRecord from a binary source, in LittleEndian order
31+
// ReadRawPacket reads a PacketRecord from a binary source, in NativeEndian order
3232
func ReadRawPacket(reader io.Reader) (*PacketRecord, error) {
3333
var pr PacketRecord
3434
currentTime := time.Now()
3535
monotonicTimeNow := monotime.Now()
3636
getLen := make([]byte, 4)
3737
packetTimestamp := make([]byte, 8)
38-
// Read IfIndex and discard it: To be used in other usecases
39-
_ = binary.Read(reader, binary.LittleEndian, make([]byte, 4))
40-
// Read Length of packet
41-
_ = binary.Read(reader, binary.LittleEndian, getLen)
42-
pr.Stream = make([]byte, binary.LittleEndian.Uint32(getLen))
43-
// Read TimeStamp of packet
44-
_ = binary.Read(reader, binary.LittleEndian, packetTimestamp)
38+
// Read IfIndex and discard it: To be used in other use cases
39+
_ = binary.Read(reader, binary.NativeEndian, make([]byte, 4))
40+
// Read Length of a packet
41+
_ = binary.Read(reader, binary.NativeEndian, getLen)
42+
pr.Stream = make([]byte, binary.NativeEndian.Uint32(getLen))
43+
// Read TimeStamp of a packet
44+
_ = binary.Read(reader, binary.NativeEndian, packetTimestamp)
4545
// The assumption is monotonic time should be as close to time recorded by ebpf.
4646
// The difference is considered the delta time from current time.
47-
tsDelta := time.Duration(uint64(monotonicTimeNow) - binary.LittleEndian.Uint64(packetTimestamp))
47+
tsDelta := time.Duration(uint64(monotonicTimeNow) - binary.NativeEndian.Uint64(packetTimestamp))
4848
pr.Time = currentTime.Add(-tsDelta)
4949

50-
err := binary.Read(reader, binary.LittleEndian, &pr.Stream)
50+
err := binary.Read(reader, binary.NativeEndian, &pr.Stream)
5151
return &pr, err
5252
}

Diff for: pkg/model/record.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,10 @@ func (m *MacAddr) MarshalJSON() ([]byte, error) {
192192
return []byte("\"" + m.String() + "\""), nil
193193
}
194194

195-
// ReadFrom reads a Record from a binary source, in LittleEndian order
195+
// ReadFrom reads a Record from a binary source, in NativeEndian order
196196
func ReadFrom(reader io.Reader) (*RawRecord, error) {
197197
var fr RawRecord
198-
err := binary.Read(reader, binary.LittleEndian, &fr)
198+
err := binary.Read(reader, binary.NativeEndian, &fr)
199199
return &fr, err
200200
}
201201

Diff for: pkg/tracer/tracer.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
cilium "github.com/cilium/ebpf"
2020
"github.com/cilium/ebpf/btf"
2121
"github.com/cilium/ebpf/link"
22-
"github.com/cilium/ebpf/perf"
2322
"github.com/cilium/ebpf/ringbuf"
2423
"github.com/cilium/ebpf/rlimit"
2524
"github.com/gavv/monotime"
@@ -1279,7 +1278,7 @@ type PacketFetcher struct {
12791278
qdiscs map[ifaces.Interface]*netlink.GenericQdisc
12801279
egressFilters map[ifaces.Interface]*netlink.BpfFilter
12811280
ingressFilters map[ifaces.Interface]*netlink.BpfFilter
1282-
perfReader *perf.Reader
1281+
perfReader *ringbuf.Reader
12831282
cacheMaxSize int
12841283
enableIngress bool
12851284
enableEgress bool
@@ -1392,7 +1391,7 @@ func NewPacketFetcher(cfg *FlowFetcherConfig) (*PacketFetcher, error) {
13921391
}
13931392

13941393
// read packets from igress+egress perf array
1395-
packets, err := perf.NewReader(objects.PacketRecord, os.Getpagesize())
1394+
packets, err := ringbuf.NewReader(objects.BpfMaps.PacketRecord)
13961395
if err != nil {
13971396
return nil, fmt.Errorf("accessing to perf: %w", err)
13981397
}
@@ -1752,7 +1751,7 @@ func (p *PacketFetcher) Close() error {
17521751
return errors.New(`errors: "` + strings.Join(errStrings, `", "`) + `"`)
17531752
}
17541753

1755-
func (p *PacketFetcher) ReadPerf() (perf.Record, error) {
1754+
func (p *PacketFetcher) ReadPerf() (ringbuf.Record, error) {
17561755
return p.perfReader.Read()
17571756
}
17581757

Diff for: vendor/github.com/cilium/ebpf/perf/doc.go

-5
This file was deleted.

0 commit comments

Comments
 (0)