]> Cypherpunks.ru repositories - govpn.git/blobdiff - src/cypherpunks.ru/govpn/cmd/govpn-client/main.go
Ability to use TUN-interfaces under GNU/Linux
[govpn.git] / src / cypherpunks.ru / govpn / cmd / govpn-client / main.go
index 7a858bba79eef5cbe868111462a11f77b7a9a80d..36ff72a113e6ac0db3e809e90af6954fb57f9f6c 100644 (file)
@@ -34,7 +34,7 @@ import (
 var (
        remoteAddr  = flag.String("remote", "", "Remote server address")
        proto       = flag.String("proto", "udp", "Protocol to use: udp or tcp")
-       ifaceName   = flag.String("iface", "tap0", "TAP network interface")
+       ifaceName   = flag.String("iface", "tap0", "TUN/TAP network interface")
        verifierRaw = flag.String("verifier", "", "Verifier")
        keyPath     = flag.String("key", "", "Path to passphrase file")
        upPath      = flag.String("up", "", "Path to up-script")
@@ -42,14 +42,16 @@ var (
        stats       = flag.String("stats", "", "Enable stats retrieving on host:port")
        proxyAddr   = flag.String("proxy", "", "Use HTTP proxy on host:port")
        proxyAuth   = flag.String("proxy-auth", "", "user:password Basic proxy auth")
-       mtu         = flag.Int("mtu", govpn.MTUDefault, "MTU of TAP interface")
+       mtu         = flag.Int("mtu", govpn.MTUDefault, "MTU of TUN/TAP interface")
        timeoutP    = flag.Int("timeout", 60, "Timeout seconds")
        timeSync    = flag.Int("timesync", 0, "Time synchronization requirement")
+       noreconnect = flag.Bool("noreconnect", false, "Disable reconnection after timeout")
        noisy       = flag.Bool("noise", false, "Enable noise appending")
        encless     = flag.Bool("encless", false, "Encryptionless mode")
        cpr         = flag.Int("cpr", 0, "Enable constant KiB/sec out traffic rate")
        egdPath     = flag.String("egd", "", "Optional path to EGD socket")
        syslog      = flag.Bool("syslog", false, "Enable logging to syslog")
+       version     = flag.Bool("version", false, "Print version information")
        warranty    = flag.Bool("warranty", false, "Print warranty information")
 
        conf        *govpn.PeerConf
@@ -66,6 +68,10 @@ func main() {
                fmt.Println(govpn.Warranty)
                return
        }
+       if *version {
+               fmt.Println(govpn.VersionGet())
+               return
+       }
        timeout = *timeoutP
        var err error
        log.SetFlags(log.Ldate | log.Lmicroseconds | log.Lshortfile)
@@ -121,7 +127,7 @@ func main() {
 
        tap, err = govpn.TAPListen(*ifaceName, *mtu)
        if err != nil {
-               log.Fatalln("Can not listen on TAP interface:", err)
+               log.Fatalln("Can not listen on TUN/TAP interface:", err)
        }
 
        if *stats != "" {
@@ -161,6 +167,9 @@ MainCycle:
                        termination <- struct{}{}
                        break MainCycle
                case <-timeouted:
+                       if *noreconnect {
+                               break MainCycle
+                       }
                        govpn.BothPrintf(`[sleep seconds="%d"]`, timeout)
                        time.Sleep(time.Second * time.Duration(timeout))
                case <-rehandshaking: