//go:build linux && !android package wgproxy import ( log "github.com/sirupsen/logrus" "github.com/netbirdio/netbird/client/iface/wgproxy/ebpf" udpProxy "github.com/netbirdio/netbird/client/iface/wgproxy/udp" ) type KernelFactory struct { wgPort int ebpfProxy *ebpf.WGEBPFProxy } func NewKernelFactory(wgPort int) *KernelFactory { f := &KernelFactory{ wgPort: wgPort, } ebpfProxy := ebpf.NewWGEBPFProxy(wgPort) if err := ebpfProxy.Listen(); err != nil { log.Warnf("failed to initialize ebpf proxy, fallback to user space proxy: %s", err) return f } f.ebpfProxy = ebpfProxy return f } func (w *KernelFactory) GetProxy() Proxy { if w.ebpfProxy == nil { return udpProxy.NewWGUDPProxy(w.wgPort) } return &ebpf.ProxyWrapper{ WgeBPFProxy: w.ebpfProxy, } } func (w *KernelFactory) Free() error { if w.ebpfProxy == nil { return nil } return w.ebpfProxy.Free() }