mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-21 18:37:45 +08:00
* update go-libp2p to v0.19.0 * chore: go-namesys v0.5.0 * refactor(config): cleanup relay handling * docs(config): document updated defaults * fix(tests): panic during sharness * fix: t0160-resolve.sh See https://github.com/ipfs/go-namesys/pull/32 * fix: t0182-circuit-relay.sh * test: transport encryption Old tests were no longer working because go-libp2p 0.19 removed the undocumented 'ls' pseudoprotocol. This replaces these tests with handshake attempt (name is echoed back on OK or 'na' is returned when protocol is not available) for tls and noise variants + adds explicit test that safeguards us against enabling plaintext by default by a mistake. * fix: ./t0182-circuit-relay.sh test is flaky, for now we just restart the testbed when we get NO_RESERVATION error * refactor: AutoRelayFeeder with exp. backoff It starts at feeding peers ever 15s, then backs off each time until it is done once an hour Should be acceptable until we have smarter mechanism in go-lib2p 0.20 * feat(AutoRelay): prioritize Peering.Peers This ensures we feed trusted Peering.Peers in addition to any peers discovered over DHT. * docs(CHANGELOG): document breaking changes Co-authored-by: Marcin Rataj <lidel@lidel.org> Co-authored-by: Gus Eggert <gus@gus.dev>
81 lines
2.9 KiB
Go
81 lines
2.9 KiB
Go
package libp2p
|
|
|
|
import (
|
|
"github.com/ipfs/go-ipfs/config"
|
|
"github.com/libp2p/go-libp2p"
|
|
"github.com/libp2p/go-libp2p-core/peer"
|
|
"github.com/libp2p/go-libp2p/p2p/host/autorelay"
|
|
"github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/relay"
|
|
)
|
|
|
|
func RelayTransport(enableRelay bool) func() (opts Libp2pOpts, err error) {
|
|
return func() (opts Libp2pOpts, err error) {
|
|
if enableRelay {
|
|
opts.Opts = append(opts.Opts, libp2p.EnableRelay())
|
|
} else {
|
|
opts.Opts = append(opts.Opts, libp2p.DisableRelay())
|
|
}
|
|
return
|
|
}
|
|
}
|
|
|
|
func RelayService(enable bool, relayOpts config.RelayService) func() (opts Libp2pOpts, err error) {
|
|
return func() (opts Libp2pOpts, err error) {
|
|
if enable {
|
|
def := relay.DefaultResources()
|
|
// Real defaults live in go-libp2p.
|
|
// Here we apply any overrides from user config.
|
|
opts.Opts = append(opts.Opts, libp2p.EnableRelayService(relay.WithResources(relay.Resources{
|
|
Limit: &relay.RelayLimit{
|
|
Data: relayOpts.ConnectionDataLimit.WithDefault(def.Limit.Data),
|
|
Duration: relayOpts.ConnectionDurationLimit.WithDefault(def.Limit.Duration),
|
|
},
|
|
MaxCircuits: int(relayOpts.MaxCircuits.WithDefault(int64(def.MaxCircuits))),
|
|
BufferSize: int(relayOpts.BufferSize.WithDefault(int64(def.BufferSize))),
|
|
ReservationTTL: relayOpts.ReservationTTL.WithDefault(def.ReservationTTL),
|
|
MaxReservations: int(relayOpts.MaxReservations.WithDefault(int64(def.MaxReservations))),
|
|
MaxReservationsPerIP: int(relayOpts.MaxReservations.WithDefault(int64(def.MaxReservationsPerIP))),
|
|
MaxReservationsPerPeer: int(relayOpts.MaxReservations.WithDefault(int64(def.MaxReservationsPerPeer))),
|
|
MaxReservationsPerASN: int(relayOpts.MaxReservations.WithDefault(int64(def.MaxReservationsPerASN))),
|
|
})))
|
|
}
|
|
return
|
|
}
|
|
}
|
|
|
|
func AutoRelay(staticRelays []string, peerChan <-chan peer.AddrInfo) func() (opts Libp2pOpts, err error) {
|
|
return func() (opts Libp2pOpts, err error) {
|
|
var autoRelayOpts []autorelay.Option
|
|
if len(staticRelays) > 0 {
|
|
static := make([]peer.AddrInfo, 0, len(staticRelays))
|
|
for _, s := range staticRelays {
|
|
var addr *peer.AddrInfo
|
|
addr, err = peer.AddrInfoFromString(s)
|
|
if err != nil {
|
|
return
|
|
}
|
|
static = append(static, *addr)
|
|
}
|
|
autoRelayOpts = append(autoRelayOpts, autorelay.WithStaticRelays(static))
|
|
autoRelayOpts = append(autoRelayOpts, autorelay.WithCircuitV1Support())
|
|
}
|
|
if peerChan != nil {
|
|
autoRelayOpts = append(autoRelayOpts, autorelay.WithPeerSource(peerChan))
|
|
}
|
|
opts.Opts = append(opts.Opts, libp2p.EnableAutoRelay(autoRelayOpts...))
|
|
return
|
|
}
|
|
}
|
|
|
|
func HolePunching(flag config.Flag, hasRelayClient bool) func() (opts Libp2pOpts, err error) {
|
|
return func() (opts Libp2pOpts, err error) {
|
|
if flag.WithDefault(false) {
|
|
if !hasRelayClient {
|
|
log.Fatal("To enable `Swarm.EnableHolePunching` requires `Swarm.RelayClient.Enabled` to be enabled.")
|
|
}
|
|
opts.Opts = append(opts.Opts, libp2p.EnableHolePunching())
|
|
}
|
|
return
|
|
}
|
|
}
|