1+ package bpf
2+
3+ import (
4+ "fmt"
5+
6+ "github.com/cilium/ebpf"
7+ "github.com/cilium/ebpf/link"
8+
9+ "go-ebp-logger/constants"
10+ )
11+
12+ func SetupBPF (bpfObj string ) (* ebpf.Map , * ebpf.Map , func ()) {
13+ spec , err := ebpf .LoadCollectionSpec (bpfObj )
14+ if err != nil {
15+ fmt .Printf ("Failed to load BPF collection spec: %v\n " , err )
16+ }
17+
18+ coll , err := ebpf .NewCollection (spec )
19+ if err != nil {
20+ fmt .Printf ("Failed to load BPF collection: %v\n " , err )
21+ }
22+
23+ var links []* link.Link
24+ for progName , fn := range constants .ProgsToFuncs {
25+ prog := coll .Programs [progName ]
26+ if prog == nil {
27+ fmt .Printf ("Program '%s' not found\n " , progName )
28+ }
29+ kp , err := link .Kprobe (fn , prog , nil )
30+ if err != nil {
31+ fmt .Printf ("Failed to attach kprobe to %s: %v\n " , fn , err )
32+ }
33+ links = append (links , & kp )
34+ }
35+
36+ monitored_inode_map := coll .Maps ["monitored_inodes" ]
37+ err = pinMaps (monitored_inode_map )
38+ if err != nil {
39+ panic (err )
40+ }
41+
42+ events := coll .Maps ["events" ]
43+ if events == nil {
44+ fmt .Printf ("Map 'events' not found\n " )
45+ }
46+
47+ renameEvents := coll .Maps ["rename_events" ]
48+ if renameEvents == nil {
49+ fmt .Printf ("Map 'rename_events' not found\n " )
50+ }
51+
52+ cleanup := func () {
53+ for _ , l := range links {
54+ (* l ).Close ()
55+ }
56+ coll .Close ()
57+ }
58+
59+ return events , renameEvents , cleanup
60+ }
0 commit comments