@@ -134,6 +134,11 @@ type Config struct {
134
134
DisableIdentifyAddressDiscovery bool
135
135
136
136
DisableAutoNATv2 bool
137
+
138
+ UDPBlackHoleFilter * swarm.BlackHoleFilter
139
+ CustomUDPBlackHoleFilter bool
140
+ IPv6BlackHoleFilter * swarm.BlackHoleFilter
141
+ CustomIPv6BlackHoleFilter bool
137
142
}
138
143
139
144
func (cfg * Config ) makeSwarm (eventBus event.Bus , enableMetrics bool ) (* swarm.Swarm , error ) {
@@ -168,7 +173,10 @@ func (cfg *Config) makeSwarm(eventBus event.Bus, enableMetrics bool) (*swarm.Swa
168
173
return nil , err
169
174
}
170
175
171
- opts := cfg .SwarmOpts
176
+ opts := append (cfg .SwarmOpts ,
177
+ swarm .WithUDPBlackHoleFilter (cfg .UDPBlackHoleFilter ),
178
+ swarm .WithIPv6BlackHoleFilter (cfg .IPv6BlackHoleFilter ),
179
+ )
172
180
if cfg .Reporter != nil {
173
181
opts = append (opts , swarm .WithMetrics (cfg .Reporter ))
174
182
}
@@ -196,7 +204,7 @@ func (cfg *Config) makeSwarm(eventBus event.Bus, enableMetrics bool) (*swarm.Swa
196
204
return swarm .NewSwarm (pid , cfg .Peerstore , eventBus , opts ... )
197
205
}
198
206
199
- func (cfg * Config ) makeAutoNATHost () (host.Host , error ) {
207
+ func (cfg * Config ) makeAutoNATV2Host () (host.Host , error ) {
200
208
autonatPrivKey , _ , err := crypto .GenerateEd25519Key (rand .Reader )
201
209
if err != nil {
202
210
return nil , err
@@ -207,21 +215,21 @@ func (cfg *Config) makeAutoNATHost() (host.Host, error) {
207
215
}
208
216
209
217
autoNatCfg := Config {
210
- Transports : cfg .Transports ,
211
- Muxers : cfg .Muxers ,
212
- SecurityTransports : cfg .SecurityTransports ,
213
- Insecure : cfg .Insecure ,
214
- PSK : cfg .PSK ,
215
- ConnectionGater : cfg .ConnectionGater ,
216
- Reporter : cfg .Reporter ,
217
- PeerKey : autonatPrivKey ,
218
- Peerstore : ps ,
219
- DialRanker : swarm .NoDelayDialRanker ,
218
+ Transports : cfg .Transports ,
219
+ Muxers : cfg .Muxers ,
220
+ SecurityTransports : cfg .SecurityTransports ,
221
+ Insecure : cfg .Insecure ,
222
+ PSK : cfg .PSK ,
223
+ ConnectionGater : cfg .ConnectionGater ,
224
+ Reporter : cfg .Reporter ,
225
+ PeerKey : autonatPrivKey ,
226
+ Peerstore : ps ,
227
+ DialRanker : swarm .NoDelayDialRanker ,
228
+ UDPBlackHoleFilter : cfg .UDPBlackHoleFilter ,
229
+ IPv6BlackHoleFilter : cfg .IPv6BlackHoleFilter ,
220
230
SwarmOpts : []swarm.Option {
221
- // Disable black hole detection on autonat dialers
222
- // It is better to attempt a dial and fail for AutoNAT use cases
223
- swarm .WithUDPBlackHoleConfig (false , 0 , 0 ),
224
- swarm .WithIPv6BlackHoleConfig (false , 0 , 0 ),
231
+ // Don't update black hole state for failed autonat dials
232
+ swarm .WithReadOnlyBlackHoleDetector (),
225
233
},
226
234
}
227
235
fxopts , err := autoNatCfg .addTransports ()
@@ -366,7 +374,7 @@ func (cfg *Config) addTransports() ([]fx.Option, error) {
366
374
func (cfg * Config ) newBasicHost (swrm * swarm.Swarm , eventBus event.Bus ) (* bhost.BasicHost , error ) {
367
375
var autonatv2Dialer host.Host
368
376
if ! cfg .DisableAutoNATv2 {
369
- ah , err := cfg .makeAutoNATHost ()
377
+ ah , err := cfg .makeAutoNATV2Host ()
370
378
if err != nil {
371
379
return nil , err
372
380
}
@@ -564,9 +572,8 @@ func (cfg *Config) addAutoNAT(h *bhost.BasicHost) error {
564
572
Peerstore : ps ,
565
573
DialRanker : swarm .NoDelayDialRanker ,
566
574
SwarmOpts : []swarm.Option {
567
- // It is better to disable black hole detection and just attempt a dial for autonat
568
- swarm .WithUDPBlackHoleConfig (false , 0 , 0 ),
569
- swarm .WithIPv6BlackHoleConfig (false , 0 , 0 ),
575
+ swarm .WithUDPBlackHoleFilter (nil ),
576
+ swarm .WithIPv6BlackHoleFilter (nil ),
570
577
},
571
578
}
572
579
0 commit comments