]> Cypherpunks.ru repositories - govpn.git/blobdiff - cmd/govpn-client/main.go
Ability to append noise to outgoing packets
[govpn.git] / cmd / govpn-client / main.go
index 119a03d3ddbfe0152e8b877e5478563abd926e07..495c22c73685e7bee678cdb70a0d235c7cf4e2f1 100644 (file)
@@ -36,9 +36,11 @@ var (
        keyPath    = flag.String("key", "", "Path to authentication key file")
        upPath     = flag.String("up", "", "Path to up-script")
        downPath   = flag.String("down", "", "Path to down-script")
-       mtu        = flag.Int("mtu", 1500, "MTU")
+       stats      = flag.String("stats", "", "Enable stats retrieving on host:port")
+       mtu        = flag.Int("mtu", 1452, "MTU for outgoing packets")
        nonceDiff  = flag.Int("noncediff", 1, "Allow nonce difference")
        timeoutP   = flag.Int("timeout", 60, "Timeout seconds")
+       noisy      = flag.Bool("noise", false, "Enable noise appending")
 )
 
 func main() {
@@ -50,6 +52,7 @@ func main() {
        govpn.MTU = *mtu
        govpn.Timeout = timeout
        govpn.Noncediff = *nonceDiff
+       govpn.NoiseEnable = *noisy
 
        id := govpn.IDDecode(*IDRaw)
        govpn.PeersInitDummy(id)
@@ -81,19 +84,30 @@ func main() {
        firstUpCall := true
        var peer *govpn.Peer
        var ethPkt []byte
-       var udpPkt *govpn.UDPPkt
+       var udpPkt govpn.UDPPkt
        var udpPktData []byte
+       knownPeers := govpn.KnownPeers(map[string]**govpn.Peer{remote.String(): &peer})
+
+       log.Println(govpn.VersionGet())
+       log.Println("Max MTU on TAP interface:", govpn.TAPMaxMTU())
+       if *stats != "" {
+               log.Println("Stats are going to listen on", *stats)
+               statsPort, err := net.Listen("tcp", *stats)
+               if err != nil {
+                       panic(err)
+               }
+               go govpn.StatsProcessor(statsPort, &knownPeers)
+       }
 
        termSignal := make(chan os.Signal, 1)
        signal.Notify(termSignal, os.Interrupt, os.Kill)
 
-       log.Println(govpn.VersionGet())
        log.Println("Starting handshake")
        handshake := govpn.HandshakeStart(conn, remote, id, key)
 
 MainCycle:
        for {
-               if peer != nil && peer.Bytes > govpn.MaxBytesPerKey {
+               if peer != nil && (peer.BytesIn+peer.BytesOut) > govpn.MaxBytesPerKey {
                        peer.Zero()
                        peer = nil
                        handshake = govpn.HandshakeStart(conn, remote, id, key)
@@ -115,7 +129,7 @@ MainCycle:
                        if timeouts >= timeout {
                                break MainCycle
                        }
-                       if udpPkt == nil {
+                       if udpPkt.Addr == nil {
                                udpReady <- struct{}{}
                                continue
                        }