diff --git a/pkg/beyla/config.go b/pkg/beyla/config.go index d0e1213a2..d3c5be6e1 100644 --- a/pkg/beyla/config.go +++ b/pkg/beyla/config.go @@ -253,8 +253,10 @@ func (c *Config) Validate() error { if !c.EBPF.TCBackend.Valid() { return ConfigError("Invalid BEYLA_BPF_TC_BACKEND value") } - if err := tcmanager.EnsureCiliumCompatibility(c.EBPF.TCBackend); err != nil { - return ConfigError(fmt.Sprintf("Cilium compatibility error: %s", err.Error())) + if c.willUseTC() { + if err := tcmanager.EnsureCiliumCompatibility(c.EBPF.TCBackend); err != nil { + return ConfigError(fmt.Sprintf("Cilium compatibility error: %s", err.Error())) + } } if c.Attributes.Kubernetes.InformersSyncTimeout == 0 { @@ -303,6 +305,10 @@ func (c *Config) otelNetO11yEnabled() bool { return (c.Metrics.Enabled() || c.Grafana.OTLP.MetricsEnabled()) && c.Metrics.NetworkMetricsEnabled() } +func (c *Config) willUseTC() bool { + return c.EBPF.ContextPropagationEnabled || (c.Enabled(FeatureNetO11y) && c.NetworkFlows.Source == EbpfSourceTC) +} + // Enabled checks if a given Beyla feature is enabled according to the global configuration func (c *Config) Enabled(feature Feature) bool { switch feature { diff --git a/pkg/beyla/config_test.go b/pkg/beyla/config_test.go index bd899bfb1..7551961d9 100644 --- a/pkg/beyla/config_test.go +++ b/pkg/beyla/config_test.go @@ -504,6 +504,24 @@ func TestDefaultExclusionFilter(t *testing.T) { assert.True(t, c[0].Path.MatchString("/usr/bin/otelcol-contrib123")) } +func TestWillUseTC(t *testing.T) { + env := envMap{"BEYLA_BPF_ENABLE_CONTEXT_PROPAGATION": "true"} + cfg := loadConfig(t, env) + assert.True(t, cfg.willUseTC()) + + env = envMap{"BEYLA_BPF_ENABLE_CONTEXT_PROPAGATION": "false"} + cfg = loadConfig(t, env) + assert.False(t, cfg.willUseTC()) + + env = envMap{"BEYLA_BPF_ENABLE_CONTEXT_PROPAGATION": "false", "BEYLA_NETWORK_METRICS": "true"} + cfg = loadConfig(t, env) + assert.False(t, cfg.willUseTC()) + + env = envMap{"BEYLA_BPF_ENABLE_CONTEXT_PROPAGATION": "false", "BEYLA_NETWORK_SOURCE": "tc", "BEYLA_NETWORK_METRICS": "true"} + cfg = loadConfig(t, env) + assert.True(t, cfg.willUseTC()) +} + func loadConfig(t *testing.T, env envMap) *Config { for k, v := range env { require.NoError(t, os.Setenv(k, v))