Files
cunicu/pkg/device/device.go
Steffen Vogel ba20ab7910 device: add Flags() getter
Signed-off-by: Steffen Vogel <post@steffenvogel.de>
2022-10-14 21:30:26 +02:00

72 lines
1.2 KiB
Go

// Package device implements OS abstractions for managing WireGuard links
package device
import (
"fmt"
"net"
"os"
"os/exec"
"strings"
)
const (
RouteProtocol = 98
)
type Device interface {
Close() error
// Getter
Name() string
Index() int
MTU() int
Flags() net.Flags
// Setter
SetMTU(mtu int) error
SetUp() error
SetDown() error
AddAddress(ip net.IPNet) error
AddRoute(dst net.IPNet, gw net.IP, table int) error
DeleteAddress(ip net.IPNet) error
DeleteRoute(dst net.IPNet, table int) error
}
func NewDevice(name string, user bool) (kernelDev Device, err error) {
if user {
kernelDev, err = NewUserDevice(name)
} else {
kernelDev, err = NewKernelDevice(name)
}
if err != nil {
return nil, err
}
return kernelDev, nil
}
func FindDevice(name string) (Device, error) {
if dev, err := FindUserDevice(name); err == nil {
return dev, nil
} else if dev, err := FindKernelDevice(name); err == nil {
return dev, nil
}
return nil, os.ErrNotExist
}
func run(args ...string) (string, error) {
cmd := exec.Command(args[0], args[1:]...)
out, err := cmd.CombinedOutput()
outStr := string(out)
if err != nil {
return "", fmt.Errorf("failed to run: %s\n%s", strings.Join(args, " "), outStr)
}
return outStr, nil
}