mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-16 07:16:38 +00:00
54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
// +build !linux
|
|
|
|
package iface
|
|
|
|
import (
|
|
log "github.com/sirupsen/logrus"
|
|
"golang.zx2c4.com/wireguard/conn"
|
|
"golang.zx2c4.com/wireguard/device"
|
|
"golang.zx2c4.com/wireguard/tun"
|
|
)
|
|
|
|
// Saves tun device object - is it required?
|
|
var tunIface tun.Device
|
|
|
|
// Create Creates a new Wireguard interface, sets a given IP and brings it up.
|
|
// Will reuse an existing one.
|
|
func Create(iface string, address string) error {
|
|
var err error
|
|
tunIface, err = tun.CreateTUN(iface, defaultMTU)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// We need to create a wireguard-go device and listen to configuration requests
|
|
tunDevice := device.NewDevice(tunIface, conn.NewDefaultBind(), device.NewLogger(device.LogLevelSilent, "[wiretrustee] "))
|
|
err = tunDevice.Up()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
uapi, err := getUAPI(iface)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
go func() {
|
|
for {
|
|
uapiConn, err := uapi.Accept()
|
|
if err != nil {
|
|
log.Debugln(err)
|
|
return
|
|
}
|
|
go tunDevice.IpcHandle(uapiConn)
|
|
}
|
|
}()
|
|
|
|
log.Debugln("UAPI listener started")
|
|
|
|
err = assignAddr(address, tunIface)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|