forked from ipfs/kubo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
go-ipfs-config: Merge pull request ipfs#75 from ipfs/feat/autonat
feat: add an autonat config section
- Loading branch information
Showing
3 changed files
with
80 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
package config | ||
|
||
import ( | ||
"fmt" | ||
) | ||
|
||
// AutoNATServiceMode configures the ipfs node's AutoNAT service. | ||
type AutoNATServiceMode int | ||
|
||
const ( | ||
// AutoNATServiceUnset indicates that the user has not set the | ||
// AutoNATService mode. | ||
// | ||
// When unset, nodes configured to be public DHT nodes will _also_ | ||
// perform limited AutoNAT dialbacks. | ||
AutoNATServiceUnset AutoNATServiceMode = iota | ||
// AutoNATServiceEnabled indicates that the user has enabled the | ||
// AutoNATService. | ||
AutoNATServiceEnabled | ||
// AutoNATServiceDisabled indicates that the user has disabled the | ||
// AutoNATService. | ||
AutoNATServiceDisabled | ||
) | ||
|
||
func (m *AutoNATServiceMode) UnmarshalText(text []byte) error { | ||
switch string(text) { | ||
case "": | ||
*m = AutoNATServiceUnset | ||
case "enabled": | ||
*m = AutoNATServiceEnabled | ||
case "disabled": | ||
*m = AutoNATServiceDisabled | ||
default: | ||
return fmt.Errorf("unknown autonat mode: %s", string(text)) | ||
} | ||
return nil | ||
} | ||
|
||
func (m AutoNATServiceMode) MarshalText() ([]byte, error) { | ||
switch m { | ||
case AutoNATServiceUnset: | ||
return nil, nil | ||
case AutoNATServiceEnabled: | ||
return []byte("enabled"), nil | ||
case AutoNATServiceDisabled: | ||
return []byte("disabled"), nil | ||
default: | ||
return nil, fmt.Errorf("unknown autonat mode: %d", m) | ||
} | ||
} | ||
|
||
// AutoNATConfig configures the node's AutoNAT subsystem. | ||
type AutoNATConfig struct { | ||
// ServiceMode configures the node's AutoNAT service mode. | ||
ServiceMode AutoNATServiceMode `json:",omitempty"` | ||
|
||
// Throttle configures AutoNAT dialback throttling. | ||
// | ||
// If unset, the conservative libp2p defaults will be unset. To help the | ||
// network, please consider setting this and increasing the limits. | ||
// | ||
// By default, the limits will be a total of 30 dialbacks, with a | ||
// per-peer max of 3 peer, resetting every minute. | ||
Throttle *AutoNATThrottleConfig `json:",omitempty"` | ||
} | ||
|
||
// AutoNATThrottleConfig configures the throttle limites | ||
type AutoNATThrottleConfig struct { | ||
// GlobalLimit and PeerLimit sets the global and per-peer dialback | ||
// limits. The AutoNAT service will only perform the specified number of | ||
// dialbacks per interval. | ||
// | ||
// Setting either to 0 will disable the appropriate limit. | ||
GlobalLimit, PeerLimit int | ||
|
||
// Interval specifies how frequently this node should reset the | ||
// global/peer dialback limits. | ||
Interval string | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters