Restore original tun.go code

This commit is contained in:
Tiago Carvalho
2022-01-24 22:32:06 +00:00
parent 663a66b2a2
commit 48531ebdc2
2 changed files with 90 additions and 35 deletions

View File

@@ -4,8 +4,10 @@
package tun
import (
"fmt"
"os/exec"
"github.com/songgao/water"
"github.com/vishvananda/netlink"
)
// New creates and returns a new TUN interface for the application.
@@ -22,50 +24,32 @@ func New(name string, address string) (result *water.Interface, err error) {
// SetMTU sets the Maximum Tansmission Unit Size for a
// Packet on the interface.
func SetMTU(name string, mtu int) error {
link, err := netlink.LinkByName(name)
if err != nil {
return err
}
return netlink.LinkSetMTU(link, mtu)
func SetMTU(name string, mtu int) (err error) {
return ip("link", "set", "dev", name, "mtu", fmt.Sprintf("%d", mtu))
}
// SetAddress sets the interface's known address and subnet.
func SetAddress(name string, address string) error {
addr, err := netlink.ParseAddr(address)
if err != nil {
return err
}
link, err := netlink.LinkByName(name)
if err != nil {
return err
}
return netlink.AddrAdd(link, addr)
func SetAddress(name string, address string) (err error) {
return ip("addr", "add", address, "dev", name)
}
// Up brings up an interface to allow it to start accepting connections.
func Up(name string) error {
link, err := netlink.LinkByName(name)
if err != nil {
return err
}
return netlink.LinkSetUp(link)
func Up(name string) (err error) {
return ip("link", "set", "dev", name, "up")
}
// Down brings down an interface stopping active connections.
func Down(name string) error {
link, err := netlink.LinkByName(name)
if err != nil {
return err
}
return netlink.LinkSetDown(link)
func Down(name string) (err error) {
return ip("link", "set", "dev", name, "down")
}
// Delete removes a TUN device from the host.
func Delete(name string) error {
link, err := netlink.LinkByName(name)
if err != nil {
return err
}
return netlink.LinkDel(link)
func Delete(name string) (err error) {
return ip("link", "delete", "dev", name)
}
func ip(args ...string) (err error) {
cmd := exec.Command("ip", args...)
err = cmd.Run()
return
}

71
tun/tun_linux.go Normal file
View File

@@ -0,0 +1,71 @@
//go:build linux
// +build linux
package tun
import (
"github.com/songgao/water"
"github.com/vishvananda/netlink"
)
// New creates and returns a new TUN interface for the application.
func New(name string) (result *water.Interface, err error) {
// Setup TUN Config
cfg := water.Config{
DeviceType: water.TUN,
}
cfg.Name = name
// Create TUN Interface
result, err = water.New(cfg)
return
}
// SetMTU sets the Maximum Tansmission Unit Size for a
// Packet on the interface.
func SetMTU(name string, mtu int) error {
link, err := netlink.LinkByName(name)
if err != nil {
return err
}
return netlink.LinkSetMTU(link, mtu)
}
// SetAddress sets the interface's known address and subnet.
func SetAddress(name string, address string) error {
addr, err := netlink.ParseAddr(address)
if err != nil {
return err
}
link, err := netlink.LinkByName(name)
if err != nil {
return err
}
return netlink.AddrAdd(link, addr)
}
// Up brings up an interface to allow it to start accepting connections.
func Up(name string) error {
link, err := netlink.LinkByName(name)
if err != nil {
return err
}
return netlink.LinkSetUp(link)
}
// Down brings down an interface stopping active connections.
func Down(name string) error {
link, err := netlink.LinkByName(name)
if err != nil {
return err
}
return netlink.LinkSetDown(link)
}
// Delete removes a TUN device from the host.
func Delete(name string) error {
link, err := netlink.LinkByName(name)
if err != nil {
return err
}
return netlink.LinkDel(link)
}