diff --git a/prog/weaver/main.go b/prog/weaver/main.go index e185abde..2846fa29 100644 --- a/prog/weaver/main.go +++ b/prog/weaver/main.go @@ -151,6 +151,7 @@ func main() { config mesh.Config networkConfig weave.NetworkConfig protocolMinVersion int + resume bool ifaceName string routerName string nickName string @@ -181,6 +182,7 @@ func main() { mflag.StringVar(&config.Host, []string{"-host"}, "", "router host") mflag.IntVar(&config.Port, []string{"#port", "-port"}, mesh.Port, "router port") mflag.IntVar(&protocolMinVersion, []string{"-min-protocol-version"}, mesh.ProtocolMinVersion, "minimum weave protocol version") + mflag.BoolVar(&resume, []string{"-resume"}, false, "resume connections to previous peers") mflag.StringVar(&ifaceName, []string{"#iface", "-iface"}, "", "name of interface to capture/inject from (disabled if blank)") mflag.StringVar(&routerName, []string{"#name", "-name"}, "", "name of router (defaults to MAC of interface)") mflag.StringVar(&nickName, []string{"#nickname", "-nickname"}, "", "nickname of peer (defaults to hostname)") @@ -218,6 +220,9 @@ func main() { mflag.Parse() peers = mflag.Args() + if resume && len(peers) > 0 { + Log.Fatalf("You must not specify an initial peer list in conjuction with --resume") + } common.SetLogLevel(logLevel) @@ -267,7 +272,7 @@ func main() { router := weave.NewNetworkRouter(config, networkConfig, name, nickName, overlay, db) Log.Println("Our name is", router.Ourself) - if peers, err = router.InitialPeers(peers); err != nil { + if peers, err = router.InitialPeers(resume, peers); err != nil { Log.Fatal("Unable to get initial peer set: ", err) } diff --git a/router/network_router.go b/router/network_router.go index 93056191..af6128d6 100644 --- a/router/network_router.go +++ b/router/network_router.go @@ -230,13 +230,13 @@ func (router *NetworkRouter) ForgetConnections(peers []string) { router.persistPeers() } -func (router *NetworkRouter) InitialPeers(peers []string) ([]string, error) { - if _, err := os.Stat("restart.sentinel"); err == nil { +func (router *NetworkRouter) InitialPeers(resume bool, peers []string) ([]string, error) { + if _, err := os.Stat("restart.sentinel"); err == nil || resume { var storedPeers []string if _, err := router.db.Load(peersIdent, &storedPeers); err != nil { return nil, err } - log.Println("Restart detected - using persisted peer list:", storedPeers) + log.Println("Restart/resume detected - using persisted peer list:", storedPeers) return storedPeers, nil } diff --git a/weave b/weave index 1474c1fa..158c0da1 100755 --- a/weave +++ b/weave @@ -45,7 +45,7 @@ weave launch [--no-restart] [--ipalloc-init ] [--ipalloc-range [--ipalloc-default-subnet ]] [--no-discovery] [--no-dns] - [--trusted-subnets ,...] ... + [--trusted-subnets ,...] [--resume] ... launch-proxy [-H ] [--without-dns] [--no-multicast-route] [--log-level=debug|info|warning|error] [--no-rewrite-hosts] [--no-default-ipalloc] [--no-restart]