From 7e114d44c8cbdbf65a8fbffd133f632d4fd9a1ff Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Wed, 4 Jun 2025 12:43:17 +0200 Subject: [PATCH 1/2] chore: adding dns name servers and discv5 auto update nwaku configurations (#78) --- waku/common/config.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/waku/common/config.go b/waku/common/config.go index 5026ab0..1a57f00 100644 --- a/waku/common/config.go +++ b/waku/common/config.go @@ -33,4 +33,8 @@ type WakuConfig struct { PeerExchangeNode string `json:"peerExchangeNode,omitempty"` TcpPort int `json:"tcpPort,omitempty"` RateLimits RateLimitsConfig `json:"rateLimits,omitempty"` + DnsDiscoveryNameServers []string `json:"dnsDiscoveryNameServers,omitempty"` + DnsAddrsNameServers []string `json:"dnsAddrsNameServers,omitempty"` + Discv5EnrAutoUpdate bool `json:"discv5EnrAutoUpdate,omitempty"` + MaxConnections int `json:"maxConnections,omitempty"` } From 34e45fc08fb8aec1d83ddeec18de22f84b07222f Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 5 Jun 2025 17:25:26 +0200 Subject: [PATCH 2/2] feat: integrating waku_disconnect_all_peers (#79) --- waku/nwaku.go | 23 +++++++++ waku/nwaku_test.go | 114 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) diff --git a/waku/nwaku.go b/waku/nwaku.go index 6e5eee5..beaf767 100644 --- a/waku/nwaku.go +++ b/waku/nwaku.go @@ -207,6 +207,12 @@ package waku resp); } + static void cGoWakuDisconnectAllPeers(void* wakuCtx, void* resp) { + waku_disconnect_all_peers(wakuCtx, + (WakuCallBack) GoCallback, + resp); + } + static void cGoWakuListenAddresses(void* wakuCtx, void* resp) { waku_listen_addresses(wakuCtx, (WakuCallBack) GoCallback, resp); } @@ -636,6 +642,23 @@ func (n *WakuNode) DisconnectPeerByID(peerID peer.ID) error { return errors.New(errMsg) } +func (n *WakuNode) DisconnectAllPeers() error { + wg := sync.WaitGroup{} + + var resp = C.allocResp(unsafe.Pointer(&wg)) + defer C.freeResp(resp) + + wg.Add(1) + C.cGoWakuDisconnectAllPeers(n.wakuCtx, resp) + wg.Wait() + + if C.getRet(resp) == C.RET_OK { + return nil + } + errMsg := "error DisconnectAllPeers: " + C.GoStringN(C.getMyCharPtr(resp), C.int(C.getMyCharLen(resp))) + return errors.New(errMsg) +} + func (n *WakuNode) GetConnectedPeers() (peer.IDSlice, error) { if n == nil { err := errors.New("waku node is nil") diff --git a/waku/nwaku_test.go b/waku/nwaku_test.go index 8d5b8cd..9de6abe 100644 --- a/waku/nwaku_test.go +++ b/waku/nwaku_test.go @@ -1031,3 +1031,117 @@ func TestOnline(t *testing.T) { require.NoError(t, node1.Stop()) require.NoError(t, node2.Stop()) } + +func TestDisconnectAllPeers(t *testing.T) { + + clusterId := uint16(16) + shardId := uint16(64) + + tcpPort, udpPort, err := GetFreePortIfNeeded(0, 0) + require.NoError(t, err) + + // start node1 + wakuConfig1 := common.WakuConfig{ + Relay: true, + LogLevel: "DEBUG", + Discv5Discovery: false, + ClusterID: clusterId, + Shards: []uint16{shardId}, + Discv5UdpPort: udpPort, + TcpPort: tcpPort, + } + + node1, err := NewWakuNode(&wakuConfig1, "node1") + require.NoError(t, err) + require.NoError(t, node1.Start()) + defer node1.Stop() + + tcpPort, udpPort, err = GetFreePortIfNeeded(0, 0) + require.NoError(t, err) + + // start node2 + wakuConfig2 := common.WakuConfig{ + Relay: true, + LogLevel: "DEBUG", + Discv5Discovery: false, + ClusterID: clusterId, + Shards: []uint16{shardId}, + Discv5UdpPort: udpPort, + TcpPort: tcpPort, + } + node2, err := NewWakuNode(&wakuConfig2, "node2") + require.NoError(t, err) + require.NoError(t, node2.Start()) + defer node2.Stop() + multiaddr2, err := node2.ListenAddresses() + require.NoError(t, err) + require.NotNil(t, multiaddr2) + require.True(t, len(multiaddr2) > 0) + + tcpPort, udpPort, err = GetFreePortIfNeeded(0, 0) + require.NoError(t, err) + + // start node3 + wakuConfig3 := common.WakuConfig{ + Relay: true, + LogLevel: "DEBUG", + Discv5Discovery: false, + ClusterID: clusterId, + Shards: []uint16{shardId}, + Discv5UdpPort: udpPort, + TcpPort: tcpPort, + } + node3, err := NewWakuNode(&wakuConfig3, "node3") + require.NoError(t, err) + require.NoError(t, node3.Start()) + defer node3.Stop() + multiaddr3, err := node3.ListenAddresses() + require.NoError(t, err) + require.NotNil(t, multiaddr3) + require.True(t, len(multiaddr3) > 0) + + tcpPort, udpPort, err = GetFreePortIfNeeded(0, 0) + require.NoError(t, err) + + // start node4 + wakuConfig4 := common.WakuConfig{ + Relay: true, + LogLevel: "DEBUG", + Discv5Discovery: false, + ClusterID: clusterId, + Shards: []uint16{shardId}, + Discv5UdpPort: udpPort, + TcpPort: tcpPort, + } + node4, err := NewWakuNode(&wakuConfig4, "node4") + require.NoError(t, err) + require.NoError(t, node4.Start()) + defer node4.Stop() + multiaddr4, err := node4.ListenAddresses() + require.NoError(t, err) + require.NotNil(t, multiaddr4) + require.True(t, len(multiaddr4) > 0) + + to_dial := []ma.Multiaddr{multiaddr2[0], multiaddr3[0], multiaddr4[0]} + + for _, addr := range to_dial { + ctx, cancel := context.WithTimeout(context.Background(), requestTimeout) + defer cancel() + err = node1.Connect(ctx, addr) + require.NoError(t, err) + } + + time.Sleep(1 * time.Second) + + peerCount1, err := node1.GetNumConnectedPeers() + require.NoError(t, err) + require.True(t, peerCount1 == 3, "node1 should have 3 peers") + + err = node1.DisconnectAllPeers() + require.NoError(t, err) + time.Sleep(1 * time.Second) + peerCount1, err = node1.GetNumConnectedPeers() + require.NoError(t, err) + require.True(t, peerCount1 == 0, "node1 should have 0 peers") + +}