mirror of
https://github.com/status-im/go-waku.git
synced 2025-02-27 04:20:42 +00:00
feat: add NAT for DiscV5 UDP port (#164)
This commit is contained in:
parent
c6fcbea336
commit
c8caa46c99
@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
"github.com/ethereum/go-ethereum/p2p/discover"
|
||||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||||
"github.com/ethereum/go-ethereum/p2p/enr"
|
"github.com/ethereum/go-ethereum/p2p/enr"
|
||||||
|
"github.com/ethereum/go-ethereum/p2p/nat"
|
||||||
logging "github.com/ipfs/go-log"
|
logging "github.com/ipfs/go-log"
|
||||||
"github.com/libp2p/go-libp2p-core/discovery"
|
"github.com/libp2p/go-libp2p-core/discovery"
|
||||||
"github.com/libp2p/go-libp2p-core/host"
|
"github.com/libp2p/go-libp2p-core/host"
|
||||||
@ -33,6 +34,8 @@ type DiscoveryV5 struct {
|
|||||||
udpAddr *net.UDPAddr
|
udpAddr *net.UDPAddr
|
||||||
listener *discover.UDPv5
|
listener *discover.UDPv5
|
||||||
localnode *enode.LocalNode
|
localnode *enode.LocalNode
|
||||||
|
NAT nat.Interface
|
||||||
|
quit chan struct{}
|
||||||
|
|
||||||
peerCache peerCache
|
peerCache peerCache
|
||||||
}
|
}
|
||||||
@ -130,9 +133,15 @@ func NewDiscoveryV5(host host.Host, ipAddr net.IP, tcpPort int, priv *ecdsa.Priv
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var NAT nat.Interface = nil
|
||||||
|
if params.advertiseAddr == nil {
|
||||||
|
NAT = nat.Any()
|
||||||
|
}
|
||||||
|
|
||||||
return &DiscoveryV5{
|
return &DiscoveryV5{
|
||||||
host: host,
|
host: host,
|
||||||
params: params,
|
params: params,
|
||||||
|
NAT: NAT,
|
||||||
peerCache: peerCache{
|
peerCache: peerCache{
|
||||||
rng: rand.New(rand.NewSource(rand.Int63())),
|
rng: rand.New(rand.NewSource(rand.Int63())),
|
||||||
recs: make(map[peer.ID]peerRecord),
|
recs: make(map[peer.ID]peerRecord),
|
||||||
@ -175,6 +184,7 @@ func newLocalnode(priv *ecdsa.PrivateKey, ipAddr net.IP, udpPort int, tcpPort in
|
|||||||
if advertiseAddr != nil {
|
if advertiseAddr != nil {
|
||||||
localnode.SetStaticIP(*advertiseAddr)
|
localnode.SetStaticIP(*advertiseAddr)
|
||||||
}
|
}
|
||||||
|
|
||||||
return localnode, nil
|
return localnode, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -184,6 +194,17 @@ func (d *DiscoveryV5) listen() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
d.udpAddr = conn.LocalAddr().(*net.UDPAddr)
|
||||||
|
|
||||||
|
if d.NAT != nil && !d.udpAddr.IP.IsLoopback() {
|
||||||
|
go func() {
|
||||||
|
nat.Map(d.NAT, d.quit, "udp", d.udpAddr.Port, d.udpAddr.Port, "go-waku discv5 discovery")
|
||||||
|
}()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
d.localnode.SetFallbackUDP(d.udpAddr.Port)
|
||||||
|
|
||||||
listener, err := discover.ListenV5(conn, d.localnode, d.config)
|
listener, err := discover.ListenV5(conn, d.localnode, d.config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -191,6 +212,9 @@ func (d *DiscoveryV5) listen() error {
|
|||||||
|
|
||||||
d.listener = listener
|
d.listener = listener
|
||||||
|
|
||||||
|
log.Info(fmt.Sprintf("Started Discovery V5 at %s:%d, advertising IP: %s:%d", d.udpAddr.IP, d.udpAddr.Port, d.localnode.Node().IP(), d.params.tcpPort))
|
||||||
|
log.Info("Discovery V5 ", d.localnode.Node())
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,8 +227,7 @@ func (d *DiscoveryV5) Start() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Info(fmt.Sprintf("Started Discovery V5 at %s:%d, advertising IP: %s:%d", d.udpAddr.IP, d.udpAddr.Port, d.localnode.Node().IP(), d.params.tcpPort))
|
d.quit = make(chan struct{})
|
||||||
log.Info("Discovery V5 ", d.localnode.Node())
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -215,6 +238,9 @@ func (d *DiscoveryV5) Stop() {
|
|||||||
|
|
||||||
d.listener.Close()
|
d.listener.Close()
|
||||||
d.listener = nil
|
d.listener = nil
|
||||||
|
|
||||||
|
close(d.quit)
|
||||||
|
|
||||||
log.Info("Stopped Discovery V5")
|
log.Info("Stopped Discovery V5")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user