diff --git a/core/node/groups.go b/core/node/groups.go index 8e09dffc395..47b1872ca15 100644 --- a/core/node/groups.go +++ b/core/node/groups.go @@ -136,6 +136,7 @@ func LibP2P(bcfg *BuildCfg, cfg *config.Config) fx.Option { fx.Invoke(libp2p.StartListening(cfg.Addresses.Swarm)), fx.Invoke(libp2p.SetupDiscovery(cfg.Discovery.MDNS.Enabled, cfg.Discovery.MDNS.Interval)), fx.Provide(libp2p.ForceReachability(cfg.Internal.Libp2pForceReachability)), + fx.Provide(libp2p.StaticRelays(cfg.Swarm.StaticRelays)), fx.Provide(libp2p.Security(!bcfg.DisableEncryptedConnections, cfg.Swarm.Transports)), @@ -145,7 +146,7 @@ func LibP2P(bcfg *BuildCfg, cfg *config.Config) fx.Option { maybeProvide(libp2p.BandwidthCounter, !cfg.Swarm.DisableBandwidthMetrics), maybeProvide(libp2p.NatPortMap, !cfg.Swarm.DisableNatPortMap), - maybeProvide(libp2p.AutoRelay, cfg.Swarm.EnableAutoRelay), + maybeProvide(libp2p.AutoRelay(len(cfg.Swarm.StaticRelays) == 0), cfg.Swarm.EnableAutoRelay), autonat, connmgr, ps, diff --git a/core/node/libp2p/relay.go b/core/node/libp2p/relay.go index c5d38c96f61..d456179294b 100644 --- a/core/node/libp2p/relay.go +++ b/core/node/libp2p/relay.go @@ -2,6 +2,7 @@ package libp2p import ( config "github.com/ipfs/go-ipfs-config" + "github.com/libp2p/go-libp2p-core/peer" "github.com/libp2p/go-libp2p" "github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/relay" @@ -42,4 +43,30 @@ func RelayService(enable bool, relayOpts config.RelayService) func() (opts Libp2 } } -var AutoRelay = simpleOpt(libp2p.ChainOptions(libp2p.EnableAutoRelay(), libp2p.DefaultStaticRelays())) +func StaticRelays(relays []string) func() (opts Libp2pOpts, err error) { + return func() (opts Libp2pOpts, err error) { + staticRelays := make([]peer.AddrInfo, 0, len(relays)) + for _, s := range relays { + var addr *peer.AddrInfo + addr, err = peer.AddrInfoFromString(s) + if err != nil { + return + } + staticRelays = append(staticRelays, *addr) + } + if len(staticRelays) > 0 { + opts.Opts = append(opts.Opts, libp2p.StaticRelays(staticRelays)) + } + return + } +} + +func AutoRelay(addDefaultRelays bool) func() (opts Libp2pOpts, err error) { + return func() (opts Libp2pOpts, err error) { + opts.Opts = append(opts.Opts, libp2p.EnableAutoRelay()) + if addDefaultRelays { + opts.Opts = append(opts.Opts, libp2p.DefaultStaticRelays()) + } + return + } +} diff --git a/go.mod b/go.mod index 4b5889406db..8ba32d5c025 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/ipfs/go-ipfs-blockstore v0.1.6 github.com/ipfs/go-ipfs-chunker v0.0.5 github.com/ipfs/go-ipfs-cmds v0.6.0 - github.com/ipfs/go-ipfs-config v0.16.1-0.20211028222721-a25573d5289a + github.com/ipfs/go-ipfs-config v0.16.1-0.20211113111219-7bbc5ab0aa46 github.com/ipfs/go-ipfs-exchange-interface v0.0.1 github.com/ipfs/go-ipfs-exchange-offline v0.0.1 github.com/ipfs/go-ipfs-files v0.0.9 diff --git a/go.sum b/go.sum index 0cc89032adf..350af96d7d9 100644 --- a/go.sum +++ b/go.sum @@ -463,8 +463,8 @@ github.com/ipfs/go-ipfs-chunker v0.0.5 h1:ojCf7HV/m+uS2vhUGWcogIIxiO5ubl5O57Q7Na github.com/ipfs/go-ipfs-chunker v0.0.5/go.mod h1:jhgdF8vxRHycr00k13FM8Y0E+6BoalYeobXmUyTreP8= github.com/ipfs/go-ipfs-cmds v0.6.0 h1:yAxdowQZzoFKjcLI08sXVNnqVj3jnABbf9smrPQmBsw= github.com/ipfs/go-ipfs-cmds v0.6.0/go.mod h1:ZgYiWVnCk43ChwoH8hAmI1IRbuVtq3GSTHwtRB/Kqhk= -github.com/ipfs/go-ipfs-config v0.16.1-0.20211028222721-a25573d5289a h1:bIq9Zl92JOZw/wz6LVfucaIVKQ7fkp26FQdEGA6vY/Q= -github.com/ipfs/go-ipfs-config v0.16.1-0.20211028222721-a25573d5289a/go.mod h1:wz2lKzOjgJeYJa6zx8W9VT7mz+iSd0laBMqS/9wmX6A= +github.com/ipfs/go-ipfs-config v0.16.1-0.20211113111219-7bbc5ab0aa46 h1:zPASJGoi1ih8j5zY+Ib0BIXgkd+TkqPMiUdcwNEIWqg= +github.com/ipfs/go-ipfs-config v0.16.1-0.20211113111219-7bbc5ab0aa46/go.mod h1:wz2lKzOjgJeYJa6zx8W9VT7mz+iSd0laBMqS/9wmX6A= github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ= github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=