Skip to content

Commit

Permalink
tetragon: Remove mapDir from sensor object
Browse files Browse the repository at this point in the history
Remove mapDir from sensor object and its related users.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
  • Loading branch information
olsajiri committed Feb 21, 2024
1 parent fe527e8 commit 00adc6f
Show file tree
Hide file tree
Showing 11 changed files with 36 additions and 42 deletions.
2 changes: 1 addition & 1 deletion cmd/tetragon/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,7 @@ func tetragonExecute() error {

// load base sensor
base := base.GetInitialSensor()
if err := base.Load(observerDir, observerDir); err != nil {
if err := base.Load(observerDir); err != nil {
return err
}
defer func() {
Expand Down
4 changes: 2 additions & 2 deletions pkg/bench/bench.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,11 +126,11 @@ func runTetragon(ctx context.Context, configFile string, args *Arguments, summar

baseSensors := base.GetInitialSensor()

if err := baseSensors.Load(option.Config.BpfDir, option.Config.MapDir); err != nil {
if err := baseSensors.Load(option.Config.BpfDir); err != nil {
log.Fatalf("Load base error: %s\n", err)
}

if err := benchSensors.Load(option.Config.BpfDir, option.Config.MapDir); err != nil {
if err := benchSensors.Load(option.Config.BpfDir); err != nil {
log.Fatalf("Load sensors error: %s\n", err)
}

Expand Down
6 changes: 3 additions & 3 deletions pkg/observer/observertesthelper/observer_test_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,7 @@ func loadExporter(tb testing.TB, ctx context.Context, obs *observer.Observer, op
func loadObserver(tb testing.TB, ctx context.Context, base *sensors.Sensor,
tp tracingpolicy.TracingPolicy) error {

if err := base.Load(option.Config.BpfDir, option.Config.MapDir); err != nil {
if err := base.Load(option.Config.BpfDir); err != nil {
tb.Fatalf("Load base error: %s\n", err)
}

Expand All @@ -452,11 +452,11 @@ func loadObserver(tb testing.TB, ctx context.Context, base *sensors.Sensor,
}

func loadSensor(tb testing.TB, base *sensors.Sensor, sens *sensors.Sensor) error {
if err := base.Load(option.Config.BpfDir, option.Config.MapDir); err != nil {
if err := base.Load(option.Config.BpfDir); err != nil {
tb.Fatalf("Load base error: %s\n", err)
}

if err := sens.Load(option.Config.BpfDir, option.Config.MapDir); err != nil {
if err := sens.Load(option.Config.BpfDir); err != nil {
tb.Fatalf("LoadConfig error: %s\n", err)
}
return nil
Expand Down
4 changes: 2 additions & 2 deletions pkg/sensors/collection.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func (c *collection) info() string {

// load will attempt to load a collection of sensors. If loading one of the sensors fails, it
// will attempt to unload the already loaded sensors.
func (c *collection) load(bpfDir, mapDir string) error {
func (c *collection) load(bpfDir string) error {

var err error
for _, sensor := range c.sensors {
Expand All @@ -44,7 +44,7 @@ func (c *collection) load(bpfDir, mapDir string) error {
// because that would complicate things.
continue
}
if err = sensor.Load(bpfDir, mapDir); err != nil {
if err = sensor.Load(bpfDir); err != nil {
err = fmt.Errorf("sensor %s from collection %s failed to load: %s", sensor.Name, c.name, err)
break
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/sensors/exec/exec_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,7 @@ func TestLoadInitialSensor(t *testing.T) {
option.Config.HubbleLib = tus.Conf().TetragonLib

t.Logf("Loading sensor %v\n", sensor.Name)
if err := sensor.Load(bpf.MapPrefixPath(), bpf.MapPrefixPath()); err != nil {
if err := sensor.Load(bpf.MapPrefixPath()); err != nil {
t.Fatalf("sensor.Load failed: %v\n", err)
}

Expand Down
13 changes: 6 additions & 7 deletions pkg/sensors/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,19 @@ import (

type handler struct {
// map of sensor collections: name -> collection
collections map[string]collection
bpfDir, mapDir string
collections map[string]collection
bpfDir string

nextPolicyID uint64
pfState policyfilter.State
}

func newHandler(
pfState policyfilter.State,
bpfDir, mapDir string) (*handler, error) {
bpfDir string) (*handler, error) {
return &handler{
collections: map[string]collection{},
bpfDir: bpfDir,
mapDir: mapDir,
pfState: pfState,
// NB: we are using policy ids for filtering, so we start with
// the first valid id. This is because value 0 is reserved to
Expand Down Expand Up @@ -120,7 +119,7 @@ func (h *handler) addTracingPolicy(op *tracingPolicyAdd) error {
tracingpolicyID: uint64(tpID),
policyfilterID: uint64(filterID),
}
if err := col.load(h.bpfDir, h.mapDir); err != nil {
if err := col.load(h.bpfDir); err != nil {
return err
}
col.enabled = true
Expand Down Expand Up @@ -212,7 +211,7 @@ func (h *handler) enableTracingPolicy(op *tracingPolicyEnable) error {
return fmt.Errorf("tracing policy %s is already enabled", op.name)
}

if err := col.load(h.bpfDir, h.mapDir); err != nil {
if err := col.load(h.bpfDir); err != nil {
return err
}

Expand Down Expand Up @@ -267,7 +266,7 @@ func (h *handler) enableSensor(op *sensorEnable) error {
return fmt.Errorf("sensor %s does not exist", op.name)
}

return col.load(h.bpfDir, h.mapDir)
return col.load(h.bpfDir)
}

func (h *handler) disableSensor(op *sensorDisable) error {
Expand Down
35 changes: 15 additions & 20 deletions pkg/sensors/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,16 @@ const (
)

// LoadConfig loads the default sensor, including any from the configuration file.
func LoadConfig(bpfDir, mapDir string, sens []*Sensor) error {
func LoadConfig(bpfDir string, sens []*Sensor) error {
load := mergeSensors(sens)
if err := load.Load(bpfDir, mapDir); err != nil {
if err := load.Load(bpfDir); err != nil {
return fmt.Errorf("tetragon, aborting could not load BPF programs: %w", err)
}
return nil
}

// Load loads the sensor, by loading all the BPF programs and maps.
func (s *Sensor) Load(bpfDir, mapDir string) error {
func (s *Sensor) Load(bpfDir string) error {
if s == nil {
return nil
}
Expand All @@ -82,7 +82,7 @@ func (s *Sensor) Load(bpfDir, mapDir string) error {
return fmt.Errorf("tetragon, aborting minimum requirements not met: %w", err)
}

createDir(bpfDir, mapDir)
os.Mkdir(bpfDir, os.ModeDir)

l := logger.GetLogger()

Expand All @@ -98,7 +98,7 @@ func (s *Sensor) Load(bpfDir, mapDir string) error {
return fmt.Errorf("tetragon, aborting could not find BPF programs: %w", err)
}

if err := s.loadMaps(mapDir); err != nil {
if err := s.loadMaps(bpfDir); err != nil {
return fmt.Errorf("tetragon, aborting could not load sensor BPF maps: %w", err)
}

Expand All @@ -109,7 +109,7 @@ func (s *Sensor) Load(bpfDir, mapDir string) error {
continue
}

if err := observerLoadInstance(bpfDir, mapDir, p); err != nil {
if err := observerLoadInstance(bpfDir, p); err != nil {
return err
}
p.LoadState.RefInc()
Expand Down Expand Up @@ -209,7 +209,7 @@ func (s *Sensor) FindPrograms() error {
}

// loadMaps loads all the BPF maps in the sensor.
func (s *Sensor) loadMaps(mapDir string) error {
func (s *Sensor) loadMaps(bpfDir string) error {
l := logger.GetLogger()
for _, m := range s.Maps {
if m.PinState.IsLoaded() {
Expand All @@ -221,7 +221,7 @@ func (s *Sensor) loadMaps(mapDir string) error {
continue
}

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

spec, err := ebpf.LoadCollectionSpec(m.Prog.Name)
if err != nil {
Expand Down Expand Up @@ -271,7 +271,7 @@ func mergeSensors(sensors []*Sensor) *Sensor {
}
}

func observerLoadInstance(bpfDir, mapDir string, load *program.Program) error {
func observerLoadInstance(bpfDir string, load *program.Program) error {
version, _, err := kernels.GetKernelVersion(option.Config.KernelVersion, option.Config.ProcFS)
if err != nil {
return err
Expand All @@ -283,33 +283,33 @@ func observerLoadInstance(bpfDir, mapDir string, load *program.Program) error {
"kern_version": version,
}).Debug("observerLoadInstance", load.Name, version)
if load.Type == "tracepoint" {
err = loadInstance(bpfDir, mapDir, load, version, option.Config.Verbosity)
err = loadInstance(bpfDir, load, version, option.Config.Verbosity)
if err != nil {
l.WithField(
"tracepoint", load.Name,
).Info("Failed to load, trying to remove and retrying")
load.Unload()
err = loadInstance(bpfDir, mapDir, load, version, option.Config.Verbosity)
err = loadInstance(bpfDir, load, version, option.Config.Verbosity)
}
if err != nil {
return fmt.Errorf("failed prog %s kern_version %d LoadTracingProgram: %w",
load.Name, version, err)
}
} else if load.Type == "raw_tracepoint" || load.Type == "raw_tp" {
err = loadInstance(bpfDir, mapDir, load, version, option.Config.Verbosity)
err = loadInstance(bpfDir, load, version, option.Config.Verbosity)
if err != nil {
l.WithField(
"raw_tracepoint", load.Name,
).Info("Failed to load, trying to remove and retrying")
load.Unload()
err = loadInstance(bpfDir, mapDir, load, version, option.Config.Verbosity)
err = loadInstance(bpfDir, load, version, option.Config.Verbosity)
}
if err != nil {
return fmt.Errorf("failed prog %s kern_version %d LoadRawTracepointProgram: %w",
load.Name, version, err)
}
} else {
err = loadInstance(bpfDir, mapDir, load, version, option.Config.Verbosity)
err = loadInstance(bpfDir, load, version, option.Config.Verbosity)
if err != nil && load.ErrorFatal {
return fmt.Errorf("failed prog %s kern_version %d loadInstance: %w",
load.Name, version, err)
Expand All @@ -318,7 +318,7 @@ func observerLoadInstance(bpfDir, mapDir string, load *program.Program) error {
return nil
}

func loadInstance(bpfDir, mapDir string, load *program.Program, version, verbose int) error {
func loadInstance(bpfDir string, load *program.Program, version, verbose int) error {
version = kernels.FixKernelVersion(version)
probe, ok := registeredProbeLoad[load.Type]
if ok {
Expand Down Expand Up @@ -363,11 +363,6 @@ func observerMinReqs() (bool, error) {
return true, nil
}

func createDir(bpfDir, mapDir string) {
os.Mkdir(bpfDir, os.ModeDir)
os.Mkdir(mapDir, os.ModeDir)
}

func unloadProgram(prog *program.Program) {
log := logger.GetLogger().WithField("label", prog.Label).WithField("pin", prog.PinPath)

Expand Down
2 changes: 1 addition & 1 deletion pkg/sensors/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ func StartSensorManager(
return nil, fmt.Errorf("failed to initialize policy filter state: %w", err)
}

handler, err := newHandler(pfState, bpfDir, mapDir)
handler, err := newHandler(pfState, bpfDir)
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/sensors/manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ func TestPolicyFilterDisabled(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

handler, err := newHandler(policyfilter.DisabledState(), "", "")
handler, err := newHandler(policyfilter.DisabledState(), "")
assert.NoError(t, err)
mgr, err := startSensorManager(handler, nil)
assert.NoError(t, err)
Expand Down
4 changes: 2 additions & 2 deletions pkg/sensors/tracing/kprobe_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ spec:
t.Fatalf("GetDefaultObserverWithFile error: %s", err)
}
initialSensor := base.GetInitialSensor()
initialSensor.Load(bpf.MapPrefixPath(), bpf.MapPrefixPath())
initialSensor.Load(bpf.MapPrefixPath())
}

// NB: This is similar to TestKprobeObjectWriteRead, but it's a bit easier to
Expand Down Expand Up @@ -4175,7 +4175,7 @@ spec:
if err != nil {
return err
}
err = sens.Load(option.Config.BpfDir, option.Config.MapDir)
err = sens.Load(option.Config.BpfDir)
if err != nil {
return err
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/testutils/sensors/sensors.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ func LoadSensor(t *testing.T, sensor *sensors.Sensor) {
if err := sensor.FindPrograms(); err != nil {
t.Fatalf("ObserverFindProgs error: %s", err)
}
mapDir := bpf.MapPrefixPath()
if err := sensor.Load(mapDir, mapDir); err != nil {
bpfDir := bpf.MapPrefixPath()
if err := sensor.Load(bpfDir); err != nil {
t.Fatalf("observerLoadSensor error: %s", err)
}

Expand Down

0 comments on commit 00adc6f

Please sign in to comment.