diff --git a/pkg/bpf/bpf.go b/pkg/bpf/bpf.go index 3939b68af..a8a9aa650 100644 --- a/pkg/bpf/bpf.go +++ b/pkg/bpf/bpf.go @@ -21,6 +21,7 @@ package bpf // #include "cluster/cluster.pb-c.h" import "C" import ( + "errors" "fmt" "hash/fnv" "os" @@ -68,6 +69,7 @@ func NewBpfLoader(config *options.BpfConfig) *BpfLoader { } func (l *BpfLoader) StartAdsMode() (err error) { + var ve *ebpf.VerifierError if l.obj, err = NewBpfKmesh(l.config); err != nil { return err } @@ -79,7 +81,10 @@ func (l *BpfLoader) StartAdsMode() (err error) { }() if err = l.obj.Load(); err != nil { - return fmt.Errorf("bpf Load failed, %s", err) + if errors.As(err, &ve) { + return fmt.Errorf("bpf Load failed: %+v", ve) + } + return fmt.Errorf("bpf Load failed: %v", err) } if err = l.obj.Attach(); err != nil { diff --git a/pkg/bpf/bpf_kmesh_l4_workload.go b/pkg/bpf/bpf_kmesh_l4_workload.go index fb6fcd437..199b78730 100644 --- a/pkg/bpf/bpf_kmesh_l4_workload.go +++ b/pkg/bpf/bpf_kmesh_l4_workload.go @@ -17,8 +17,11 @@ package bpf import ( + "errors" "fmt" + "github.com/cilium/ebpf" + "kmesh.net/kmesh/daemon/options" ) @@ -54,18 +57,26 @@ func newWorkloadBpf(cfg *options.BpfConfig) (*BpfKmeshWorkload, error) { func (l *BpfLoader) StartWorkloadMode() error { var err error + var ve *ebpf.VerifierError if l.workloadObj, err = newWorkloadBpf(l.config); err != nil { return err } + defer func() { + if err != nil { + l.Stop() + } + }() + if err = l.workloadObj.Load(); err != nil { - l.Stop() - return fmt.Errorf("bpf Load failed, %s", err) + if errors.As(err, &ve) { + return fmt.Errorf("bpf Load failed: %+v", ve) + } + return fmt.Errorf("bpf Load failed: %v", err) } if err = l.workloadObj.Attach(); err != nil { - l.Stop() return fmt.Errorf("bpf Attach failed, %s", err) } l.bpfLogLevel = l.workloadObj.SockConn.BpfLogLevel