cmd/geth, cmd/utils, eth, p2p: pass and honor a no discovery flag
This commit is contained in:
parent
278183c7e7
commit
e1a0ee8fc5
@ -260,6 +260,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
|
|||||||
utils.AutoDAGFlag,
|
utils.AutoDAGFlag,
|
||||||
utils.NATFlag,
|
utils.NATFlag,
|
||||||
utils.NatspecEnabledFlag,
|
utils.NatspecEnabledFlag,
|
||||||
|
utils.NoDiscoverFlag,
|
||||||
utils.NodeKeyFileFlag,
|
utils.NodeKeyFileFlag,
|
||||||
utils.NodeKeyHexFlag,
|
utils.NodeKeyHexFlag,
|
||||||
utils.RPCEnabledFlag,
|
utils.RPCEnabledFlag,
|
||||||
|
@ -235,6 +235,10 @@ var (
|
|||||||
Usage: "NAT port mapping mechanism (any|none|upnp|pmp|extip:<IP>)",
|
Usage: "NAT port mapping mechanism (any|none|upnp|pmp|extip:<IP>)",
|
||||||
Value: "any",
|
Value: "any",
|
||||||
}
|
}
|
||||||
|
NoDiscoverFlag = cli.BoolFlag{
|
||||||
|
Name: "nodiscover",
|
||||||
|
Usage: "Disables the peer discovery mechanism (manual peer addition)",
|
||||||
|
}
|
||||||
WhisperEnabledFlag = cli.BoolFlag{
|
WhisperEnabledFlag = cli.BoolFlag{
|
||||||
Name: "shh",
|
Name: "shh",
|
||||||
Usage: "Enable whisper",
|
Usage: "Enable whisper",
|
||||||
@ -312,6 +316,7 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config {
|
|||||||
Port: ctx.GlobalString(ListenPortFlag.Name),
|
Port: ctx.GlobalString(ListenPortFlag.Name),
|
||||||
NAT: GetNAT(ctx),
|
NAT: GetNAT(ctx),
|
||||||
NatSpec: ctx.GlobalBool(NatspecEnabledFlag.Name),
|
NatSpec: ctx.GlobalBool(NatspecEnabledFlag.Name),
|
||||||
|
Discovery: !ctx.GlobalBool(NoDiscoverFlag.Name),
|
||||||
NodeKey: GetNodeKey(ctx),
|
NodeKey: GetNodeKey(ctx),
|
||||||
Shh: ctx.GlobalBool(WhisperEnabledFlag.Name),
|
Shh: ctx.GlobalBool(WhisperEnabledFlag.Name),
|
||||||
Dial: true,
|
Dial: true,
|
||||||
@ -320,7 +325,6 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config {
|
|||||||
SolcPath: ctx.GlobalString(SolcPathFlag.Name),
|
SolcPath: ctx.GlobalString(SolcPathFlag.Name),
|
||||||
AutoDAG: ctx.GlobalBool(AutoDAGFlag.Name) || ctx.GlobalBool(MiningEnabledFlag.Name),
|
AutoDAG: ctx.GlobalBool(AutoDAGFlag.Name) || ctx.GlobalBool(MiningEnabledFlag.Name),
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetChain(ctx *cli.Context) (*core.ChainManager, common.Database, common.Database) {
|
func GetChain(ctx *cli.Context) (*core.ChainManager, common.Database, common.Database) {
|
||||||
|
@ -72,6 +72,7 @@ type Config struct {
|
|||||||
|
|
||||||
MaxPeers int
|
MaxPeers int
|
||||||
MaxPendingPeers int
|
MaxPendingPeers int
|
||||||
|
Discovery bool
|
||||||
Port string
|
Port string
|
||||||
|
|
||||||
// Space-separated list of discovery node URLs
|
// Space-separated list of discovery node URLs
|
||||||
@ -311,6 +312,7 @@ func New(config *Config) (*Ethereum, error) {
|
|||||||
Name: config.Name,
|
Name: config.Name,
|
||||||
MaxPeers: config.MaxPeers,
|
MaxPeers: config.MaxPeers,
|
||||||
MaxPendingPeers: config.MaxPendingPeers,
|
MaxPendingPeers: config.MaxPendingPeers,
|
||||||
|
Discovery: config.Discovery,
|
||||||
Protocols: protocols,
|
Protocols: protocols,
|
||||||
NAT: config.NAT,
|
NAT: config.NAT,
|
||||||
NoDial: !config.Dial,
|
NoDial: !config.Dial,
|
||||||
|
@ -55,6 +55,10 @@ type Server struct {
|
|||||||
// Zero defaults to preset values.
|
// Zero defaults to preset values.
|
||||||
MaxPendingPeers int
|
MaxPendingPeers int
|
||||||
|
|
||||||
|
// Discovery specifies whether the peer discovery mechanism should be started
|
||||||
|
// or not. Disabling is usually useful for protocol debugging (manual topology).
|
||||||
|
Discovery bool
|
||||||
|
|
||||||
// Name sets the node name of this server.
|
// Name sets the node name of this server.
|
||||||
// Use common.MakeName to create a name that follows existing conventions.
|
// Use common.MakeName to create a name that follows existing conventions.
|
||||||
Name string
|
Name string
|
||||||
@ -240,6 +244,14 @@ func (srv *Server) Self() *discover.Node {
|
|||||||
if !srv.running {
|
if !srv.running {
|
||||||
return &discover.Node{IP: net.ParseIP("0.0.0.0")}
|
return &discover.Node{IP: net.ParseIP("0.0.0.0")}
|
||||||
}
|
}
|
||||||
|
if srv.ntab == nil {
|
||||||
|
addr := srv.listener.Addr().(*net.TCPAddr)
|
||||||
|
return &discover.Node{
|
||||||
|
ID: discover.PubkeyID(&srv.PrivateKey.PublicKey),
|
||||||
|
IP: addr.IP,
|
||||||
|
TCP: uint16(addr.Port),
|
||||||
|
}
|
||||||
|
}
|
||||||
return srv.ntab.Self()
|
return srv.ntab.Self()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,15 +302,22 @@ func (srv *Server) Start() (err error) {
|
|||||||
srv.peerOpDone = make(chan struct{})
|
srv.peerOpDone = make(chan struct{})
|
||||||
|
|
||||||
// node table
|
// node table
|
||||||
ntab, err := discover.ListenUDP(srv.PrivateKey, srv.ListenAddr, srv.NAT, srv.NodeDatabase)
|
if srv.Discovery {
|
||||||
if err != nil {
|
ntab, err := discover.ListenUDP(srv.PrivateKey, srv.ListenAddr, srv.NAT, srv.NodeDatabase)
|
||||||
return err
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
srv.ntab = ntab
|
||||||
}
|
}
|
||||||
srv.ntab = ntab
|
|
||||||
dialer := newDialState(srv.StaticNodes, srv.ntab, srv.MaxPeers/2)
|
dynPeers := srv.MaxPeers / 2
|
||||||
|
if !srv.Discovery {
|
||||||
|
dynPeers = 0
|
||||||
|
}
|
||||||
|
dialer := newDialState(srv.StaticNodes, srv.ntab, dynPeers)
|
||||||
|
|
||||||
// handshake
|
// handshake
|
||||||
srv.ourHandshake = &protoHandshake{Version: baseProtocolVersion, Name: srv.Name, ID: ntab.Self().ID}
|
srv.ourHandshake = &protoHandshake{Version: baseProtocolVersion, Name: srv.Name, ID: discover.PubkeyID(&srv.PrivateKey.PublicKey)}
|
||||||
for _, p := range srv.Protocols {
|
for _, p := range srv.Protocols {
|
||||||
srv.ourHandshake.Caps = append(srv.ourHandshake.Caps, p.cap())
|
srv.ourHandshake.Caps = append(srv.ourHandshake.Caps, p.cap())
|
||||||
}
|
}
|
||||||
@ -454,7 +473,9 @@ running:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Terminate discovery. If there is a running lookup it will terminate soon.
|
// Terminate discovery. If there is a running lookup it will terminate soon.
|
||||||
srv.ntab.Close()
|
if srv.ntab != nil {
|
||||||
|
srv.ntab.Close()
|
||||||
|
}
|
||||||
// Disconnect all peers.
|
// Disconnect all peers.
|
||||||
for _, p := range peers {
|
for _, p := range peers {
|
||||||
p.Disconnect(DiscQuitting)
|
p.Disconnect(DiscQuitting)
|
||||||
@ -486,7 +507,7 @@ func (srv *Server) encHandshakeChecks(peers map[discover.NodeID]*Peer, c *conn)
|
|||||||
return DiscTooManyPeers
|
return DiscTooManyPeers
|
||||||
case peers[c.id] != nil:
|
case peers[c.id] != nil:
|
||||||
return DiscAlreadyConnected
|
return DiscAlreadyConnected
|
||||||
case c.id == srv.ntab.Self().ID:
|
case c.id == srv.Self().ID:
|
||||||
return DiscSelf
|
return DiscSelf
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user