From 798bfeb0a7129af9a02e4710d06d8e97fd74ce48 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Tue, 14 Apr 2015 11:28:36 +0100 Subject: [PATCH] make the Router include the RouterConfig rather than copying the bulk of it --- router/local_peer.go | 5 +++-- router/router.go | 22 ++++------------------ weaver/main.go | 18 +++++++++--------- 3 files changed, 16 insertions(+), 29 deletions(-) diff --git a/router/local_peer.go b/router/local_peer.go index dc479409..651d055b 100644 --- a/router/local_peer.go +++ b/router/local_peer.go @@ -245,8 +245,9 @@ func (peer *LocalPeer) broadcastPeerUpdate(peers ...*Peer) { } func (peer *LocalPeer) checkConnectionLimit() error { - if 0 != peer.router.ConnLimit && peer.ConnectionCount() >= peer.router.ConnLimit { - return fmt.Errorf("Connection limit reached (%v)", peer.router.ConnLimit) + limit := peer.router.ConnLimit + if 0 != limit && peer.ConnectionCount() >= limit { + return fmt.Errorf("Connection limit reached (%v)", limit) } return nil } diff --git a/router/router.go b/router/router.go index 0197b008..21fbd750 100644 --- a/router/router.go +++ b/router/router.go @@ -22,8 +22,6 @@ type LogFrameFunc func(string, []byte, *layers.Ethernet) type RouterConfig struct { Port int Iface *net.Interface - Name PeerName - NickName string Password []byte ConnLimit int BufSz int @@ -31,8 +29,7 @@ type RouterConfig struct { } type Router struct { - Port int - Iface *net.Interface + RouterConfig Ourself *LocalPeer Macs *MacCache Peers *Peers @@ -41,10 +38,6 @@ type Router struct { GossipChannels map[uint32]*GossipChannel TopologyGossip Gossip UDPListener *net.UDPConn - Password []byte - ConnLimit int - BufSz int - LogFrame LogFrameFunc } type PacketSource interface { @@ -60,15 +53,8 @@ type PacketSourceSink interface { PacketSink } -func NewRouter(config RouterConfig) *Router { - router := &Router{ - Port: config.Port, - Iface: config.Iface, - GossipChannels: make(map[uint32]*GossipChannel), - Password: config.Password, - ConnLimit: config.ConnLimit, - BufSz: config.BufSz, - LogFrame: config.LogFrame} +func NewRouter(config RouterConfig, name PeerName, nickName string) *Router { + router := &Router{RouterConfig: config, GossipChannels: make(map[uint32]*GossipChannel)} onMacExpiry := func(mac net.HardwareAddr, peer *Peer) { log.Println("Expired MAC", mac, "at", peer.FullName()) } @@ -76,7 +62,7 @@ func NewRouter(config RouterConfig) *Router { router.Macs.Delete(peer) log.Println("Removed unreachable peer", peer.FullName()) } - router.Ourself = NewLocalPeer(config.Name, config.NickName, router) + router.Ourself = NewLocalPeer(name, nickName, router) router.Macs = NewMacCache(macMaxAge, onMacExpiry) router.Peers = NewPeers(router.Ourself.Peer, onPeerGC) router.Peers.FetchWithDefault(router.Ourself.Peer) diff --git a/weaver/main.go b/weaver/main.go index e9eab0b1..614d1db7 100644 --- a/weaver/main.go +++ b/weaver/main.go @@ -39,6 +39,7 @@ func main() { justVersion bool ifaceName string routerName string + nickName string password string wait int debug bool @@ -52,7 +53,7 @@ func main() { flag.IntVar(&config.Port, "port", weave.Port, "router port") flag.StringVar(&ifaceName, "iface", "", "name of interface to capture/inject from (disabled if blank)") flag.StringVar(&routerName, "name", "", "name of router (defaults to MAC of interface)") - flag.StringVar(&config.NickName, "nickname", "", "nickname of peer (defaults to hostname)") + flag.StringVar(&nickName, "nickname", "", "nickname of peer (defaults to hostname)") flag.StringVar(&password, "password", "", "network password") flag.IntVar(&wait, "wait", 0, "number of seconds to wait for interface to be created and come up (0 = don't wait)") flag.BoolVar(&debug, "debug", false, "enable debug logging") @@ -86,19 +87,18 @@ func main() { } routerName = config.Iface.HardwareAddr.String() } + name, err := weave.PeerNameFromUserInput(routerName) + if err != nil { + log.Fatal(err) + } - if config.NickName == "" { - config.NickName, err = os.Hostname() + if nickName == "" { + nickName, err = os.Hostname() if err != nil { log.Fatal(err) } } - config.Name, err = weave.PeerNameFromUserInput(routerName) - if err != nil { - log.Fatal(err) - } - if password == "" { password = os.Getenv("WEAVE_PASSWORD") } @@ -119,7 +119,7 @@ func main() { config.BufSz = bufSzMB * 1024 * 1024 config.LogFrame = logFrameFunc(debug) - router := weave.NewRouter(config) + router := weave.NewRouter(config, name, nickName) log.Println("Our name is", router.Ourself.FullName()) router.Start() initiateConnections(router, peers)