diff --git a/p2p/host/relay/doc.go b/p2p/host/relay/doc.go new file mode 100644 index 0000000000000000000000000000000000000000..8e642b2ad6c17e2f3b0c5f19b4fa93730f05b8ff --- /dev/null +++ b/p2p/host/relay/doc.go @@ -0,0 +1,28 @@ +/* +The relay package contains host implementations that automatically +advertise relay addresses when the presence of NAT is detected. This +feature is dubbed `autorelay`. + +System Components: +- AutoNATService instances -- see https://github.com/libp2p/go-libp2p-autonat-svc +- One or more relays, instances of `RelayHost` +- The autorelayed hosts, instances of `AutoRelayHost`. + +How it works: +- `AutoNATService` instances are instantiated in the + bootstrappers (or other well known publicly reachable hosts) + +- `RelayHost`s are constructed with + `libp2p.New(libp2p.EnableRelay(circuit.OptHop), libp2p.Routing(makeDHT))`. + They provide Relay Hop services, and advertise through the DHT + in the `/libp2p/relay` namespace + +- `AutoRelayHost`s are constructed with `libp2p.New(libp2p.Routing(makeDHT))` + They passively discover autonat service instances and test dialability of + their listen address set through them. When the presence of NAT is detected, + they discover relays through the DHT, connect to some of them and begin + advertising relay addresses. The new set of addresses is propagated to + connected peers through the `identify/push` protocol. + +*/ +package relay