p2p/simulations: Fix the DockerAdapter

Signed-off-by: Lewis Marshall <lewis@lmars.net>
This commit is contained in:
Lewis Marshall 2017-06-18 16:13:05 +02:00
parent 9627a75ce0
commit 898f0c1b15
2 changed files with 26 additions and 7 deletions

View file

@ -13,6 +13,7 @@ import (
"github.com/docker/docker/pkg/reexec" "github.com/docker/docker/pkg/reexec"
"github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/node"
"github.com/ethereum/go-ethereum/p2p/discover"
) )
// DockerAdapter is a NodeAdapter which runs nodes inside Docker containers. // DockerAdapter is a NodeAdapter which runs nodes inside Docker containers.
@ -20,7 +21,9 @@ import (
// A Docker image is built which contains the current binary at /bin/p2p-node // A Docker image is built which contains the current binary at /bin/p2p-node
// which when executed runs the underlying service (see the description // which when executed runs the underlying service (see the description
// of the execP2PNode function for more details) // of the execP2PNode function for more details)
type DockerAdapter struct{} type DockerAdapter struct {
ExecAdapter
}
// NewDockerAdapter builds the p2p-node Docker image containing the current // NewDockerAdapter builds the p2p-node Docker image containing the current
// binary and returns a DockerAdapter // binary and returns a DockerAdapter
@ -33,7 +36,11 @@ func NewDockerAdapter() (*DockerAdapter, error) {
return nil, err return nil, err
} }
return &DockerAdapter{}, nil return &DockerAdapter{
ExecAdapter{
nodes: make(map[discover.NodeID]*ExecNode),
},
}, nil
} }
// Name returns the name of the adapter for logging purpoeses // Name returns the name of the adapter for logging purpoeses
@ -58,6 +65,9 @@ func (d *DockerAdapter) NewNode(config *NodeConfig) (Node, error) {
Node: config, Node: config,
} }
conf.Stack.DataDir = "/data" conf.Stack.DataDir = "/data"
conf.Stack.WSHost = "0.0.0.0"
conf.Stack.WSOrigins = []string{"*"}
conf.Stack.WSExposeAll = true
conf.Stack.P2P.EnableMsgEvents = true conf.Stack.P2P.EnableMsgEvents = true
conf.Stack.P2P.NoDiscovery = true conf.Stack.P2P.NoDiscovery = true
conf.Stack.P2P.NAT = nil conf.Stack.P2P.NAT = nil
@ -66,9 +76,11 @@ func (d *DockerAdapter) NewNode(config *NodeConfig) (Node, error) {
ExecNode: ExecNode{ ExecNode: ExecNode{
ID: config.ID, ID: config.ID,
Config: conf, Config: conf,
adapter: &d.ExecAdapter,
}, },
} }
node.newCmd = node.dockerCommand node.newCmd = node.dockerCommand
d.ExecAdapter.nodes[node.ID] = &node.ExecNode
return node, nil return node, nil
} }

View file

@ -347,17 +347,24 @@ func execP2PNode() {
conf.Stack.P2P.PrivateKey = conf.Node.PrivateKey conf.Stack.P2P.PrivateKey = conf.Node.PrivateKey
// use explicit IP address in ListenAddr so that Enode URL is usable // use explicit IP address in ListenAddr so that Enode URL is usable
if strings.HasPrefix(conf.Stack.P2P.ListenAddr, ":") { externalIP := func() string {
addrs, err := net.InterfaceAddrs() addrs, err := net.InterfaceAddrs()
if err != nil { if err != nil {
log.Crit("error getting IP address", "err", err) log.Crit("error getting IP address", "err", err)
} }
for _, addr := range addrs { for _, addr := range addrs {
if ip, ok := addr.(*net.IPNet); ok && !ip.IP.IsLoopback() { if ip, ok := addr.(*net.IPNet); ok && !ip.IP.IsLoopback() {
conf.Stack.P2P.ListenAddr = ip.IP.String() + conf.Stack.P2P.ListenAddr return ip.IP.String()
break
} }
} }
log.Crit("unable to determine explicit IP address")
return ""
}
if strings.HasPrefix(conf.Stack.P2P.ListenAddr, ":") {
conf.Stack.P2P.ListenAddr = externalIP() + conf.Stack.P2P.ListenAddr
}
if conf.Stack.WSHost == "0.0.0.0" {
conf.Stack.WSHost = externalIP()
} }
// initialize the devp2p stack // initialize the devp2p stack