summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cmd/tailscale/cli/ip.go11
-rw-r--r--ipn/ipnstate/ipnstate.go3
2 files changed, 13 insertions, 1 deletions
diff --git a/cmd/tailscale/cli/ip.go b/cmd/tailscale/cli/ip.go
index 053ea165e..107ac3de8 100644
--- a/cmd/tailscale/cli/ip.go
+++ b/cmd/tailscale/cli/ip.go
@@ -23,6 +23,7 @@ var ipCmd = &ffcli.Command{
fs := flag.NewFlagSet("ip", flag.ExitOnError)
fs.BoolVar(&ipArgs.want4, "4", false, "only print IPv4 address")
fs.BoolVar(&ipArgs.want6, "6", false, "only print IPv6 address")
+ fs.StringVar(&ipArgs.of, "of", "", "if non-empty, print IP of this named peer, instead of the local node")
return fs
})(),
}
@@ -30,6 +31,7 @@ var ipCmd = &ffcli.Command{
var ipArgs struct {
want4 bool
want6 bool
+ of string
}
func runIP(ctx context.Context, args []string) error {
@@ -50,6 +52,15 @@ func runIP(ctx context.Context, args []string) error {
if len(st.TailscaleIPs) == 0 {
return fmt.Errorf("no current Tailscale IPs; state: %v", st.BackendState)
}
+
+ if ipArgs.of != "" {
+ ip, err := tailscaleIPFromArg(ctx, ipArgs.of)
+ if err != nil {
+ return err
+ }
+ // TODO: finish
+ }
+
match := false
for _, ip := range st.TailscaleIPs {
if ip.Is4() && v4 || ip.Is6() && v6 {
diff --git a/ipn/ipnstate/ipnstate.go b/ipn/ipnstate/ipnstate.go
index c781718ae..bb462e0b3 100644
--- a/ipn/ipnstate/ipnstate.go
+++ b/ipn/ipnstate/ipnstate.go
@@ -71,7 +71,8 @@ type PeerStatus struct {
OS string // HostInfo.OS
UserID tailcfg.UserID
- TailAddr string // Tailscale IP
+ TailAddr string // Tailscale IP
+ TailscaleIPs []netaddr.IP // Tailscale IP(s) assigned to this node
// Endpoints:
Addrs []string