mtu = flag.Int("mtu", govpn.MTUDefault, "MTU of 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
timeout int
firstUpCall bool = true
knownPeers govpn.KnownPeers
- idsCache *govpn.CipherCache
+ idsCache *govpn.MACCache
)
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)
govpn.EGDInit(*egdPath)
}
+ if *proxyAddr != "" {
+ *proto = "tcp"
+ }
+ if !(*proto == "udp" || *proto == "tcp") {
+ log.Fatalln("Unknown protocol specified")
+ }
if *verifierRaw == "" {
log.Fatalln("No verifier specified")
}
Verifier: verifier,
DSAPriv: priv,
}
- idsCache = govpn.NewCipherCache()
+ idsCache = govpn.NewMACCache()
confs := map[govpn.PeerId]*govpn.PeerConf{*verifier.Id: conf}
idsCache.Update(&confs)
log.Println(govpn.VersionGet())
go govpn.StatsProcessor(statsPort, &knownPeers)
}
+ if *syslog {
+ govpn.SyslogEnable()
+ }
+
termSignal := make(chan os.Signal, 1)
signal.Notify(termSignal, os.Interrupt, os.Kill)
timeouted := make(chan struct{})
rehandshaking := make(chan struct{})
termination := make(chan struct{})
- if *proxyAddr != "" {
- *proto = "tcp"
- }
switch *proto {
case "udp":
go startUDP(timeouted, rehandshaking, termination)
} else {
go startTCP(timeouted, rehandshaking, termination)
}
- default:
- log.Fatalln("Unknown protocol specified")
}
select {
case <-termSignal:
- log.Fatalln("Finishing")
+ govpn.BothPrintf(`[finish remote="%s"]`, *remoteAddr)
termination <- struct{}{}
break MainCycle
case <-timeouted:
- break MainCycle
+ if *noreconnect {
+ break MainCycle
+ }
+ govpn.BothPrintf(`[sleep seconds="%d"]`, timeout)
+ time.Sleep(time.Second * time.Duration(timeout))
case <-rehandshaking:
}
close(timeouted)