profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/bradfitz/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.
Brad Fitzpatrick bradfitz Seattle https://bradfitz.com/ Xoogler. Ex @golang team (2010-2020). Currently making WireGuard easier and more magical @Tailscale.

bradfitz/exp-httpclient 562

experimental new HTTP client API for #golang (WIP)

bradfitz/embiggen-disk 443

embiggden-disk live-resizes a filesystem after first live-resizing any necessary layers below it: an optional LVM LV and PV, and an MBR or GPT partition table

bradfitz/gitbrute 344

brute-force a git commit hash

bradfitz/autocertdelegate 235

Get LetsEncrypt TLS certs for internal-only TLS servers via a delegated golang.org/x/crypto/acme/autocert server.

bmizerany/perks 162

Effective Computation of Things

bradfitz/campher 128

Embed Perl in Go. This works, but was a joke for a presentation. Don't use.

bradfitz/deadbeef 105

Gimmicky commit hash made using bradfitz/gitbrute

bradfitz/android-garage-opener 83

Android Garage Door Opener

bradfitz/art 51

Allotment Routing Table

bradfitz/gitutil 47

Utilities for working with git and Gerrit

issue closedtailscale/tailscale

Ubuntu in VMware workstation, connectivity lost after vm pause/resume

Hello!

I run Ubuntu in VMware workstation (Windows 10 host, Ubuntu guest).

If I pause and then resume Ubuntu VM, then I could no longer send or receive data through Tailscale interface.

After I resume the VM, I could see link/none in the output of ip addr show tailscale0 and no data could go through.

The following is the log of such case:

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.2 LTS
Release:	20.04
Codename:	focal

$ uname -a
Linux june-workstation 5.8.0-63-generic #71~20.04.1-Ubuntu SMP Thu Jul 15 17:46:08 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

$ tailscale version
1.10.2
  tailscale commit: 50371bb8fa07fd302bc2429907de6f8197f3fedd
  other commit: 80dcd5480a46fe819462fdbc4564379e18bc6566
  go version: go1.16.6-ts3297502

$ tailscale netcheck

Report:
	* UDP: true
	* IPv4: yes, <REDACTED>:28105
	* IPv6: no
	* MappingVariesByDestIP: false
	* HairPinning: false
	* PortMapping: 
	* Nearest DERP: Frankfurt
	* DERP latency:
    <REDACTED>


$ tailscale ip
100.111.154.5
fd7a:115c:a1e0:ab12:4843:cd96:626f:9a05

$ tailscale status
100.111.154.5   june-workstation     <REDACTED>@  linux   -
100.74.91.100   backup-pi            <REDACTED>@  linux   -
<REDACTED>

$ tailscale ping backup-pi
pong from backup-pi (100.74.91.100) via 192.168.3.2:41641 in 40ms

$ ping -c 3 backup-pi
PING backup-pi.<REDACTED>.beta.tailscale.net (100.74.91.100) 56(84) bytes of data.
64 bytes from backup-pi.<REDACTED>.beta.tailscale.net (100.74.91.100): icmp_seq=1 ttl=64 time=3.08 ms
64 bytes from backup-pi.<REDACTED>.beta.tailscale.net (100.74.91.100): icmp_seq=2 ttl=64 time=2.36 ms
64 bytes from backup-pi.<REDACTED>.beta.tailscale.net (100.74.91.100): icmp_seq=3 ttl=64 time=2.65 ms

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:92:87:56 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.80.143/24 brd 192.168.80.255 scope global dynamic noprefixroute ens33
       valid_lft 1742sec preferred_lft 1742sec
    inet6 fe80::cccf:b7c0:c7a3:59e4/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 
    inet 100.111.154.5/32 scope global tailscale0
       valid_lft forever preferred_lft forever
    inet6 fd7a:115c:a1e0:ab12:4843:cd96:626f:9a05/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::82c5:9a8d:f6d1:2dc0/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

<AT THIS POINT VM WAS PAUSED AND THEN RESUMED RIGHT AWAY>

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:92:87:56 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.80.143/24 brd 192.168.80.255 scope global dynamic noprefixroute ens33
       valid_lft 1788sec preferred_lft 1788sec
    inet6 fe80::cccf:b7c0:c7a3:59e4/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 

<note the "link/none" in tailscale0 interface>

$ tailscale ping backup-pi
pong from backup-pi (100.74.91.100) via 192.168.3.2:41641 in 3ms

$ ping -c 3 backup-pi
PING backup-pi.localdomain (100.74.91.100) 56(84) bytes of data.

