Skip to content

Commit 0dc9829

Browse files
Asphalttbrb
authored andcommitted
Fix a minor code logic issue of xdp tracing
In `TraceXDP()`, it traces XDP progs by `fentry_xdp` and `fexit_xdp` at the same time. However, in `tracing.trace()`, it will reset its `links` and `progs`. It should not reset them to support tracing XDP progs by `fentry_xdp` and `fexit_xdp` at the same time. So, it's better to propagate the target tracing bpf progs to `tracing.trace()` from `TraceXDP()` and `TraceTC()`. Signed-off-by: Leon Hwang <[email protected]>
1 parent 1de15ff commit 0dc9829

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

internal/pwru/tracing.go

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,8 @@ func (t *tracing) traceProg(spec *ebpf.CollectionSpec,
127127

128128
func (t *tracing) trace(coll *ebpf.Collection, spec *ebpf.CollectionSpec,
129129
opts *ebpf.CollectionOptions, outputSkb bool, outputShinfo bool,
130-
n2a BpfProgName2Addr, progType ebpf.ProgramType, tracingName string,
130+
n2a BpfProgName2Addr, progs []*ebpf.Program, tracingName string,
131131
) error {
132-
progs, err := listBpfProgs(progType)
133-
if err != nil {
134-
return fmt.Errorf("failed to list bpf progs: %w", err)
135-
}
136-
137132
// Reusing maps from previous collection is to handle the events together
138133
// with the kprobes.
139134
replacedMaps := map[string]*ebpf.Map{
@@ -148,9 +143,6 @@ func (t *tracing) trace(coll *ebpf.Collection, spec *ebpf.CollectionSpec,
148143
}
149144
opts.MapReplacements = replacedMaps
150145

151-
t.links = make([]link.Link, 0, len(progs))
152-
t.progs = progs
153-
154146
var errg errgroup.Group
155147

156148
for _, prog := range progs {
@@ -174,8 +166,16 @@ func TraceTC(coll *ebpf.Collection, spec *ebpf.CollectionSpec,
174166
) *tracing {
175167
log.Printf("Attaching tc-bpf progs...\n")
176168

169+
progs, err := listBpfProgs(ebpf.SchedCLS)
170+
if err != nil {
171+
log.Fatalf("failed to list tc-bpf progs: %v", err)
172+
}
173+
177174
var t tracing
178-
if err := t.trace(coll, spec, opts, outputSkb, outputShinfo, n2a, ebpf.SchedCLS, "fentry_tc"); err != nil {
175+
t.progs = progs
176+
t.links = make([]link.Link, 0, len(progs))
177+
178+
if err := t.trace(coll, spec, opts, outputSkb, outputShinfo, n2a, progs, "fentry_tc"); err != nil {
179179
log.Fatalf("failed to trace TC progs: %v", err)
180180
}
181181

@@ -188,19 +188,27 @@ func TraceXDP(coll *ebpf.Collection, spec *ebpf.CollectionSpec,
188188
) *tracing {
189189
log.Printf("Attaching xdp progs...\n")
190190

191+
progs, err := listBpfProgs(ebpf.XDP)
192+
if err != nil {
193+
log.Fatalf("failed to list XDP progs: %v", err)
194+
}
195+
191196
var t tracing
197+
t.progs = progs
198+
t.links = make([]link.Link, 0, len(progs)*2)
199+
192200
{
193201
spec := spec.Copy()
194202
delete(spec.Programs, "fexit_xdp")
195-
if err := t.trace(coll, spec, opts, outputSkb, outputShinfo, n2a, ebpf.XDP, "fentry_xdp"); err != nil {
203+
if err := t.trace(coll, spec, opts, outputSkb, outputShinfo, n2a, progs, "fentry_xdp"); err != nil {
196204
log.Fatalf("failed to trace XDP progs: %v", err)
197205
}
198206
}
199207

200208
{
201209
spec := spec.Copy()
202210
delete(spec.Programs, "fentry_xdp")
203-
if err := t.trace(coll, spec, opts, outputSkb, outputShinfo, n2a, ebpf.XDP, "fexit_xdp"); err != nil {
211+
if err := t.trace(coll, spec, opts, outputSkb, outputShinfo, n2a, progs, "fexit_xdp"); err != nil {
204212
log.Fatalf("failed to trace XDP progs: %v", err)
205213
}
206214
}

0 commit comments

Comments
 (0)