Files
baalvpn/client/os.go
2026-07-25 12:47:55 +02:00

63 lines
1.2 KiB
Go

//go:build linux || darwin
package main
import (
"os"
"os/exec"
"runtime"
"github.com/songgao/water"
)
var iface *water.Interface
func isAdmin() bool {
return os.Geteuid() == 0
}
func setupInterface() {
config := water.Config{DeviceType: water.TUN}
if runtime.GOOS == "linux" {
config.Name = "baalvpn"
}
var err error
iface, err = water.New(config)
if err != nil {
panic(err)
}
if runtime.GOOS == "linux" {
if err := exec.Command("ip", "addr", "add", internalIP.String()+"/32", "dev", "baalvpn").Run(); err != nil {
panic(err)
}
if err := exec.Command("ip", "link", "set", "dev", "baalvpn", "up").Run(); err != nil {
panic(err)
}
} else {
if err := exec.Command("ifconfig", iface.Name(), "inet6", internalIP.String(), internalIP.String(), "prefixlen", "128", "up").Run(); err != nil {
panic(err)
}
if err := exec.Command("route", "-n", "add", "-inet6", "fd00:baa1::/32", "-interface", iface.Name()).Run(); err != nil {
panic(err)
}
}
}
func writePkt(pkt []byte) error {
_, err := iface.Write(pkt)
return err
}
func readPkt() ([]byte, error) {
pkt := make([]byte, 2000)
n, err := iface.Read(pkt)
if err != nil {
return nil, err
}
return pkt[:n], nil
}
func releasePkt(pkt []byte) {}