diff --git a/loxilb-ebpf b/loxilb-ebpf index 855224ba..fce61192 160000 --- a/loxilb-ebpf +++ b/loxilb-ebpf @@ -1 +1 @@ -Subproject commit 855224ba14cf4cc2ac5e3d64132efa3991cf3fec +Subproject commit fce61192b47549930b8d19a782c05b91c9ee24f0 diff --git a/options/options.go b/options/options.go index a0633ee8..79752691 100644 --- a/options/options.go +++ b/options/options.go @@ -35,4 +35,5 @@ var Opts struct { LocalSockPolicy bool `long:"localsockpolicy" description:"support local socket policies (experimental)"` SockMapSupport bool `long:"sockmapsupport" description:"Support sockmap based L4 proxying (experimental)"` ConfigPath string `long:"config-path" description:"Config file path" default:"/etc/loxilb/"` + ProxyModeOnly bool `long:"proxyonlymode" description:"Run loxilb in proxy mode only, no Datapath"` } diff --git a/pkg/loxinet/dpebpf_linux.go b/pkg/loxinet/dpebpf_linux.go index 1cbd9a20..f94cdb7c 100644 --- a/pkg/loxinet/dpebpf_linux.go +++ b/pkg/loxinet/dpebpf_linux.go @@ -267,7 +267,7 @@ func DpEbpfSetLogLevel(logLevel tk.LogLevelT) { } // DpEbpfInit - initialize the ebpf dp subsystem -func DpEbpfInit(clusterEn, rssEn, egrHooks, localSockPolicy, sockMapEn bool, nodeNum int, logLevel tk.LogLevelT) *DpEbpfH { +func DpEbpfInit(clusterEn, rssEn, egrHooks, localSockPolicy, sockMapEn bool, nodeNum int, disBPF bool, logLevel tk.LogLevelT) *DpEbpfH { var cfg C.struct_ebpfcfg if clusterEn { @@ -291,6 +291,12 @@ func DpEbpfInit(clusterEn, rssEn, egrHooks, localSockPolicy, sockMapEn bool, nod cfg.have_sockmap = 0 } + if disBPF { + cfg.have_noebpf = 1 + } else { + cfg.have_noebpf = 0 + } + cfg.nodenum = C.int(nodeNum) cfg.loglevel = 1 cfg.no_loader = 0 @@ -404,6 +410,9 @@ func convDPv6Addr2NetIP(addr unsafe.Pointer) net.IP { // loadEbpfPgm - load loxilb eBPF program to an interface func (e *DpEbpfH) loadEbpfPgm(name string) int { + if mh.disBPF { + return 0 + } ifStr := C.CString(name) xSection := C.CString(string(C.XDP_LL_SEC_DEFAULT)) link, err := nlp.LinkByName(name) @@ -439,6 +448,9 @@ func (e *DpEbpfH) loadEbpfPgm(name string) int { // unLoadEbpfPgm - unload loxilb eBPF program from an interface func (e *DpEbpfH) unLoadEbpfPgm(name string) int { + if mh.disBPF { + return 0 + } ifStr := C.CString(name) xSection := C.CString(string(C.XDP_LL_SEC_DEFAULT)) diff --git a/pkg/loxinet/loxinet.go b/pkg/loxinet/loxinet.go index 6235ceda..ceebccdb 100644 --- a/pkg/loxinet/loxinet.go +++ b/pkg/loxinet/loxinet.go @@ -79,6 +79,7 @@ type loxiNetH struct { eHooks bool lSockPolicy bool sockMapEn bool + disBPF bool pFile *os.File } @@ -219,6 +220,7 @@ func loxiNetInit() { mh.pProbe = opts.Opts.PassiveEPProbe mh.lSockPolicy = opts.Opts.LocalSockPolicy mh.sockMapEn = opts.Opts.SockMapSupport + mh.disBPF = opts.Opts.ProxyModeOnly mh.sigCh = make(chan os.Signal, 5) signal.Notify(mh.sigCh, os.Interrupt, syscall.SIGCHLD, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM) @@ -247,7 +249,7 @@ func loxiNetInit() { RunCommand(MkMountCG2, false) } // Initialize the ebpf datapath subsystem - mh.dpEbpf = DpEbpfInit(clusterMode, mh.rssEn, mh.eHooks, mh.lSockPolicy, mh.sockMapEn, mh.self, -1) + mh.dpEbpf = DpEbpfInit(clusterMode, mh.rssEn, mh.eHooks, mh.lSockPolicy, mh.sockMapEn, mh.self, mh.disBPF, -1) mh.dp = DpBrokerInit(mh.dpEbpf, rpcMode) // Initialize the security zone subsystem