From 88a00082a57c707e330a6a6dc3e03f3664d6e6c6 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 6 Dec 2023 22:52:25 +0530 Subject: [PATCH] swarm: remove /ip6zone component from listen addresses --- p2p/net/swarm/swarm_addr.go | 22 ++++++++++++++-------- p2p/net/swarm/swarm_addr_test.go | 1 + 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/p2p/net/swarm/swarm_addr.go b/p2p/net/swarm/swarm_addr.go index b2e3e4e8aa..319fa5f585 100644 --- a/p2p/net/swarm/swarm_addr.go +++ b/p2p/net/swarm/swarm_addr.go @@ -18,7 +18,17 @@ func (s *Swarm) ListenAddresses() []ma.Multiaddr { func (s *Swarm) listenAddressesNoLock() []ma.Multiaddr { addrs := make([]ma.Multiaddr, 0, len(s.listeners.m)+10) // A bit extra so we may avoid an extra allocation in the for loop below. for l := range s.listeners.m { - addrs = append(addrs, l.Multiaddr()) + a := l.Multiaddr() + // remove ip6zone from the addresses + ma.ForEach(a, func(c ma.Component) bool { + if c.Protocol().Code == ma.P_IP6ZONE { + _, a = ma.SplitFirst(a) + } + return false + }) + if a != nil { + addrs = append(addrs, a) + } } return addrs } @@ -29,11 +39,10 @@ const ifaceAddrsCacheDuration = 1 * time.Minute // listens. It expands "any interface" addresses (/ip4/0.0.0.0, /ip6/::) to // use the known local interfaces. func (s *Swarm) InterfaceListenAddresses() ([]ma.Multiaddr, error) { - s.listeners.RLock() // RLock start - + s.listeners.RLock() ifaceListenAddres := s.listeners.ifaceListenAddres isEOL := time.Now().After(s.listeners.cacheEOL) - s.listeners.RUnlock() // RLock end + s.listeners.RUnlock() if !isEOL { // Cache is valid, clone the slice @@ -41,13 +50,10 @@ func (s *Swarm) InterfaceListenAddresses() ([]ma.Multiaddr, error) { } // Cache is not valid - // Perfrom double checked locking - s.listeners.Lock() // Lock start ifaceListenAddres = s.listeners.ifaceListenAddres - isEOL = time.Now().After(s.listeners.cacheEOL) - if isEOL { + if time.Now().After(s.listeners.cacheEOL) { // Cache is still invalid listenAddres := s.listenAddressesNoLock() if len(listenAddres) > 0 { diff --git a/p2p/net/swarm/swarm_addr_test.go b/p2p/net/swarm/swarm_addr_test.go index be3e2d6689..b1cddf6dda 100644 --- a/p2p/net/swarm/swarm_addr_test.go +++ b/p2p/net/swarm/swarm_addr_test.go @@ -47,6 +47,7 @@ func TestDialBadAddrs(t *testing.T) { test(m("/ip6/fe80::1")) // link local test(m("/ip6/fe80::100")) // link local + test(m("/ip6zone/eth0/ip6/fe80::100")) // ip6zone test(m("/ip4/127.0.0.1/udp/1234/utp")) // utp }