mirror of
https://github.com/netbirdio/netbird.git
synced 2024-12-12 01:40:40 +01:00
b0364da67c
EBPF proxy between TURN (relay) and WireGuard to reduce number of used ports used by the NetBird agent. - Separate the wg configuration from the proxy logic - In case if eBPF type proxy has only one single proxy instance - In case if the eBPF is not supported fallback to the original proxy Implementation Between the signature of eBPF type proxy and original proxy has differences so this is why the factory structure exists
121 lines
2.7 KiB
Go
121 lines
2.7 KiB
Go
// Code generated by bpf2go; DO NOT EDIT.
|
|
//go:build arm64be || armbe || mips || mips64 || mips64p32 || ppc64 || s390 || s390x || sparc || sparc64
|
|
// +build arm64be armbe mips mips64 mips64p32 ppc64 s390 s390x sparc sparc64
|
|
|
|
package wgproxy
|
|
|
|
import (
|
|
"bytes"
|
|
_ "embed"
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/cilium/ebpf"
|
|
)
|
|
|
|
// loadBpf returns the embedded CollectionSpec for bpf.
|
|
func loadBpf() (*ebpf.CollectionSpec, error) {
|
|
reader := bytes.NewReader(_BpfBytes)
|
|
spec, err := ebpf.LoadCollectionSpecFromReader(reader)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("can't load bpf: %w", err)
|
|
}
|
|
|
|
return spec, err
|
|
}
|
|
|
|
// loadBpfObjects loads bpf and converts it into a struct.
|
|
//
|
|
// The following types are suitable as obj argument:
|
|
//
|
|
// *bpfObjects
|
|
// *bpfPrograms
|
|
// *bpfMaps
|
|
//
|
|
// See ebpf.CollectionSpec.LoadAndAssign documentation for details.
|
|
func loadBpfObjects(obj interface{}, opts *ebpf.CollectionOptions) error {
|
|
spec, err := loadBpf()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return spec.LoadAndAssign(obj, opts)
|
|
}
|
|
|
|
// bpfSpecs contains maps and programs before they are loaded into the kernel.
|
|
//
|
|
// It can be passed ebpf.CollectionSpec.Assign.
|
|
type bpfSpecs struct {
|
|
bpfProgramSpecs
|
|
bpfMapSpecs
|
|
}
|
|
|
|
// bpfSpecs contains programs before they are loaded into the kernel.
|
|
//
|
|
// It can be passed ebpf.CollectionSpec.Assign.
|
|
type bpfProgramSpecs struct {
|
|
XdpProgFunc *ebpf.ProgramSpec `ebpf:"xdp_prog_func"`
|
|
}
|
|
|
|
// bpfMapSpecs contains maps before they are loaded into the kernel.
|
|
//
|
|
// It can be passed ebpf.CollectionSpec.Assign.
|
|
type bpfMapSpecs struct {
|
|
XdpPortMap *ebpf.MapSpec `ebpf:"xdp_port_map"`
|
|
}
|
|
|
|
// bpfObjects contains all objects after they have been loaded into the kernel.
|
|
//
|
|
// It can be passed to loadBpfObjects or ebpf.CollectionSpec.LoadAndAssign.
|
|
type bpfObjects struct {
|
|
bpfPrograms
|
|
bpfMaps
|
|
}
|
|
|
|
func (o *bpfObjects) Close() error {
|
|
return _BpfClose(
|
|
&o.bpfPrograms,
|
|
&o.bpfMaps,
|
|
)
|
|
}
|
|
|
|
// bpfMaps contains all maps after they have been loaded into the kernel.
|
|
//
|
|
// It can be passed to loadBpfObjects or ebpf.CollectionSpec.LoadAndAssign.
|
|
type bpfMaps struct {
|
|
XdpPortMap *ebpf.Map `ebpf:"xdp_port_map"`
|
|
}
|
|
|
|
func (m *bpfMaps) Close() error {
|
|
return _BpfClose(
|
|
m.XdpPortMap,
|
|
)
|
|
}
|
|
|
|
// bpfPrograms contains all programs after they have been loaded into the kernel.
|
|
//
|
|
// It can be passed to loadBpfObjects or ebpf.CollectionSpec.LoadAndAssign.
|
|
type bpfPrograms struct {
|
|
XdpProgFunc *ebpf.Program `ebpf:"xdp_prog_func"`
|
|
}
|
|
|
|
func (p *bpfPrograms) Close() error {
|
|
return _BpfClose(
|
|
p.XdpProgFunc,
|
|
)
|
|
}
|
|
|
|
func _BpfClose(closers ...io.Closer) error {
|
|
for _, closer := range closers {
|
|
if err := closer.Close(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Do not access this directly.
|
|
//
|
|
//go:embed bpf_bpfeb.o
|
|
var _BpfBytes []byte
|