@@ -127,13 +127,8 @@ func (t *tracing) traceProg(spec *ebpf.CollectionSpec,
127
127
128
128
func (t * tracing ) trace (coll * ebpf.Collection , spec * ebpf.CollectionSpec ,
129
129
opts * ebpf.CollectionOptions , outputSkb bool , outputShinfo bool ,
130
- n2a BpfProgName2Addr , progType ebpf.ProgramType , tracingName string ,
130
+ n2a BpfProgName2Addr , progs [] * ebpf.Program , tracingName string ,
131
131
) error {
132
- progs , err := listBpfProgs (progType )
133
- if err != nil {
134
- return fmt .Errorf ("failed to list bpf progs: %w" , err )
135
- }
136
-
137
132
// Reusing maps from previous collection is to handle the events together
138
133
// with the kprobes.
139
134
replacedMaps := map [string ]* ebpf.Map {
@@ -148,9 +143,6 @@ func (t *tracing) trace(coll *ebpf.Collection, spec *ebpf.CollectionSpec,
148
143
}
149
144
opts .MapReplacements = replacedMaps
150
145
151
- t .links = make ([]link.Link , 0 , len (progs ))
152
- t .progs = progs
153
-
154
146
var errg errgroup.Group
155
147
156
148
for _ , prog := range progs {
@@ -174,8 +166,16 @@ func TraceTC(coll *ebpf.Collection, spec *ebpf.CollectionSpec,
174
166
) * tracing {
175
167
log .Printf ("Attaching tc-bpf progs...\n " )
176
168
169
+ progs , err := listBpfProgs (ebpf .SchedCLS )
170
+ if err != nil {
171
+ log .Fatalf ("failed to list tc-bpf progs: %v" , err )
172
+ }
173
+
177
174
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 {
179
179
log .Fatalf ("failed to trace TC progs: %v" , err )
180
180
}
181
181
@@ -188,19 +188,27 @@ func TraceXDP(coll *ebpf.Collection, spec *ebpf.CollectionSpec,
188
188
) * tracing {
189
189
log .Printf ("Attaching xdp progs...\n " )
190
190
191
+ progs , err := listBpfProgs (ebpf .XDP )
192
+ if err != nil {
193
+ log .Fatalf ("failed to list XDP progs: %v" , err )
194
+ }
195
+
191
196
var t tracing
197
+ t .progs = progs
198
+ t .links = make ([]link.Link , 0 , len (progs )* 2 )
199
+
192
200
{
193
201
spec := spec .Copy ()
194
202
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 {
196
204
log .Fatalf ("failed to trace XDP progs: %v" , err )
197
205
}
198
206
}
199
207
200
208
{
201
209
spec := spec .Copy ()
202
210
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 {
204
212
log .Fatalf ("failed to trace XDP progs: %v" , err )
205
213
}
206
214
}
0 commit comments