Skip to content

Commit

Permalink
tetragon: Add PinPath to Map object
Browse files Browse the repository at this point in the history
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
  • Loading branch information
olsajiri committed Feb 21, 2024
1 parent dc26552 commit 56f2073
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 18 deletions.
10 changes: 7 additions & 3 deletions pkg/sensors/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,10 @@ func (s *Sensor) FindPrograms() error {
return nil
}

func (s *Sensor) SetMapPinPath(bpfDir string, m *program.Map) {
m.PinPath = filepath.Join(bpfDir, m.PinName)
}

// loadMaps loads all the BPF maps in the sensor.
func (s *Sensor) loadMaps(bpfDir string) error {
l := logger.GetLogger()
Expand All @@ -221,7 +225,7 @@ func (s *Sensor) loadMaps(bpfDir string) error {
continue
}

pinPath := filepath.Join(bpfDir, m.PinName)
s.SetMapPinPath(bpfDir, m)

spec, err := ebpf.LoadCollectionSpec(m.Prog.Name)
if err != nil {
Expand All @@ -242,14 +246,14 @@ func (s *Sensor) loadMaps(bpfDir string) error {
}
}

if err := m.LoadOrCreatePinnedMap(pinPath, mapSpec); err != nil {
if err := m.LoadOrCreatePinnedMap(m.PinPath, mapSpec); err != nil {
return fmt.Errorf("failed to load map '%s' for sensor '%s': %w", m.Name, s.Name, err)
}

l.WithFields(logrus.Fields{
"sensor": s.Name,
"map": m.Name,
"path": pinPath,
"path": m.PinPath,
}).Info("tetragon, map loaded.")
}

Expand Down
21 changes: 11 additions & 10 deletions pkg/sensors/program/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -432,9 +432,9 @@ func MultiKprobeAttach(load *Program, bpfDir string) AttachFunc {

func LoadTracepointProgram(bpfDir string, load *Program, verbose int) error {
var ci *customInstall
for mName, mPath := range load.PinMap {
for mName, m := range load.PinMap {
if mName == "tp_calls" || mName == "execve_calls" {
ci = &customInstall{mPath, "tracepoint"}
ci = &customInstall{m.PinName, "tracepoint"}
break
}
}
Expand All @@ -454,9 +454,9 @@ func LoadRawTracepointProgram(bpfDir string, load *Program, verbose int) error {

func LoadKprobeProgram(bpfDir string, load *Program, verbose int) error {
var ci *customInstall
for mName, mPath := range load.PinMap {
for mName, m := range load.PinMap {
if mName == "kprobe_calls" || mName == "retkprobe_calls" {
ci = &customInstall{mPath, "kprobe"}
ci = &customInstall{m.PinName, "kprobe"}
break
}
}
Expand Down Expand Up @@ -499,9 +499,9 @@ func LoadKprobeProgramAttachMany(bpfDir string, load *Program, syms []string, ve

func LoadUprobeProgram(bpfDir string, load *Program, verbose int) error {
var ci *customInstall
for mName, mPath := range load.PinMap {
for mName, m := range load.PinMap {
if mName == "uprobe_calls" {
ci = &customInstall{mPath, "uprobe"}
ci = &customInstall{m.PinName, "uprobe"}
break
}
}
Expand All @@ -514,9 +514,9 @@ func LoadUprobeProgram(bpfDir string, load *Program, verbose int) error {

func LoadMultiKprobeProgram(bpfDir string, load *Program, verbose int) error {
var ci *customInstall
for mName, mPath := range load.PinMap {
for mName, m := range load.PinMap {
if mName == "kprobe_calls" || mName == "retkprobe_calls" {
ci = &customInstall{mPath, "kprobe"}
ci = &customInstall{m.PinName, "kprobe"}
break
}
}
Expand Down Expand Up @@ -731,8 +731,9 @@ func doLoadProgram(
var m *ebpf.Map
var err error
var mapPath string
if pinName, ok := load.PinMap[name]; ok {
mapPath = filepath.Join(bpfDir, pinName)

if pm, ok := load.PinMap[name]; ok {
mapPath = filepath.Join(pm.PinPath)
} else {
mapPath = filepath.Join(bpfDir, name)
}
Expand Down
8 changes: 5 additions & 3 deletions pkg/sensors/program/map.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,21 @@ const (
type Map struct {
Name string
PinName string
PinPath string
Prog *Program
PinState State
MapHandle *ebpf.Map
Type Type
}

func MapBuilder(name string, ld *Program) *Map {
return &Map{name, name, ld, Idle(), nil, Global}
return &Map{name, name, "", ld, Idle(), nil, Global}
}

func MapBuilderPin(name, pin string, ld *Program) *Map {
ld.PinMap[name] = pin
return &Map{name, pin, ld, Idle(), nil, Global}
m := &Map{name, pin, "", ld, Idle(), nil, Global}
ld.PinMap[name] = m
return m
}

func (m *Map) Unload() error {
Expand Down
4 changes: 2 additions & 2 deletions pkg/sensors/program/program.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func Builder(
LoaderData: struct{}{},
MapLoad: nil,
unloader: nil,
PinMap: make(map[string]string),
PinMap: make(map[string]*Map),
MaxEntriesMap: make(map[string]uint32),
MaxEntriesInnerMap: make(map[string]uint32),
}
Expand Down Expand Up @@ -95,7 +95,7 @@ type Program struct {
unloader unloader.Unloader
unloaderOverride unloader.Unloader

PinMap map[string]string
PinMap map[string]*Map

// available when program.KeepCollection is true
LC *LoadedCollection
Expand Down

0 comments on commit 56f2073

Please sign in to comment.