mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2024-11-30 13:35:19 +00:00
Centralise platform defaults into the 'defaults' package
This commit is contained in:
parent
adc21baa28
commit
1692bd98fd
@ -13,6 +13,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"yggdrasil/defaults"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: Add authentication
|
// TODO: Add authentication
|
||||||
@ -155,15 +157,15 @@ func (a *admin) init(c *Core, listenaddr string) {
|
|||||||
})
|
})
|
||||||
a.addHandler("setTunTap", []string{"name", "[tap_mode]", "[mtu]"}, func(in admin_info) (admin_info, error) {
|
a.addHandler("setTunTap", []string{"name", "[tap_mode]", "[mtu]"}, func(in admin_info) (admin_info, error) {
|
||||||
// Set sane defaults
|
// Set sane defaults
|
||||||
iftapmode := getDefaults().defaultIfTAPMode
|
iftapmode := defaults.GetDefaults().DefaultIfTAPMode
|
||||||
ifmtu := getDefaults().defaultIfMTU
|
ifmtu := defaults.GetDefaults().DefaultIfMTU
|
||||||
// Has TAP mode been specified?
|
// Has TAP mode been specified?
|
||||||
if tap, ok := in["tap_mode"]; ok {
|
if tap, ok := in["tap_mode"]; ok {
|
||||||
iftapmode = tap.(bool)
|
iftapmode = tap.(bool)
|
||||||
}
|
}
|
||||||
// Check we have enough params for MTU
|
// Check we have enough params for MTU
|
||||||
if mtu, ok := in["mtu"]; ok {
|
if mtu, ok := in["mtu"]; ok {
|
||||||
if mtu.(float64) >= 1280 && ifmtu <= getDefaults().maximumIfMTU {
|
if mtu.(float64) >= 1280 && ifmtu <= defaults.GetDefaults().MaximumIfMTU {
|
||||||
ifmtu = int(in["mtu"].(float64))
|
ifmtu = int(in["mtu"].(float64))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
|
|
||||||
"yggdrasil/config"
|
"yggdrasil/config"
|
||||||
|
"yggdrasil/defaults"
|
||||||
)
|
)
|
||||||
|
|
||||||
// The Core object represents the Yggdrasil node. You should create a Core
|
// The Core object represents the Yggdrasil node. You should create a Core
|
||||||
@ -197,26 +198,31 @@ func (c *Core) AddAllowedEncryptionPublicKey(boxStr string) error {
|
|||||||
return c.admin.addAllowedEncryptionPublicKey(boxStr)
|
return c.admin.addAllowedEncryptionPublicKey(boxStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Gets the default admin listen address for your platform.
|
||||||
|
func (c *Core) GetAdminDefaultListen() string {
|
||||||
|
return defaults.GetDefaults().DefaultAdminListen
|
||||||
|
}
|
||||||
|
|
||||||
// Gets the default TUN/TAP interface name for your platform.
|
// Gets the default TUN/TAP interface name for your platform.
|
||||||
func (c *Core) GetTUNDefaultIfName() string {
|
func (c *Core) GetTUNDefaultIfName() string {
|
||||||
return getDefaults().defaultIfName
|
return defaults.GetDefaults().DefaultIfName
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gets the default TUN/TAP interface MTU for your platform. This can be as high
|
// Gets the default TUN/TAP interface MTU for your platform. This can be as high
|
||||||
// as 65535, depending on platform, but is never lower than 1280.
|
// as 65535, depending on platform, but is never lower than 1280.
|
||||||
func (c *Core) GetTUNDefaultIfMTU() int {
|
func (c *Core) GetTUNDefaultIfMTU() int {
|
||||||
return getDefaults().defaultIfMTU
|
return defaults.GetDefaults().DefaultIfMTU
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gets the maximum supported TUN/TAP interface MTU for your platform. This
|
// Gets the maximum supported TUN/TAP interface MTU for your platform. This
|
||||||
// can be as high as 65535, depending on platform, but is never lower than 1280.
|
// can be as high as 65535, depending on platform, but is never lower than 1280.
|
||||||
func (c *Core) GetTUNMaximumIfMTU() int {
|
func (c *Core) GetTUNMaximumIfMTU() int {
|
||||||
return getDefaults().maximumIfMTU
|
return defaults.GetDefaults().MaximumIfMTU
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gets the default TUN/TAP interface mode for your platform.
|
// Gets the default TUN/TAP interface mode for your platform.
|
||||||
func (c *Core) GetTUNDefaultIfTAPMode() bool {
|
func (c *Core) GetTUNDefaultIfTAPMode() bool {
|
||||||
return getDefaults().defaultIfTAPMode
|
return defaults.GetDefaults().DefaultIfTAPMode
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gets the current TUN/TAP interface name.
|
// Gets the current TUN/TAP interface name.
|
||||||
|
15
src/yggdrasil/defaults/defaults.go
Normal file
15
src/yggdrasil/defaults/defaults.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package defaults
|
||||||
|
|
||||||
|
// 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.
|
||||||
|
type platformDefaultParameters struct {
|
||||||
|
// Admin socket
|
||||||
|
DefaultAdminListen string
|
||||||
|
|
||||||
|
// TUN/TAP
|
||||||
|
MaximumIfMTU int
|
||||||
|
DefaultIfMTU int
|
||||||
|
DefaultIfName string
|
||||||
|
DefaultIfTAPMode bool
|
||||||
|
}
|
18
src/yggdrasil/defaults/defaults_darwin.go
Normal file
18
src/yggdrasil/defaults/defaults_darwin.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// +build darwin
|
||||||
|
|
||||||
|
package defaults
|
||||||
|
|
||||||
|
// Sane defaults for the macOS/Darwin platform. The "default" options may be
|
||||||
|
// may be replaced by the running configuration.
|
||||||
|
func GetDefaults() platformDefaultParameters {
|
||||||
|
return platformDefaultParameters{
|
||||||
|
// Admin
|
||||||
|
DefaultAdminListen: "unix:///var/run/yggdrasil.sock",
|
||||||
|
|
||||||
|
// TUN/TAP
|
||||||
|
MaximumIfMTU: 65535,
|
||||||
|
DefaultIfMTU: 65535,
|
||||||
|
DefaultIfName: "auto",
|
||||||
|
DefaultIfTAPMode: false,
|
||||||
|
}
|
||||||
|
}
|
18
src/yggdrasil/defaults/defaults_freebsd.go
Normal file
18
src/yggdrasil/defaults/defaults_freebsd.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// +build freebsd
|
||||||
|
|
||||||
|
package defaults
|
||||||
|
|
||||||
|
// Sane defaults for the BSD platforms. The "default" options may be
|
||||||
|
// may be replaced by the running configuration.
|
||||||
|
func GetDefaults() platformDefaultParameters {
|
||||||
|
return platformDefaultParameters{
|
||||||
|
// Admin
|
||||||
|
DefaultAdminListen: "unix:///var/run/yggdrasil.sock",
|
||||||
|
|
||||||
|
// TUN/TAP
|
||||||
|
MaximumIfMTU: 32767,
|
||||||
|
DefaultIfMTU: 32767,
|
||||||
|
DefaultIfName: "/dev/tap0",
|
||||||
|
DefaultIfTAPMode: true,
|
||||||
|
}
|
||||||
|
}
|
18
src/yggdrasil/defaults/defaults_linux.go
Normal file
18
src/yggdrasil/defaults/defaults_linux.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// +build linux
|
||||||
|
|
||||||
|
package defaults
|
||||||
|
|
||||||
|
// Sane defaults for the Linux platform. The "default" options may be
|
||||||
|
// may be replaced by the running configuration.
|
||||||
|
func GetDefaults() platformDefaultParameters {
|
||||||
|
return platformDefaultParameters{
|
||||||
|
// Admin
|
||||||
|
DefaultAdminListen: "unix:///var/run/yggdrasil.sock",
|
||||||
|
|
||||||
|
// TUN/TAP
|
||||||
|
MaximumIfMTU: 65535,
|
||||||
|
DefaultIfMTU: 65535,
|
||||||
|
DefaultIfName: "auto",
|
||||||
|
DefaultIfTAPMode: false,
|
||||||
|
}
|
||||||
|
}
|
18
src/yggdrasil/defaults/defaults_netbsd.go
Normal file
18
src/yggdrasil/defaults/defaults_netbsd.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// +build freebsd
|
||||||
|
|
||||||
|
package defaults
|
||||||
|
|
||||||
|
// Sane defaults for the BSD platforms. The "default" options may be
|
||||||
|
// may be replaced by the running configuration.
|
||||||
|
func GetDefaults() platformDefaultParameters {
|
||||||
|
return platformDefaultParameters{
|
||||||
|
// Admin
|
||||||
|
DefaultAdminListen: "unix:///var/run/yggdrasil.sock",
|
||||||
|
|
||||||
|
// TUN/TAP
|
||||||
|
MaximumIfMTU: 9000,
|
||||||
|
DefaultIfMTU: 9000,
|
||||||
|
DefaultIfName: "/dev/tap0",
|
||||||
|
DefaultIfTAPMode: true,
|
||||||
|
}
|
||||||
|
}
|
18
src/yggdrasil/defaults/defaults_openbsd.go
Normal file
18
src/yggdrasil/defaults/defaults_openbsd.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// +build freebsd
|
||||||
|
|
||||||
|
package defaults
|
||||||
|
|
||||||
|
// Sane defaults for the BSD platforms. The "default" options may be
|
||||||
|
// may be replaced by the running configuration.
|
||||||
|
func GetDefaults() platformDefaultParameters {
|
||||||
|
return platformDefaultParameters{
|
||||||
|
// Admin
|
||||||
|
DefaultAdminListen: "unix:///var/run/yggdrasil.sock",
|
||||||
|
|
||||||
|
// TUN/TAP
|
||||||
|
MaximumIfMTU: 16384,
|
||||||
|
DefaultIfMTU: 16384,
|
||||||
|
DefaultIfName: "/dev/tap0",
|
||||||
|
DefaultIfTAPMode: true,
|
||||||
|
}
|
||||||
|
}
|
18
src/yggdrasil/defaults/defaults_other.go
Normal file
18
src/yggdrasil/defaults/defaults_other.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// +build !linux,!darwin,!windows,!openbsd,!freebsd,!netbsd
|
||||||
|
|
||||||
|
package defaults
|
||||||
|
|
||||||
|
// Sane defaults for the other platforms. The "default" options may be
|
||||||
|
// may be replaced by the running configuration.
|
||||||
|
func GetDefaults() platformDefaultParameters {
|
||||||
|
return platformDefaultParameters{
|
||||||
|
// Admin
|
||||||
|
DefaultAdminListen: "tcp://localhost:9001",
|
||||||
|
|
||||||
|
// TUN/TAP
|
||||||
|
MaximumIfMTU: 65535,
|
||||||
|
DefaultIfMTU: 65535,
|
||||||
|
DefaultIfName: "none",
|
||||||
|
DefaultIfTAPMode: false,
|
||||||
|
}
|
||||||
|
}
|
18
src/yggdrasil/defaults/defaults_windows.go
Normal file
18
src/yggdrasil/defaults/defaults_windows.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// +build windows
|
||||||
|
|
||||||
|
package defaults
|
||||||
|
|
||||||
|
// Sane defaults for the Windows platform. The "default" options may be
|
||||||
|
// may be replaced by the running configuration.
|
||||||
|
func GetDefaults() platformDefaultParameters {
|
||||||
|
return platformDefaultParameters{
|
||||||
|
// Admin
|
||||||
|
DefaultAdminListen: "tcp://localhost:9001",
|
||||||
|
|
||||||
|
// TUN/TAP
|
||||||
|
MaximumIfMTU: 65535,
|
||||||
|
DefaultIfMTU: 65535,
|
||||||
|
DefaultIfName: "auto",
|
||||||
|
DefaultIfTAPMode: true,
|
||||||
|
}
|
||||||
|
}
|
@ -3,6 +3,8 @@ package yggdrasil
|
|||||||
// This manages the tun driver to send/recv packets to/from applications
|
// This manages the tun driver to send/recv packets to/from applications
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"yggdrasil/defaults"
|
||||||
|
|
||||||
"github.com/songgao/packets/ethernet"
|
"github.com/songgao/packets/ethernet"
|
||||||
"github.com/yggdrasil-network/water"
|
"github.com/yggdrasil-network/water"
|
||||||
)
|
)
|
||||||
@ -20,21 +22,11 @@ type tunDevice struct {
|
|||||||
iface *water.Interface
|
iface *water.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
// Defines which parameters are expected by default for a TUN/TAP adapter on a
|
|
||||||
// specific platform. These values are populated in the relevant tun_*.go for
|
|
||||||
// the platform being targeted. They must be set.
|
|
||||||
type tunDefaultParameters struct {
|
|
||||||
maximumIfMTU int
|
|
||||||
defaultIfMTU int
|
|
||||||
defaultIfName string
|
|
||||||
defaultIfTAPMode bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets the maximum supported MTU for the platform based on the defaults in
|
// Gets the maximum supported MTU for the platform based on the defaults in
|
||||||
// getDefaults().
|
// defaults.GetDefaults().
|
||||||
func getSupportedMTU(mtu int) int {
|
func getSupportedMTU(mtu int) int {
|
||||||
if mtu > getDefaults().maximumIfMTU {
|
if mtu > defaults.GetDefaults().MaximumIfMTU {
|
||||||
return getDefaults().maximumIfMTU
|
return defaults.GetDefaults().MaximumIfMTU
|
||||||
}
|
}
|
||||||
return mtu
|
return mtu
|
||||||
}
|
}
|
||||||
|
@ -13,17 +13,6 @@ import (
|
|||||||
water "github.com/yggdrasil-network/water"
|
water "github.com/yggdrasil-network/water"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Sane defaults for the Darwin/macOS platform. The "default" options may be
|
|
||||||
// may be replaced by the running configuration.
|
|
||||||
func getDefaults() tunDefaultParameters {
|
|
||||||
return tunDefaultParameters{
|
|
||||||
maximumIfMTU: 65535,
|
|
||||||
defaultIfMTU: 65535,
|
|
||||||
defaultIfName: "auto",
|
|
||||||
defaultIfTAPMode: false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configures the "utun" adapter with the correct IPv6 address and MTU.
|
// Configures the "utun" adapter with the correct IPv6 address and MTU.
|
||||||
func (tun *tunDevice) setup(ifname string, iftapmode bool, addr string, mtu int) error {
|
func (tun *tunDevice) setup(ifname string, iftapmode bool, addr string, mtu int) error {
|
||||||
if iftapmode {
|
if iftapmode {
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
package yggdrasil
|
|
||||||
|
|
||||||
// Sane defaults for the FreeBSD platform. The "default" options may be
|
|
||||||
// may be replaced by the running configuration.
|
|
||||||
func getDefaults() tunDefaultParameters {
|
|
||||||
return tunDefaultParameters{
|
|
||||||
maximumIfMTU: 32767,
|
|
||||||
defaultIfMTU: 32767,
|
|
||||||
defaultIfName: "/dev/tap0",
|
|
||||||
defaultIfTAPMode: true,
|
|
||||||
}
|
|
||||||
}
|
|
@ -12,17 +12,6 @@ import (
|
|||||||
water "github.com/yggdrasil-network/water"
|
water "github.com/yggdrasil-network/water"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Sane defaults for the Linux platform. The "default" options may be
|
|
||||||
// may be replaced by the running configuration.
|
|
||||||
func getDefaults() tunDefaultParameters {
|
|
||||||
return tunDefaultParameters{
|
|
||||||
maximumIfMTU: 65535,
|
|
||||||
defaultIfMTU: 65535,
|
|
||||||
defaultIfName: "auto",
|
|
||||||
defaultIfTAPMode: false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configures the TAP adapter with the correct IPv6 address and MTU.
|
// Configures the TAP adapter with the correct IPv6 address and MTU.
|
||||||
func (tun *tunDevice) setup(ifname string, iftapmode bool, addr string, mtu int) error {
|
func (tun *tunDevice) setup(ifname string, iftapmode bool, addr string, mtu int) error {
|
||||||
var config water.Config
|
var config water.Config
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
package yggdrasil
|
|
||||||
|
|
||||||
// Sane defaults for the NetBSD platform. The "default" options may be
|
|
||||||
// may be replaced by the running configuration.
|
|
||||||
func getDefaults() tunDefaultParameters {
|
|
||||||
return tunDefaultParameters{
|
|
||||||
maximumIfMTU: 9000,
|
|
||||||
defaultIfMTU: 9000,
|
|
||||||
defaultIfName: "/dev/tap0",
|
|
||||||
defaultIfTAPMode: true,
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
package yggdrasil
|
|
||||||
|
|
||||||
// Sane defaults for the OpenBSD platform. The "default" options may be
|
|
||||||
// may be replaced by the running configuration.
|
|
||||||
func getDefaults() tunDefaultParameters {
|
|
||||||
return tunDefaultParameters{
|
|
||||||
maximumIfMTU: 16384,
|
|
||||||
defaultIfMTU: 16384,
|
|
||||||
defaultIfName: "/dev/tap0",
|
|
||||||
defaultIfTAPMode: true,
|
|
||||||
}
|
|
||||||
}
|
|
@ -7,17 +7,6 @@ import water "github.com/yggdrasil-network/water"
|
|||||||
// This is to catch unsupported platforms
|
// This is to catch unsupported platforms
|
||||||
// If your platform supports tun devices, you could try configuring it manually
|
// If your platform supports tun devices, you could try configuring it manually
|
||||||
|
|
||||||
// These are sane defaults for any platform that has not been matched by one of
|
|
||||||
// the other tun_*.go files.
|
|
||||||
func getDefaults() tunDefaultParameters {
|
|
||||||
return tunDefaultParameters{
|
|
||||||
maximumIfMTU: 65535,
|
|
||||||
defaultIfMTU: 65535,
|
|
||||||
defaultIfName: "none",
|
|
||||||
defaultIfTAPMode: false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Creates the TUN/TAP adapter, if supported by the Water library. Note that
|
// Creates the TUN/TAP adapter, if supported by the Water library. Note that
|
||||||
// no guarantees are made at this point on an unsupported platform.
|
// no guarantees are made at this point on an unsupported platform.
|
||||||
func (tun *tunDevice) setup(ifname string, iftapmode bool, addr string, mtu int) error {
|
func (tun *tunDevice) setup(ifname string, iftapmode bool, addr string, mtu int) error {
|
||||||
|
@ -10,17 +10,6 @@ import (
|
|||||||
|
|
||||||
// This is to catch Windows platforms
|
// This is to catch Windows platforms
|
||||||
|
|
||||||
// Sane defaults for the Windows platform. The "default" options may be
|
|
||||||
// may be replaced by the running configuration.
|
|
||||||
func getDefaults() tunDefaultParameters {
|
|
||||||
return tunDefaultParameters{
|
|
||||||
maximumIfMTU: 65535,
|
|
||||||
defaultIfMTU: 65535,
|
|
||||||
defaultIfName: "auto",
|
|
||||||
defaultIfTAPMode: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configures the TAP adapter with the correct IPv6 address and MTU. On Windows
|
// Configures the TAP adapter with the correct IPv6 address and MTU. On Windows
|
||||||
// we don't make use of a direct operating system API to do this - we instead
|
// we don't make use of a direct operating system API to do this - we instead
|
||||||
// delegate the hard work to "netsh".
|
// delegate the hard work to "netsh".
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
|
|
||||||
"yggdrasil"
|
"yggdrasil"
|
||||||
"yggdrasil/config"
|
"yggdrasil/config"
|
||||||
|
"yggdrasil/defaults"
|
||||||
)
|
)
|
||||||
|
|
||||||
type nodeConfig = config.NodeConfig
|
type nodeConfig = config.NodeConfig
|
||||||
@ -53,7 +54,7 @@ func generateConfig(isAutoconf bool) *nodeConfig {
|
|||||||
r1 := rand.New(rand.NewSource(time.Now().UnixNano()))
|
r1 := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
cfg.Listen = fmt.Sprintf("[::]:%d", r1.Intn(65534-32768)+32768)
|
cfg.Listen = fmt.Sprintf("[::]:%d", r1.Intn(65534-32768)+32768)
|
||||||
}
|
}
|
||||||
cfg.AdminListen = "localhost:9001"
|
cfg.AdminListen = defaults.GetDefaults().DefaultAdminListen
|
||||||
cfg.EncryptionPublicKey = hex.EncodeToString(bpub[:])
|
cfg.EncryptionPublicKey = hex.EncodeToString(bpub[:])
|
||||||
cfg.EncryptionPrivateKey = hex.EncodeToString(bpriv[:])
|
cfg.EncryptionPrivateKey = hex.EncodeToString(bpriv[:])
|
||||||
cfg.SigningPublicKey = hex.EncodeToString(spub[:])
|
cfg.SigningPublicKey = hex.EncodeToString(spub[:])
|
||||||
@ -61,9 +62,9 @@ func generateConfig(isAutoconf bool) *nodeConfig {
|
|||||||
cfg.Peers = []string{}
|
cfg.Peers = []string{}
|
||||||
cfg.AllowedEncryptionPublicKeys = []string{}
|
cfg.AllowedEncryptionPublicKeys = []string{}
|
||||||
cfg.MulticastInterfaces = []string{".*"}
|
cfg.MulticastInterfaces = []string{".*"}
|
||||||
cfg.IfName = core.GetTUNDefaultIfName()
|
cfg.IfName = defaults.GetDefaults().DefaultIfName
|
||||||
cfg.IfMTU = core.GetTUNDefaultIfMTU()
|
cfg.IfMTU = defaults.GetDefaults().DefaultIfMTU
|
||||||
cfg.IfTAPMode = core.GetTUNDefaultIfTAPMode()
|
cfg.IfTAPMode = defaults.GetDefaults().DefaultIfTAPMode
|
||||||
|
|
||||||
return &cfg
|
return &cfg
|
||||||
}
|
}
|
||||||
|
@ -9,10 +9,12 @@ import "encoding/json"
|
|||||||
import "strconv"
|
import "strconv"
|
||||||
import "os"
|
import "os"
|
||||||
|
|
||||||
|
import "yggdrasil/defaults"
|
||||||
|
|
||||||
type admin_info map[string]interface{}
|
type admin_info map[string]interface{}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
server := flag.String("endpoint", "localhost:9001", "Admin socket endpoint")
|
server := flag.String("endpoint", defaults.GetDefaults().DefaultAdminListen, "Admin socket endpoint")
|
||||||
injson := flag.Bool("json", false, "Output in JSON format")
|
injson := flag.Bool("json", false, "Output in JSON format")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
args := flag.Args()
|
args := flag.Args()
|
||||||
|
Loading…
Reference in New Issue
Block a user