Skip to content

Commit 1ad3cce

Browse files
Asphalttbrb
authored andcommitted
Replace objs with collection
Go is a static programming language which is lack of dynamic struct for our `print_skb_map` case. But the go-ebpf library provides a dynamic way for this case, which is `NewCollectionWithOptions()`. With this way, it is unnecessary to define type interfaces and their getters. Signed-off-by: Leon Hwang <[email protected]>
1 parent 88ccb27 commit 1ad3cce

4 files changed

Lines changed: 14 additions & 260 deletions

File tree

build.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,5 @@
66
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -target $TARGET_GOARCH -cc clang -no-strip KProbeMultiPWRU ./bpf/kprobe_pwru.c -- -DOUTPUT_SKB -DHAS_KPROBE_MULTI -I./bpf/headers -Wno-address-of-packed-member
77
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -target $TARGET_GOARCH -cc clang -no-strip KProbePWRUWithoutOutputSKB ./bpf/kprobe_pwru.c -- -I./bpf/headers -Wno-address-of-packed-member
88
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -target $TARGET_GOARCH -cc clang -no-strip KProbeMultiPWRUWithoutOutputSKB ./bpf/kprobe_pwru.c -- -D HAS_KPROBE_MULTI -I./bpf/headers -Wno-address-of-packed-member
9-
//go:generate go run ./tools/getgetter.go -struct ^(KProbePWRU|KProbeMultiPWRU|KProbePWRUWithoutOutputSKB|KProbeMultiPWRUWithoutOutputSKB)(Programs|Maps)$
109

1110
package main

internal/pwru/types.go

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"os"
1010
"strings"
1111

12-
"github.com/cilium/ebpf"
1312
flag "github.com/spf13/pflag"
1413
)
1514

@@ -123,28 +122,3 @@ type Event struct {
123122
ParamSecond uint64
124123
CPU uint32
125124
}
126-
127-
type KProbeMaps interface {
128-
GetEvents() *ebpf.Map
129-
GetPrintStackMap() *ebpf.Map
130-
}
131-
132-
type KProbeMapsWithOutputSKB interface {
133-
KProbeMaps
134-
GetPrintSkbMap() *ebpf.Map
135-
}
136-
137-
type KProbePrograms interface {
138-
GetKprobeSkb1() *ebpf.Program
139-
GetKprobeSkb2() *ebpf.Program
140-
GetKprobeSkb3() *ebpf.Program
141-
GetKprobeSkb4() *ebpf.Program
142-
GetKprobeSkb5() *ebpf.Program
143-
GetKprobeSkbLifetimeTermination() *ebpf.Program
144-
}
145-
146-
type KProbeObjects interface {
147-
KProbeMaps
148-
KProbePrograms
149-
Close() error
150-
}

main.go

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -104,20 +104,15 @@ func main() {
104104
opts.Programs.LogSize = ebpf.DefaultVerifierLogSize * 100
105105

106106
var bpfSpec *ebpf.CollectionSpec
107-
var objs pwru.KProbeObjects
108107
switch {
109108
case flags.OutputSkb && useKprobeMulti:
110109
bpfSpec, err = LoadKProbeMultiPWRU()
111-
objs = &KProbeMultiPWRUObjects{}
112110
case flags.OutputSkb:
113111
bpfSpec, err = LoadKProbePWRU()
114-
objs = &KProbePWRUObjects{}
115112
case useKprobeMulti:
116113
bpfSpec, err = LoadKProbeMultiPWRUWithoutOutputSKB()
117-
objs = &KProbeMultiPWRUWithoutOutputSKBObjects{}
118114
default:
119115
bpfSpec, err = LoadKProbePWRUWithoutOutputSKB()
120-
objs = &KProbeMultiPWRUWithoutOutputSKBObjects{}
121116
}
122117
if err != nil {
123118
log.Fatalf("Failed to load bpf spec: %v", err)
@@ -142,7 +137,8 @@ func main() {
142137
log.Fatalf("Failed to rewrite config: %v", err)
143138
}
144139

145-
if err := bpfSpec.LoadAndAssign(objs, &opts); err != nil {
140+
coll, err := ebpf.NewCollectionWithOptions(bpfSpec, opts)
141+
if err != nil {
146142
var (
147143
ve *ebpf.VerifierError
148144
verifierLog string
@@ -153,21 +149,18 @@ func main() {
153149

154150
log.Fatalf("Failed to load objects: %s\n%+v", verifierLog, err)
155151
}
156-
defer objs.Close()
157-
158-
kprobe1 := objs.GetKprobeSkb1()
159-
kprobe2 := objs.GetKprobeSkb2()
160-
kprobe3 := objs.GetKprobeSkb3()
161-
kprobe4 := objs.GetKprobeSkb4()
162-
kprobe5 := objs.GetKprobeSkb5()
163-
kprobeLifetimeTermination := objs.GetKprobeSkbLifetimeTermination()
164-
165-
events := objs.GetEvents()
166-
printStackMap := objs.GetPrintStackMap()
167-
var printSkbMap *ebpf.Map
168-
if flags.OutputSkb {
169-
printSkbMap = objs.(pwru.KProbeMapsWithOutputSKB).GetPrintSkbMap()
170-
}
152+
defer coll.Close()
153+
154+
kprobe1 := coll.Programs["kprobe_skb_1"]
155+
kprobe2 := coll.Programs["kprobe_skb_2"]
156+
kprobe3 := coll.Programs["kprobe_skb_3"]
157+
kprobe4 := coll.Programs["kprobe_skb_4"]
158+
kprobe5 := coll.Programs["kprobe_skb_5"]
159+
kprobeLifetimeTermination := coll.Programs["kprobe_skb_lifetime_termination"]
160+
161+
events := coll.Maps["events"]
162+
printStackMap := coll.Maps["print_stack_map"]
163+
printSkbMap := coll.Maps["print_skb_map"]
171164

172165
var kprobes []link.Link
173166
defer func() {

tools/getgetter.go

Lines changed: 0 additions & 212 deletions
This file was deleted.

0 commit comments

Comments
 (0)