X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=govpn.go;h=a06456d452138cc1676d7a4bfef3e8d86d1fe93d;hb=e8e7d6cbd119d5916f1f8dfa415363568ede35f4;hp=fcd1a00b898591fe2ccc034685ce2d82ca164a02;hpb=1fc99e2439c3c0ad25721f80addfde5eb04ccf7e;p=govpn.git diff --git a/govpn.go b/govpn.go index fcd1a00..a06456d 100644 --- a/govpn.go +++ b/govpn.go @@ -22,13 +22,13 @@ import ( "encoding/hex" "flag" "fmt" + "io" "log" "net" "time" "code.google.com/p/go.crypto/poly1305" "code.google.com/p/go.crypto/salsa20" - "github.com/chon219/water" ) var ( @@ -48,6 +48,11 @@ const ( S20BS = 64 ) +type TAP interface { + io.Reader + io.Writer +} + type Peer struct { addr *net.UDPAddr key *[KeySize]byte // encryption key @@ -78,10 +83,7 @@ func main() { // Interface listening maxIfacePktSize := *mtu - poly1305.TagSize - NonceSize log.Println("Max MTU", maxIfacePktSize, "on interface", *ifaceName) - iface, err := water.NewTAP(*ifaceName) - if err != nil { - panic(err) - } + iface := NewTAP(*ifaceName) ethBuf := make([]byte, maxIfacePktSize) ethSink := make(chan int) ethSinkReady := make(chan bool) @@ -236,7 +238,7 @@ func main() { peer.nonceRecv = nonceRecv timeouts = 0 if _, err := iface.Write(buf[S20BS : S20BS+udpPkt.size-NonceSize-poly1305.TagSize]); err != nil { - log.Println("Error writing to iface") + log.Println("Error writing to iface: ", err) } if *verbose { fmt.Print("r")