mirror of
https://github.com/sigcn/pg.git
synced 2025-10-27 22:31:39 +08:00
30 lines
574 B
Go
30 lines
574 B
Go
//go:build !windows
|
|
|
|
package iface
|
|
|
|
import (
|
|
"net"
|
|
"os"
|
|
|
|
"github.com/rkonfj/peerguard/lru"
|
|
"golang.org/x/sys/unix"
|
|
"golang.zx2c4.com/wireguard/tun"
|
|
)
|
|
|
|
func CreateFD(tunFD int, cfg Config) (*TunInterface, error) {
|
|
err := unix.SetNonblock(tunFD, true)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
file := os.NewFile(uintptr(tunFD), "/dev/net/tun")
|
|
device, err := tun.CreateTUNFromFile(file, 0)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &TunInterface{
|
|
dev: device,
|
|
routing: lru.New[string, []*net.IPNet](512),
|
|
peers: lru.New[string, net.Addr](1024),
|
|
}, nil
|
|
}
|