@@ -34,6 +34,7 @@ and spec status.
34
34
- [ State Management] ( #state-management )
35
35
- [ Peer Metadata Storage] ( #peer-metadata-storage )
36
36
- [ Connection Limits] ( #connection-limits )
37
+ - [ Supported protocols] ( #supported-protocols )
37
38
- [ Connection Lifecycle Events] ( #connection-lifecycle-events )
38
39
- [ Hole punching] ( #hole-punching )
39
40
- [ Future Work] ( #future-work )
@@ -325,6 +326,17 @@ Resource allocation, measurement and enforcement policies are all an active area
325
326
of discussion in the libp2p community, and implementations are free to develop
326
327
whatever prioritization system makes sense.
327
328
329
+ #### Supported protocols
330
+
331
+ A libp2p node SHOULD scope its set of supported protocols to the underlying
332
+ physical connection to a peer. It MAY only support a protocol based on properties
333
+ of a physical connection to e.g. limit the use of bandwidth-heavy protocols over
334
+ a relayed or metered connection. A libp2p node MAY offer different sets of protocols
335
+ to different peers. It MAY revoke or add the support for a protocol at any time,
336
+ for example to only offer certain services after learning its NAT status on a connection.
337
+ Therefore, libp2p nodes SHOULD NOT assume that the set of protocols on a connection
338
+ is static.
339
+
328
340
### Connection Lifecycle Events
329
341
330
342
The establishment of new connections and streams is likely to be a
0 commit comments