| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | /* * Copyright (c)2019 ZeroTier, Inc. * * Use of this software is governed by the Business Source License included * in the LICENSE.TXT file in the project's root directory. * * Change Date: 2023-01-01 * * On the date above, in accordance with the Business Source License, use * of this software will be governed by version 2.0 of the Apache License. *//****/package cliimport (	"fmt"	"os"	"zerotier/pkg/zerotier")// Peers CLI commandfunc Peers(basePath, authToken string, args []string, jsonOutput bool) {	var peers []zerotier.Peer	apiGet(basePath, authToken, "/peer", &peers)	if jsonOutput {		fmt.Println(jsonDump(&peers))	} else {		fmt.Printf("<address>  <ver>   <role> <lat> <link> <lastTX> <lastRX> <path(s)>\n")		for _, peer := range peers {			role := "LEAF"			link := "RELAY"			lastTX, lastRX := int64(0), int64(0)			address := ""			if len(peer.Paths) > 0 {				link = "DIRECT"				lastTX, lastRX = peer.Clock-peer.Paths[0].LastSend, peer.Clock-peer.Paths[0].LastReceive				if lastTX < 0 {					lastTX = 0				}				if lastRX < 0 {					lastRX = 0				}				address = fmt.Sprintf("%s/%d", peer.Paths[0].IP.String(), peer.Paths[0].Port)			}			fmt.Printf("%.10x %-7s %-6s %-5d %-6s %-8d %-8d %s\n",				uint64(peer.Address),				fmt.Sprintf("%d.%d.%d", peer.Version[0], peer.Version[1], peer.Version[2]),				role,				peer.Latency,				link,				lastTX,				lastRX,				address,			)		}	}	os.Exit(0)}
 |