--- backup-pi.localdomain ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2035ms

$ tailscale bugreport
BUG-16f4d03af97fb3863b43f18ac230f9cf1b989215ce0f32ba09dacbac9db7fa06-20210728161547Z-119e0364f8aeb55f

$ tailscale netcheck

Report:
	* UDP: true
	* IPv4: yes, <REDACTED>:28739
	* IPv6: no
	* MappingVariesByDestIP: false
	* HairPinning: false
	* PortMapping: 
	* Nearest DERP: Frankfurt
	* DERP latency:
    <REDACTED>

$ tailscale ip
100.111.154.5
fd7a:115c:a1e0:ab12:4843:cd96:626f:9a05

$ tailscale status
100.111.154.5   june-workstation     <REDACTED>@  linux   -
100.74.91.100   backup-pi            <REDACTED>@  linux   active; direct 192.168.3.2:41641, tx 1076 rx 988
<REDACTED>

$ ping -c 3 backup-pi
PING backup-pi.localdomain (100.74.91.100) 56(84) bytes of data.

--- backup-pi.localdomain ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2035ms

<trying to reload with tailscale down/up>

$ sudo tailscale down
$ sudo tailscale up

$ ip addr show tailscale0
4: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 

$ ping -c 3 backup-pi
PING backup-pi.<REDACTED>.beta.tailscale.net (100.74.91.100) 56(84) bytes of data.

--- backup-pi.<REDACTED>.beta.tailscale.net ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2047ms

<still not working>

$ sudo systemctl restart tailscaled

$ ip addr show tailscale0
5: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 
    inet 100.111.154.5/32 scope global tailscale0
       valid_lft forever preferred_lft forever
    inet6 fd7a:115c:a1e0:ab12:4843:cd96:626f:9a05/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::e692:2a42:52d5:bafd/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

<it's back!>

$ ping -c 3 backup-pi
PING backup-pi.localdomain (100.74.91.100) 56(84) bytes of data.
64 bytes from backup-pi.<REDACTED>.beta.tailscale.net (100.74.91.100): icmp_seq=1 ttl=64 time=138 ms
64 bytes from backup-pi.<REDACTED>.beta.tailscale.net (100.74.91.100): icmp_seq=2 ttl=64 time=5.12 ms
64 bytes from backup-pi.<REDACTED>.beta.tailscale.net (100.74.91.100): icmp_seq=3 ttl=64 time=3.43 ms

--- backup-pi.localdomain ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 3.428/48.781/137.795/62.946 ms

Thank you for your time!

closed time in a minute

senotrusov

issue commenttailscale/tailscale

Ubuntu in VMware workstation, connectivity lost after vm pause/resume

Sounds like #2458. Try updating to 1.12.1 which includes the fix. Reopen this bug if it doesn't fix it for you?

senotrusov

comment created time in a minute

issue commenttailscale/tailscale

Provide better messaging about IP forwarding

Oh, right. Great, let's call this fixed.

rosszurowski

comment created time in 20 minutes

issue closedtailscale/tailscale

Provide better messaging about IP forwarding

A few users have written in, confused by an error about IP forwarding not being enabled when they try to set up a subnet.

I've updated our documentation to include instructions on how to enable IP forwarding, but it'd be nice if we could identify this error and give people the needed steps right in the CLI.

In short, they need to run these lines:

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf

Maybe we could say:

$ tailscale up --advertise-routes=<routes>

Error: IP forwarding is not enabled, but is needed for --advertise-routes.
You can enable IP forwarding by editing /etc/sysctl.conf and trying again:

    echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p /etc/sysctl.conf

Having the documentation built-in would be a much better experience.

Also a valid fix, but more risky: maybe we should manage this setting on behalf of users?

closed time in 20 minutes

rosszurowski

push eventtailscale/tailscale

Aaron Bieber

commit sha c179b9b535a4f70e88cd33c9bbcdef045e71e32c

cmd/tsshd: switch from github.com/kr/pty to github.com/creack/pty The kr/pty module moved to creack/pty per the kr/pty README[1]. creack/pty brings in support for a number of OS/arch combos that are lacking in kr/pty. Run `go mod tidy` while here. [1] https://github.com/kr/pty/blob/master/README.md Signed-off-by: Aaron Bieber <aaron@bolddaemon.com>

view details

push time in 41 minutes

PR merged tailscale/tailscale

cmd/tsshd: switch from github.com/kr/pty to github.com/creack/pty

