From c4ac0a90ac8250a87981ac97b608e58c22520c75 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Sun, 21 Jan 2018 12:57:54 +0000 Subject: [PATCH] Add the ability to see switch ports and DHT --- src/yggdrasil/admin.go | 34 ++++++++++++++++++++++++++++++---- yggdrasil.go | 2 +- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/yggdrasil/admin.go b/src/yggdrasil/admin.go index b7a6e74..86ac100 100644 --- a/src/yggdrasil/admin.go +++ b/src/yggdrasil/admin.go @@ -6,6 +6,8 @@ import "bytes" import "fmt" // TODO: Make all of this JSON +// TODO: Add authentication +// TODO: Is any of this thread safe? type admin struct { core *Core @@ -44,10 +46,34 @@ func (a *admin) handleRequest(conn net.Conn) { } buf = bytes.Trim(buf, "\x00\r\n\t") switch string(buf) { - case "ports": - ports := a.core.peers.getPorts() - for _, v := range ports { - conn.Write([]byte(fmt.Sprintf("Found switch port %d\n", v.port))) + case "switch table": + table := a.core.switchTable.table.Load().(lookupTable) + conn.Write([]byte(fmt.Sprintf( + "port 0 -> %+v\n", + table.self.coords))) + for _, v := range table.elems { + conn.Write([]byte(fmt.Sprintf( + "port %d -> %+v\n", + v.port, + v.locator.coords))) + } + break + + case "dht": + n := a.core.dht.nBuckets() + for i := 0; i < n; i++ { + b := a.core.dht.getBucket(i) + if len(b.infos) == 0 { + continue + } + for _, v := range b.infos { + addr := address_addrForNodeID(v.nodeID_hidden) + ip := net.IP(addr[:]).String() + + conn.Write([]byte(fmt.Sprintf("%+v -> %+v\n", + ip, + v.coords))) + } } break diff --git a/yggdrasil.go b/yggdrasil.go index 9000289..cde55c5 100644 --- a/yggdrasil.go +++ b/yggdrasil.go @@ -96,7 +96,7 @@ func generateConfig() *nodeConfig { spub, spriv := core.DEBUG_newSigKeys() cfg := nodeConfig{} cfg.Listen = "[::]:0" - cfg.AdminListen = "[::]:0" + cfg.AdminListen = "[::1]:9001" cfg.BoxPub = hex.EncodeToString(bpub[:]) cfg.BoxPriv = hex.EncodeToString(bpriv[:]) cfg.SigPub = hex.EncodeToString(spub[:])