aboutsummaryrefslogtreecommitdiff
path: root/src/tun_linux.go
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2017-11-19 13:19:07 +0100
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2017-11-19 13:19:07 +0100
commitb5ae42349c4fd88022a63006060d72b03aa83b16 (patch)
tree18fecbdba6437003f574c15eddeb75bbed9980b3 /src/tun_linux.go
parent5705a5e2efdcbbaffa5da00555b1afb3b4f9d2af (diff)
parent9ebab57c417d4fd19db6cf69f920a3adb1a1e092 (diff)
downloadwireguard-go-b5ae42349c4fd88022a63006060d72b03aa83b16.tar.gz
wireguard-go-b5ae42349c4fd88022a63006060d72b03aa83b16.zip
Merge branch 'source-caching'
Diffstat (limited to '')
-rw-r--r--src/tun_linux.go29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/tun_linux.go b/src/tun_linux.go
index accc6c6..a728a48 100644
--- a/src/tun_linux.go
+++ b/src/tun_linux.go
@@ -56,6 +56,10 @@ type NativeTun struct {
events chan TUNEvent // device related events
}
+func (tun *NativeTun) File() *os.File {
+ return tun.fd
+}
+
func (tun *NativeTun) RoutineNetlinkListener() {
sock := int(C.bind_rtmgrp())
if sock < 0 {
@@ -222,7 +226,7 @@ func (tun *NativeTun) MTU() (int, error) {
val := binary.LittleEndian.Uint32(ifr[16:20])
if val >= (1 << 31) {
- return int(val-(1<<31)) - (1 << 31), nil
+ return int(toInt32(val)), nil
}
return int(val), nil
}
@@ -248,6 +252,29 @@ func (tun *NativeTun) Close() error {
return nil
}
+func CreateTUNFromFile(name string, fd *os.File) (TUNDevice, error) {
+ device := &NativeTun{
+ fd: fd,
+ name: name,
+ events: make(chan TUNEvent, 5),
+ errors: make(chan error, 5),
+ }
+
+ // start event listener
+
+ var err error
+ device.index, err = getIFIndex(device.name)
+ if err != nil {
+ return nil, err
+ }
+
+ go device.RoutineNetlinkListener()
+
+ // set default MTU
+
+ return device, device.setMTU(DefaultMTU)
+}
+
func CreateTUN(name string) (TUNDevice, error) {
// open clone device