]> Cypherpunks.ru repositories - govpn.git/blobdiff - tap.go
Explicitly store payload size in each message
[govpn.git] / tap.go
diff --git a/tap.go b/tap.go
index 4fee83a28c3ea920cb619da22a1a9ddc984d71e7..8a19df344530ef7e181a92ce4790c68b9ad2fe44 100644 (file)
--- a/tap.go
+++ b/tap.go
@@ -20,11 +20,14 @@ package govpn
 
 import (
        "io"
-       "log"
 
        "golang.org/x/crypto/poly1305"
 )
 
+const (
+       EtherSize = 14
+)
+
 type TAP struct {
        Name   string
        dev    io.ReadWriter
@@ -34,8 +37,12 @@ type TAP struct {
        synced bool
 }
 
+func TAPMaxMTU() int {
+       return MTU - poly1305.TagSize - NonceSize - PktSizeSize - EtherSize
+}
+
 func NewTAP(ifaceName string) (*TAP, error) {
-       maxIfacePktSize := MTU - poly1305.TagSize - NonceSize
+       maxIfacePktSize := TAPMaxMTU() + EtherSize
        tapRaw, err := newTAPer(ifaceName)
        if err != nil {
                return nil, err
@@ -63,8 +70,6 @@ func NewTAP(ifaceName string) (*TAP, error) {
        return &tap, nil
 }
 
-func (t *TAP) Write(data []byte) {
-       if _, err := t.dev.Write(data); err != nil {
-               log.Println("Error writing to iface: ", err)
-       }
+func (t *TAP) Write(data []byte) (n int, err error) {
+       return t.dev.Write(data)
 }