diff --git a/waku/v2/node/localnode.go b/waku/v2/node/localnode.go index 221131257..329f3feb5 100644 --- a/waku/v2/node/localnode.go +++ b/waku/v2/node/localnode.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/libp2p/go-libp2p/core/event" ma "github.com/multiformats/go-multiaddr" "github.com/waku-org/go-waku/waku/v2/protocol" wenr "github.com/waku-org/go-waku/waku/v2/protocol/enr" @@ -344,3 +345,27 @@ func (w *WakuNode) watchTopicShards(ctx context.Context) error { return nil } + +func (w *WakuNode) registerAndMonitorReachability(ctx context.Context) { + var myEventSub event.Subscription + var err error + if myEventSub, err = w.host.EventBus().Subscribe(new(event.EvtLocalReachabilityChanged)); err != nil { + w.log.Error("failed to register with libp2p for reachability status", zap.Error(err)) + return + } + w.wg.Add(1) + go func() { + defer myEventSub.Close() + defer w.wg.Done() + + for { + select { + case evt := <-myEventSub.Out(): + reachability := evt.(event.EvtLocalReachabilityChanged).Reachability + w.log.Info("Node reachability changed", zap.Stringer("newReachability", reachability)) + case <-ctx.Done(): + return + } + } + }() +} diff --git a/waku/v2/node/wakunode2.go b/waku/v2/node/wakunode2.go index 946e000e1..20b2c7fb9 100644 --- a/waku/v2/node/wakunode2.go +++ b/waku/v2/node/wakunode2.go @@ -406,6 +406,7 @@ func (w *WakuNode) Start(ctx context.Context) error { return err } w.peermanager.Start(ctx) + w.registerAndMonitorReachability(ctx) } w.store = w.storeFactory(w)