mirror of
https://github.com/netbirdio/netbird.git
synced 2024-12-02 04:53:51 +01:00
30ebcf38c7
In the case of user space WireGuard mode, use in-memory proxy between the TURN/Relay connection and the WireGuard Bind. We keep the UDP proxy and eBPF proxy for kernel mode. The key change is the new wgproxy/bind and the iface/bind/ice_bind changes. Everything else is just to fulfill the dependencies.
33 lines
945 B
Go
33 lines
945 B
Go
package iface
|
|
|
|
import (
|
|
"github.com/netbirdio/netbird/client/iface/bind"
|
|
"github.com/netbirdio/netbird/client/iface/device"
|
|
"github.com/netbirdio/netbird/client/iface/netstack"
|
|
"github.com/netbirdio/netbird/client/iface/wgproxy"
|
|
)
|
|
|
|
// NewWGIFace Creates a new WireGuard interface instance
|
|
func NewWGIFace(opts WGIFaceOpts) (*WGIface, error) {
|
|
wgAddress, err := device.ParseWGAddress(opts.Address)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
iceBind := bind.NewICEBind(opts.TransportNet, opts.FilterFn)
|
|
|
|
var tun WGTunDevice
|
|
if netstack.IsEnabled() {
|
|
tun = device.NewNetstackDevice(opts.IFaceName, wgAddress, opts.WGPort, opts.WGPrivKey, opts.MTU, iceBind, netstack.ListenAddr())
|
|
} else {
|
|
tun = device.NewTunDevice(opts.IFaceName, wgAddress, opts.WGPort, opts.WGPrivKey, opts.MTU, iceBind)
|
|
}
|
|
|
|
wgIFace := &WGIface{
|
|
userspaceBind: true,
|
|
tun: tun,
|
|
wgProxyFactory: wgproxy.NewUSPFactory(iceBind),
|
|
}
|
|
return wgIFace, nil
|
|
|
|
}
|