summaryrefslogtreecommitdiff
path: root/tuntap
diff options
context:
space:
mode:
authorChristian Pointner <equinox@anytun.org>2017-08-13 22:27:35 +0200
committerChristian Pointner <equinox@anytun.org>2017-08-13 22:27:35 +0200
commitd597ee5f835e4e71c2a1a711eb4d0cf8705d36c4 (patch)
tree257fafc5a1d33c5510182a785bc6e0ee1a908df9 /tuntap
parentrevamp command line parser (diff)
basic interface configuration works now
Diffstat (limited to 'tuntap')
-rw-r--r--tuntap/tuntap.go34
1 files changed, 29 insertions, 5 deletions
diff --git a/tuntap/tuntap.go b/tuntap/tuntap.go
index 27fd2b1..6c27171 100644
--- a/tuntap/tuntap.go
+++ b/tuntap/tuntap.go
@@ -32,22 +32,44 @@ package tuntap
import (
"fmt"
+ "net"
"strings"
extlib "github.com/lab11/go-tuntap/tuntap"
+ "github.com/vishvananda/netlink"
)
type Device struct {
iface *extlib.Interface
iftype extlib.DevKind
+ ifname string
}
-func (dev *Device) Configure(ip_mask string, postup string) error {
- fmt.Printf("running: ip link set up dev %s\n", dev.iface.Name())
- fmt.Printf("running: ip addr add dev %s %s\n", dev.iface.Name(), ip_mask)
- if postup != "" {
- fmt.Printf("running: %s %s\n", postup, dev.iface.Name())
+func (dev *Device) Name() string {
+ return dev.ifname
+}
+
+func (dev *Device) Configure(addr net.IPNet) error {
+ // TODO: this only works on linux...
+ ln, err := netlink.LinkByName(dev.ifname)
+ if err != nil {
+ return fmt.Errorf("netlink(open netlink by name) failed: %v", dev.ifname, err)
+ }
+ if err = netlink.AddrAdd(ln, &netlink.Addr{IPNet: &addr}); err != nil {
+ return fmt.Errorf("netlink(addr add) failed: %v", err)
+ }
+ if err = netlink.LinkSetMTU(ln, 1400); err != nil { // TODO: hardcoded value
+ return fmt.Errorf("netlink(link set mtu) failed: %v", err)
}
+ if err = netlink.LinkSetUp(ln); err != nil {
+ return fmt.Errorf("netlink(link set up) failed: %v", err)
+ }
+ return nil
+}
+
+func (dev *Device) RunPostUp(script string) error {
+ // TODO: implement this
+ fmt.Printf("running: %s %s\n", script, dev.iface.Name())
return nil
}
@@ -69,6 +91,7 @@ func NewTunDevice(name string) (dev *Device, err error) {
if dev.iface, err = extlib.Open(name, extlib.DevTun, true); err != nil {
return
}
+ dev.ifname = strings.TrimRight(dev.iface.Name(), "\x00") // TODO: fix this upstream
return
}
@@ -77,6 +100,7 @@ func NewTapDevice(name string) (dev *Device, err error) {
if dev.iface, err = extlib.Open(name, extlib.DevTap, false); err != nil {
return
}
+ dev.ifname = strings.TrimRight(dev.iface.Name(), "\x00") // TODO: fix this upstream
return
}