The kr/pty module moved to creack/pty per the kr/pty README[1].

creack/pty brings in support for a number of OS/arch combos that are lacking in kr/pty.

Run go mod tidy while here.

[1] https://github.com/kr/pty/blob/master/README.md

+6 -17

2 comments

3 changed files

qbit

pr closed time in 41 minutes

pull request commenttailscale/tailscale

cmd/tsshd: switch from github.com/kr/pty to github.com/creack/pty

Thanks. We require the DCO sign-off line in commit messages, though.

If you agree with https://developercertificate.org/ then git commit --amend -s to update your commit message, then git push -f the branch.

qbit

comment created time in an hour

Pull request review commenttailscale/tailscale

wgengine/userspace: add support to automatically enable/disable the tailscale protocol in BIRD.

 func (e *userspaceEngine) updateActivityMapsLocked(trackDisco []tailcfg.DiscoKey 	e.tundev.SetDestIPActivityFuncs(e.destIPActivityFuncs) } +func hasOverlap(aips, rips []netaddr.IPPrefix) bool {

comment that this is different than

https://pkg.go.dev/inet.af/netaddr#IPPrefix.Overlaps https://pkg.go.dev/inet.af/netaddr#IPSet.Overlaps

This is not about any partial overlap.

maisem

comment created time in an hour

PullRequestReviewEvent
PullRequestReviewEvent

Pull request review commenttailscale/tailscale

wgengine/userspace: add support to automatically enable/disable the tailscale protocol in BIRD.

 func (e *userspaceEngine) Reconfig(cfg *wgcfg.Config, routerCfg *router.Config, 		} 	} +	if isSubnetRouterChanged && e.birdClient != nil {+		e.logf("wgengine: Reconfig: configuring BIRD")+		var err error+		if isSubnetRouter {+			err = e.birdClient.EnableProtocol("tailscale")+		} else {+			err = e.birdClient.DisableProtocol("tailscale")+		}+		if err != nil {+			// Log but don't fail here.+			e.logf("wgengine: Reconfig: configuring BIRD failed: %v", err)

I'm not 100% sure but I think we've been moving to getting the word "error" in all failure log prints to ease grepping logs for "error" to find bad stuff.

So like "error configuring BIRD: %v"

maisem

comment created time in an hour

PullRequestReviewEvent
PullRequestReviewEvent

Pull request review commenttailscale/tailscale

wgengine/userspace: add support to automatically enable/disable the tailscale protocol in BIRD.

 type userspaceEngine struct { 	linkMon           *monitor.Mon 	linkMonOwned      bool   // whether we created linkMon (and thus need to close it) 	linkMonUnregister func() // unsubscribes from changes; used regardless of linkMonOwned+	birdClient        *chirp.BIRDClient

// or nil I assume?

maisem

comment created time in an hour

PullRequestReviewEvent

Pull request review commenttailscale/tailscale

wgengine/userspace: add support to automatically enable/disable the tailscale protocol in BIRD.

+// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.+// Use of this source code is governed by a BSD-style+// license that can be found in the LICENSE file.++// Package chirp implements a client to communicate with BIRD.+package chirp++import (+	"fmt"+	"net"+	"strings"+)++// New creates a BIRDClient.+func New(socket string) (*BIRDClient, error) {+	conn, err := newConn(socket)+	if err != nil {+		return nil, fmt.Errorf("failed to connect to BIRD: %w", err)+	}+	return &BIRDClient{socket: socket, conn: conn}, nil+}++// BIRDClient handles communication with BIRD.+type BIRDClient struct {+	socket string+	conn   net.Conn+}++// DisableProtocol disables the provided protocol.+func (b *BIRDClient) DisableProtocol(protocol string) error {+	out, err := b.exec(fmt.Sprintf("disable %s\n", protocol))+	if err != nil {+		return err+	}+	if strings.Contains(out, fmt.Sprintf("%s: already disabled", protocol)) {+		return nil+	} else if strings.Contains(out, fmt.Sprintf("%s: disabled", protocol)) {+		return nil+	}+	return fmt.Errorf("failed to disable %s: %v", protocol, out)+}++// EnableProtocol enables the provided protocol.+func (b *BIRDClient) EnableProtocol(protocol string) error {+	out, err := b.exec(fmt.Sprintf("enable %s\n", protocol))+	if err != nil {+		return err+	}+	if strings.Contains(out, fmt.Sprintf("%s: already enabled", protocol)) {+		return nil+	} else if strings.Contains(out, fmt.Sprintf("%s: enabled", protocol)) {+		return nil+	}+	return fmt.Errorf("failed to enable %s: %v", protocol, out)+}++func (b *BIRDClient) exec(cmd string) (string, error) {+	if _, err := b.conn.Write([]byte(cmd)); err != nil {+		return "", err+	}+	buf := make([]byte, 4096)+	if _, err := b.conn.Read(buf); err != nil {

this isn't a safe way to read from a net.Conn. there are zero guarantees about how much will be returned. you need to loop.

I assume the output is framed somehow? with a length? with a newline character?

maisem

comment created time in an hour

issue commenttailscale/tailscale

sort and export to CSV option on machine tab in UI.

I think I'd rather this be a CLI command, like tailscale admin users list --csv or tailscale admin users list --sort=connected.

/cc @rosszurowski

darshinimashar

comment created time in 2 hours

issue commenttailscale/tailscale

dns: skipping bad resolver: [unexpected] non-IP resolver "0.0.0.0/0"

Ping @danderson for ideas.

bradfitz

comment created time in 2 hours

issue commenttailscale/tailscale

Report local subnet routes to control

Example of what we currently log:

link state: interfaces.State{defaultRoute=ens18 ifs={docker0:[172.17.0.1/16] ens18:[10.0.0.52/16 2602:d1:b4cf:c100:xxxx:4148/64]} v4=true v6=true}

That at least tells us the default route and the interfaces subnet sizes, which is usually enough.

This can probably be closed. It's hard for me to think of cases where more precise route information would've been helpful while debugging.

bradfitz

comment created time in 2 hours

issue commenttailscale/tailscale

Provide better messaging about IP forwarding

Added the /kb/ URL to the error message. Let's not break them. :)

Leaving bug open to track plumbing this more to the admin panel (we plumb it to control already) and showing the brokeness is tailscale status (which is really #2528), and also maybe just fixing this for users automatically.

rosszurowski

comment created time in 2 hours

push eventtailscale/tailscale

Brad Fitzpatrick

commit sha 690ade4ee1c0e4e30f95226f6e6ffaadbd803813

ipn/ipnlocal: add URL to IP forwarding error message Updates #606 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>

view details

push time in 2 hours

Pull request review commenttailscale/tailscale

tstime/mono: add new package, use everywhere

+// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.+// Use of this source code is governed by a BSD-style+// license that can be found in the LICENSE file.++// Package mono provides fast monotonic time.

Maybe flesh out this package comment a bit with some numbers and a big scary warning that it should almost never be used and std time is plenty fast?

josharian

comment created time in 13 hours

Pull request review commenttailscale/tailscale

tstime/mono: add new package, use everywhere

 type Wrapper struct {  	closeOnce sync.Once -	lastActivityAtomic int64 // unix seconds of last send or receive+	lastActivity mono.Time // time of last send or receive, accessed atomically

keep the old variable name? the Atomic suffix is ugly and scary which is a feature.

I guess you didn't like the stutter in lastActivityAtomic.LoadAtomic etc? I'm fine with it if you are.

josharian

comment created time in 13 hours

PullRequestReviewEvent
PullRequestReviewEvent

push eventtailscale/tailscale-chocolatey

Duncan

commit sha 668f9ba712ba6748b77577d344742525c1fb4767

Bump to 1.12.1 (#22)

view details

push time in 13 hours

issue commenttailscale/tailscale

1.12.0 on Ubuntu fails to stay started

Can you systemctl stop tailscaled and then run tailscaled in the foreground, like:

$ sudo /usr/sbin/tailscaled --cleanup
$ sudo /usr/sbin/tailscaled --state=/var/lib/tailscale/tailscaled.state --socket=/run/tailscale/tailscaled.sock --port=41641

And then in another window, while that second tailscaled is running, then try to check its status, etc?

It seems like tailscaled is crashing but its crash logs aren't getting uploaded.

jc00ke

comment created time in 18 hours

issue commenttailscale/tailscale

1.12.0 on Ubuntu fails to stay started

I don't think it's #2321. It'd be different symptoms if it were.

Looking at logs (cd78e299c5ef11ecf4946362945b020ef28f0a423d872c47941eb0ccee3e3c62) I see the process restarting a lot, with no obvious crash in the logs for the previous generation:

2021-07-27 15:57:26.991721774 -0700 PDT: health("overall"): ok
2021-07-27 15:57:27.054284 -0700 PDT: LinkChange: minor
2021-07-27 15:57:27.05431515 -0700 PDT: magicsock: ReSTUN: endpoint update active, need another later ("link-change-minor")
2021-07-27 15:57:27.131133386 -0700 PDT: control: mapRoutine: netmap received: state:synchronized
2021-07-27 15:57:27.131163826 -0700 PDT: control: sendStatus: mapRoutine-got-netmap: state:synchronized
2021-07-27 15:57:27.131184696 -0700 PDT: netmap diff: (none)
2021-07-27 15:57:27.131374426 -0700 PDT: wgcfg: skipped unselected default routes from: "tailscale-relay-9c2da37" ([O2sn8])
2021-07-27 15:57:27.216271597 -0700 PDT: netcheck: report: udp=true v6=false mapvarydest=false hair=false portmap= v4a=52.129.39.162:41641 derp=10 derpdist=2v4:29ms,9v4:59ms,10v4:8ms
2021-07-27 15:57:27.468788047 -0700 PDT: netcheck: report: udp=true v6=false mapvarydest=false hair=false portmap= v4a=52.129.39.162:41641 derp=10 derpdist=2v4:30ms,9v4:59ms,10v4:7ms
2021-07-27 15:57:27.554920855 -0700 PDT: logtail started
2021-07-27 15:57:27.555015614 -0700 PDT: Program starting: v1.12.0-t359baa842-ge1013695a, Go 1.16.6-ts6fa85e8: []string{"/usr/sbin/tailscaled", "--cleanup"}
2021-07-27 15:57:27.555029764 -0700 PDT: LogID: cd78e299c5ef11ecf4946362945b020ef28f0a423d872c47941eb0ccee3e3c62
2021-07-27 15:57:27.555035704 -0700 PDT: logpolicy: using $STATE_DIRECTORY, "/var/lib/tailscale"
2021-07-27 15:57:27.557374108 -0700 PDT: dns: [rc=resolved nm=yes nm-resolved=yes nm-safe=no ret=*dns.resolvedManager]
2021-07-27 15:57:27.557416817 -0700 PDT: creating dns cleanup: route ip+net: no such network interface
2021-07-27 15:57:27.557427867 -0700 PDT: flushing log.
2021-07-27 15:57:27.557438917 -0700 PDT: logger closing down
2021-07-27 15:57:27.584641218 -0700 PDT: logtail: dialed "log.tailscale.io:443" in 29ms
2021-07-27 15:57:27.876012723 -0700 PDT: logtail started
2021-07-27 15:57:27.876087523 -0700 PDT: Program starting: v1.12.0-t359baa842-ge1013695a, Go 1.16.6-ts6fa85e8: []string{"/usr/sbin/tailscaled", "--cleanup"}
2021-07-27 15:57:27.876098493 -0700 PDT: LogID: cd78e299c5ef11ecf4946362945b020ef28f0a423d872c47941eb0ccee3e3c62
2021-07-27 15:57:27.876103963 -0700 PDT: logpolicy: using $STATE_DIRECTORY, "/var/lib/tailscale"
2021-07-27 15:57:27.878175457 -0700 PDT: dns: [rc=resolved nm=yes nm-resolved=yes nm-safe=no ret=*dns.resolvedManager]
2021-07-27 15:57:27.878368837 -0700 PDT: creating dns cleanup: route ip+net: no such network interface
2021-07-27 15:57:27.878413476 -0700 PDT: flushing log.
2021-07-27 15:57:27.878427036 -0700 PDT: logger closing down
2021-07-27 15:57:27.895315197 -0700 PDT: logtail: dialed "log.tailscale.io:443" in 18ms
2021-07-27 15:57:27.970173578 -0700 PDT: logtail started
2021-07-27 15:57:27.970230588 -0700 PDT: Program starting: v1.12.0-t359baa842-ge1013695a, Go 1.16.6-ts6fa85e8: []string{"/usr/sbin/tailscaled", "--state=/var/lib/tailscale/tailscaled.state", "--socket=/run/tailscale/tailscaled.sock", "--port", "416
41"}
jc00ke

comment created time in 18 hours

Pull request review commenttailscale/tailscale

tstime/mono: add new package, use everywhere

 type PeerStatus struct { 	RxBytes       int64 	TxBytes       int64 	Created       time.Time // time registered with tailcontrol-	LastWrite     time.Time // time last packet sent+	LastWrite     mono.Time // time last packet sent

How does this serialize in JSON in tailscale status --json ?

josharian

comment created time in 20 hours