diff --git a/cmd/yggdrasil/main.go b/cmd/yggdrasil/main.go index 114e37f3..79c243ba 100644 --- a/cmd/yggdrasil/main.go +++ b/cmd/yggdrasil/main.go @@ -25,6 +25,7 @@ import ( "github.com/yggdrasil-network/yggdrasil-go/src/address" "github.com/yggdrasil-network/yggdrasil-go/src/admin" "github.com/yggdrasil-network/yggdrasil-go/src/config" + "github.com/yggdrasil-network/yggdrasil-go/src/defaults" "github.com/yggdrasil-network/yggdrasil-go/src/core" "github.com/yggdrasil-network/yggdrasil-go/src/multicast" @@ -73,7 +74,7 @@ func readConfig(log *log.Logger, useconf *bool, useconffile *string, normaliseco // then parse the configuration we loaded above on top of it. The effect // of this is that any configuration item that is missing from the provided // configuration will use a sane default. - cfg := config.GenerateConfig() + cfg := defaults.GenerateConfig() var dat map[string]interface{} if err := hjson.Unmarshal(conf, &dat); err != nil { panic(err) @@ -114,7 +115,7 @@ func readConfig(log *log.Logger, useconf *bool, useconffile *string, normaliseco // Generates a new configuration and returns it in HJSON format. This is used // with -genconf. func doGenconf(isjson bool) string { - cfg := config.GenerateConfig() + cfg := defaults.GenerateConfig() var bs []byte var err error if isjson { @@ -205,7 +206,7 @@ func main() { case *autoconf: // Use an autoconf-generated config, this will give us random keys and // port numbers, and will use an automatically selected TUN/TAP interface. - cfg = config.GenerateConfig() + cfg = defaults.GenerateConfig() case *useconffile != "" || *useconf: // Read the configuration from either stdin or from the filesystem cfg = readConfig(logger, useconf, useconffile, normaliseconf) diff --git a/src/config/config.go b/src/config/config.go index 934c4091..767dc188 100644 --- a/src/config/config.go +++ b/src/config/config.go @@ -20,8 +20,6 @@ import ( "crypto/ed25519" "encoding/hex" "sync" - - "github.com/yggdrasil-network/yggdrasil-go/src/defaults" ) // NodeConfig is the main configuration structure, containing configuration @@ -44,32 +42,6 @@ type NodeConfig struct { NodeInfo map[string]interface{} `comment:"Optional node info. This must be a { \"key\": \"value\", ... } map\nor set as null. This is entirely optional but, if set, is visible\nto the whole network on request."` } -// Generates default configuration and returns a pointer to the resulting -// NodeConfig. This is used when outputting the -genconf parameter and also when -// using -autoconf. -func GenerateConfig() *NodeConfig { - // Generate encryption keys. - spub, spriv, err := ed25519.GenerateKey(nil) - if err != nil { - panic(err) - } - // Create a node configuration and populate it. - cfg := NodeConfig{} - cfg.Listen = []string{} - cfg.AdminListen = defaults.GetDefaults().DefaultAdminListen - cfg.PublicKey = hex.EncodeToString(spub[:]) - cfg.PrivateKey = hex.EncodeToString(spriv[:]) - cfg.Peers = []string{} - cfg.InterfacePeers = map[string][]string{} - cfg.AllowedPublicKeys = []string{} - cfg.MulticastInterfaces = defaults.GetDefaults().DefaultMulticastInterfaces - cfg.IfName = defaults.GetDefaults().DefaultIfName - cfg.IfMTU = defaults.GetDefaults().DefaultIfMTU - cfg.NodeInfoPrivacy = false - - return &cfg -} - // NewSigningKeys replaces the signing keypair in the NodeConfig with a new // signing keypair. The signing keys are used by the switch to derive the // structure of the spanning tree. diff --git a/src/defaults/defaults.go b/src/defaults/defaults.go index a885c5dd..238a36d7 100644 --- a/src/defaults/defaults.go +++ b/src/defaults/defaults.go @@ -1,5 +1,7 @@ package defaults +import "github.com/yggdrasil-network/yggdrasil-go/src/config" + // Defines which parameters are expected by default for configuration on a // specific platform. These values are populated in the relevant defaults_*.go // for the platform being targeted. They must be set. @@ -18,3 +20,23 @@ type platformDefaultParameters struct { DefaultIfMTU uint64 DefaultIfName string } + +// Generates default configuration and returns a pointer to the resulting +// NodeConfig. This is used when outputting the -genconf parameter and also when +// using -autoconf. +func GenerateConfig() *config.NodeConfig { + // Create a node configuration and populate it. + cfg := new(config.NodeConfig) + cfg.NewKeys() + cfg.Listen = []string{} + cfg.AdminListen = GetDefaults().DefaultAdminListen + cfg.Peers = []string{} + cfg.InterfacePeers = map[string][]string{} + cfg.AllowedPublicKeys = []string{} + cfg.MulticastInterfaces = GetDefaults().DefaultMulticastInterfaces + cfg.IfName = GetDefaults().DefaultIfName + cfg.IfMTU = GetDefaults().DefaultIfMTU + cfg.NodeInfoPrivacy = false + + return cfg +}