5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-25 23:01:38 +00:00

Add -address and -subnet flag for getting address/subnet out of config

This commit is contained in:
Neil Alexander 2019-11-10 19:38:35 +00:00
parent 1373800d26
commit e3a5e4f3b7
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944

View File

@ -2,11 +2,13 @@ package main
import ( import (
"bytes" "bytes"
"crypto/sha512"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"flag" "flag"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net"
"os" "os"
"os/signal" "os/signal"
"strings" "strings"
@ -20,6 +22,7 @@ import (
"github.com/kardianos/minwinsvc" "github.com/kardianos/minwinsvc"
"github.com/mitchellh/mapstructure" "github.com/mitchellh/mapstructure"
"github.com/yggdrasil-network/yggdrasil-go/src/address"
"github.com/yggdrasil-network/yggdrasil-go/src/admin" "github.com/yggdrasil-network/yggdrasil-go/src/admin"
"github.com/yggdrasil-network/yggdrasil-go/src/config" "github.com/yggdrasil-network/yggdrasil-go/src/config"
"github.com/yggdrasil-network/yggdrasil-go/src/crypto" "github.com/yggdrasil-network/yggdrasil-go/src/crypto"
@ -142,6 +145,8 @@ func main() {
ver := flag.Bool("version", false, "prints the version of this build") ver := flag.Bool("version", false, "prints the version of this build")
logging := flag.String("logging", "info,warn,error", "comma-separated list of logging levels to enable") logging := flag.String("logging", "info,warn,error", "comma-separated list of logging levels to enable")
logto := flag.String("logto", "stdout", "file path to log to, \"syslog\" or \"stdout\"") logto := flag.String("logto", "stdout", "file path to log to, \"syslog\" or \"stdout\"")
getaddr := flag.Bool("address", false, "returns the IPv6 address as derived from the supplied configuration")
getsnet := flag.Bool("subnet", false, "returns the IPv6 subnet as derived from the supplied configuration")
flag.Parse() flag.Parse()
var cfg *config.NodeConfig var cfg *config.NodeConfig
@ -188,6 +193,26 @@ func main() {
if cfg == nil { if cfg == nil {
return return
} }
// Have we been asked for the node address yet? If so, print it and then stop.
switch {
case *getaddr:
if pubkey, err := hex.DecodeString(cfg.EncryptionPublicKey); err == nil {
nodeid := sha512.Sum512(pubkey)
fromnodeid := address.AddrForNodeID((*crypto.NodeID)(&nodeid))
fmt.Println(net.IP(fromnodeid[:]).String())
}
return
case *getsnet:
if pubkey, err := hex.DecodeString(cfg.EncryptionPublicKey); err == nil {
nodeid := sha512.Sum512(pubkey)
fromnodeid := address.SubnetForNodeID((*crypto.NodeID)(&nodeid))
subnet := append(fromnodeid[:], 0, 0, 0, 0, 0, 0, 0, 0)
ipnet := net.IPNet{IP: subnet, Mask: net.CIDRMask(64, 128)}
fmt.Println(ipnet.String())
}
return
default:
}
// Create a new logger that logs output to stdout. // Create a new logger that logs output to stdout.
var logger *log.Logger var logger *log.Logger
switch *logto { switch *logto {