diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2017-11-19 13:19:07 +0100 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2017-11-19 13:19:07 +0100 |
commit | b5ae42349c4fd88022a63006060d72b03aa83b16 (patch) | |
tree | 18fecbdba6437003f574c15eddeb75bbed9980b3 /src/tun_linux.go | |
parent | 5705a5e2efdcbbaffa5da00555b1afb3b4f9d2af (diff) | |
parent | 9ebab57c417d4fd19db6cf69f920a3adb1a1e092 (diff) |
Merge branch 'source-caching'
Diffstat (limited to 'src/tun_linux.go')
-rw-r--r-- | src/tun_linux.go | 29 |
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 |