Skip to content

feat: support overriding net interface methods #3236

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions core/network/net_provider.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package network

import "net"

type NetProvider interface {
Interfaces() ([]net.Interface, error)
InterfaceAddrs() ([]net.Addr, error)
}

type defaultNetProvider struct{}

func (defaultNetProvider) Interfaces() ([]net.Interface, error) {
return net.Interfaces()
}

func (defaultNetProvider) InterfaceAddrs() ([]net.Addr, error) {
return net.InterfaceAddrs()
}

var netProvider NetProvider = defaultNetProvider{}

func Interfaces() ([]net.Interface, error) {
return netProvider.Interfaces()
}

func InterfaceAddrs() ([]net.Addr, error) {
return netProvider.InterfaceAddrs()
}

func SetNetProvider(provider NetProvider) {
netProvider = provider
}
8 changes: 7 additions & 1 deletion p2p/discovery/mdns/mdns.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"sync"

"github.com/libp2p/go-libp2p/core/host"
"github.com/libp2p/go-libp2p/core/network"
"github.com/libp2p/go-libp2p/core/peer"

"github.com/libp2p/zeroconf/v2"
Expand Down Expand Up @@ -133,6 +134,11 @@ func (s *mdnsService) startServer() error {
return err
}

interfaces, err := network.Interfaces()
if err != nil {
return err
}

server, err := zeroconf.RegisterProxy(
s.peerName,
s.serviceName,
Expand All @@ -141,7 +147,7 @@ func (s *mdnsService) startServer() error {
s.peerName,
ips,
txts,
nil,
interfaces,
)
if err != nil {
return err
Expand Down
8 changes: 7 additions & 1 deletion p2p/host/basic/addrs_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -516,7 +516,13 @@ func (i *interfaceAddrsCache) updateUnlocked() {
}

// Resolve the interface addresses
ifaceAddrs, err := manet.InterfaceMultiaddrs()
var ifaceAddrs []ma.Multiaddr
var err error
var addrs []net.Addr
if addrs, err = network.InterfaceAddrs(); err != nil {
ifaceAddrs, err = manet.InterfaceMultiaddrsFor(addrs)
}

if err != nil {
// This usually shouldn't happen, but we could be in some kind
// of funky restricted environment.
Expand Down
3 changes: 2 additions & 1 deletion p2p/net/nat/internal/nat/natpmp.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"time"

natpmp "github.com/jackpal/go-nat-pmp"
"github.com/libp2p/go-libp2p/core/network"
)

var (
Expand Down Expand Up @@ -67,7 +68,7 @@ func (n *natpmpNAT) GetDeviceAddress() (addr net.IP, err error) {
}

func (n *natpmpNAT) GetInternalAddress() (addr net.IP, err error) {
ifaces, err := net.Interfaces()
ifaces, err := network.Interfaces()
if err != nil {
return nil, err
}
Expand Down
3 changes: 2 additions & 1 deletion p2p/net/nat/internal/nat/upnp.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/huin/goupnp"
"github.com/huin/goupnp/dcps/internetgateway1"
"github.com/huin/goupnp/dcps/internetgateway2"
"github.com/libp2p/go-libp2p/core/network"

"github.com/koron/go-ssdp"
)
Expand Down Expand Up @@ -229,7 +230,7 @@ func (u *upnp_NAT) GetInternalAddress() (net.IP, error) {
return nil, err
}

ifaces, err := net.Interfaces()
ifaces, err := network.Interfaces()
if err != nil {
return nil, err
}
Expand Down
14 changes: 13 additions & 1 deletion p2p/net/swarm/swarm_addr.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package swarm
import (
"time"

"github.com/libp2p/go-libp2p/core/network"
manet "github.com/multiformats/go-multiaddr/net"

ma "github.com/multiformats/go-multiaddr"
Expand Down Expand Up @@ -52,8 +53,19 @@ func (s *Swarm) InterfaceListenAddresses() ([]ma.Multiaddr, error) {
listenAddres := s.listenAddressesNoLock()
if len(listenAddres) > 0 {
// We're actually listening on addresses.
var ifaceAddrs []ma.Multiaddr
if addrs, err := network.InterfaceAddrs(); err == nil {
ifaceAddrs, err = manet.InterfaceMultiaddrsFor(addrs)
if err != nil {
s.listeners.Unlock() // Lock early exit
return nil, err
}
} else {
s.listeners.Unlock() // Lock early exit
return nil, err
}
var err error
ifaceListenAddres, err = manet.ResolveUnspecifiedAddresses(listenAddres, nil)
ifaceListenAddres, err = manet.ResolveUnspecifiedAddresses(listenAddres, ifaceAddrs)
if err != nil {
s.listeners.Unlock() // Lock early exit
return nil, err
Expand Down