mirror of
https://github.com/tailscale/tailscale.git
synced 2025-12-24 17:47:30 +00:00
tailcfg: add some omitzero, adjust some omitempty to omitzero
Updates tailscale/corp#25406 Change-Id: I7832dbe3dce3774bcc831e3111feb75bcc9e021d Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
committed by
Brad Fitzpatrick
parent
3b865d7c33
commit
5b0c57f497
@@ -255,9 +255,9 @@ func (u StableNodeID) IsZero() bool {
|
||||
// have a general gmail address login associated with the user.
|
||||
type User struct {
|
||||
ID UserID
|
||||
DisplayName string // if non-empty overrides Login field
|
||||
ProfilePicURL string // if non-empty overrides Login field
|
||||
Created time.Time
|
||||
DisplayName string // if non-empty overrides Login field
|
||||
ProfilePicURL string `json:",omitzero"` // if non-empty overrides Login field
|
||||
Created time.Time `json:",omitzero"`
|
||||
}
|
||||
|
||||
// Login is a user from a specific identity provider, not associated with any
|
||||
@@ -268,7 +268,7 @@ type Login struct {
|
||||
Provider string // "google", "github", "okta_foo", etc.
|
||||
LoginName string // an email address or "email-ish" string (like alice@github)
|
||||
DisplayName string // from the IdP
|
||||
ProfilePicURL string // from the IdP
|
||||
ProfilePicURL string `json:",omitzero"` // from the IdP
|
||||
}
|
||||
|
||||
// A UserProfile is display-friendly data for a [User].
|
||||
@@ -278,7 +278,7 @@ type UserProfile struct {
|
||||
ID UserID
|
||||
LoginName string // "alice@smith.com"; for display purposes only (provider is not listed)
|
||||
DisplayName string // "Alice Smith"
|
||||
ProfilePicURL string `json:",omitempty"`
|
||||
ProfilePicURL string `json:",omitzero"`
|
||||
}
|
||||
|
||||
func (p *UserProfile) Equal(p2 *UserProfile) bool {
|
||||
@@ -345,13 +345,13 @@ type Node struct {
|
||||
User UserID
|
||||
|
||||
// Sharer, if non-zero, is the user who shared this node, if different than User.
|
||||
Sharer UserID `json:",omitempty"`
|
||||
Sharer UserID `json:",omitzero"`
|
||||
|
||||
Key key.NodePublic
|
||||
KeyExpiry time.Time // the zero value if this node does not expire
|
||||
KeyExpiry time.Time `json:",omitzero"` // the zero value if this node does not expire
|
||||
KeySignature tkatype.MarshaledSignature `json:",omitempty"`
|
||||
Machine key.MachinePublic
|
||||
DiscoKey key.DiscoPublic
|
||||
Machine key.MachinePublic `json:",omitzero"`
|
||||
DiscoKey key.DiscoPublic `json:",omitzero"`
|
||||
|
||||
// Addresses are the IP addresses of this Node directly.
|
||||
Addresses []netip.Prefix
|
||||
@@ -361,7 +361,7 @@ type Node struct {
|
||||
// As of CapabilityVersion 112, this may be nil (null or undefined) on the wire
|
||||
// to mean the same as Addresses. Internally, it is always filled in with
|
||||
// its possibly-implicit value.
|
||||
AllowedIPs []netip.Prefix
|
||||
AllowedIPs []netip.Prefix `json:",omitzero"` // _not_ omitempty; only nil is special
|
||||
|
||||
Endpoints []netip.AddrPort `json:",omitempty"` // IP+port (public via STUN, and local LANs)
|
||||
|
||||
@@ -375,18 +375,18 @@ type Node struct {
|
||||
// this field. See tailscale/tailscale#14636. Do not use this field in code
|
||||
// other than in the upgradeNode func, which canonicalizes it to HomeDERP
|
||||
// if it arrives as a LegacyDERPString string on the wire.
|
||||
LegacyDERPString string `json:"DERP,omitempty"` // DERP-in-IP:port ("127.3.3.40:N") endpoint
|
||||
LegacyDERPString string `json:"DERP,omitzero"` // DERP-in-IP:port ("127.3.3.40:N") endpoint
|
||||
|
||||
// HomeDERP is the modern version of the DERP string field, with just an
|
||||
// integer. The client advertises support for this as of capver 111.
|
||||
//
|
||||
// HomeDERP may be zero if not (yet) known, but ideally always be non-zero
|
||||
// for magicsock connectivity to function normally.
|
||||
HomeDERP int `json:",omitempty"` // DERP region ID of the node's home DERP
|
||||
HomeDERP int `json:",omitzero"` // DERP region ID of the node's home DERP
|
||||
|
||||
Hostinfo HostinfoView
|
||||
Created time.Time
|
||||
Cap CapabilityVersion `json:",omitempty"` // if non-zero, the node's capability version; old servers might not send
|
||||
Hostinfo HostinfoView `json:",omitzero"`
|
||||
Created time.Time `json:",omitzero"`
|
||||
Cap CapabilityVersion `json:",omitzero"` // if non-zero, the node's capability version; old servers might not send
|
||||
|
||||
// Tags are the list of ACL tags applied to this node.
|
||||
// Tags take the form of `tag:<value>` where value starts
|
||||
@@ -453,25 +453,25 @@ type Node struct {
|
||||
// it do anything. It is the tailscaled client's job to double-check the
|
||||
// MapResponse's PacketFilter to verify that its AllowedIPs will not be
|
||||
// accepted by the packet filter.
|
||||
UnsignedPeerAPIOnly bool `json:",omitempty"`
|
||||
UnsignedPeerAPIOnly bool `json:",omitzero"`
|
||||
|
||||
// The following three computed fields hold the various names that can
|
||||
// be used for this node in UIs. They are populated from controlclient
|
||||
// (not from control) by calling node.InitDisplayNames. These can be
|
||||
// used directly or accessed via node.DisplayName or node.DisplayNames.
|
||||
|
||||
ComputedName string `json:",omitempty"` // MagicDNS base name (for normal non-shared-in nodes), FQDN (without trailing dot, for shared-in nodes), or Hostname (if no MagicDNS)
|
||||
ComputedName string `json:",omitzero"` // MagicDNS base name (for normal non-shared-in nodes), FQDN (without trailing dot, for shared-in nodes), or Hostname (if no MagicDNS)
|
||||
computedHostIfDifferent string // hostname, if different than ComputedName, otherwise empty
|
||||
ComputedNameWithHost string `json:",omitempty"` // either "ComputedName" or "ComputedName (computedHostIfDifferent)", if computedHostIfDifferent is set
|
||||
ComputedNameWithHost string `json:",omitzero"` // either "ComputedName" or "ComputedName (computedHostIfDifferent)", if computedHostIfDifferent is set
|
||||
|
||||
// DataPlaneAuditLogID is the per-node logtail ID used for data plane audit logging.
|
||||
DataPlaneAuditLogID string `json:",omitempty"`
|
||||
DataPlaneAuditLogID string `json:",omitzero"`
|
||||
|
||||
// Expired is whether this node's key has expired. Control may send
|
||||
// this; clients are only allowed to set this from false to true. On
|
||||
// the client, this is calculated client-side based on a timestamp sent
|
||||
// from control, to avoid clock skew issues.
|
||||
Expired bool `json:",omitempty"`
|
||||
Expired bool `json:",omitzero"`
|
||||
|
||||
// SelfNodeV4MasqAddrForThisPeer is the IPv4 that this peer knows the current node as.
|
||||
// It may be empty if the peer knows the current node by its native
|
||||
@@ -486,7 +486,7 @@ type Node struct {
|
||||
// This only applies to traffic originating from the current node to the
|
||||
// peer or any of its subnets. Traffic originating from subnet routes will
|
||||
// not be masqueraded (e.g. in case of --snat-subnet-routes).
|
||||
SelfNodeV4MasqAddrForThisPeer *netip.Addr `json:",omitempty"`
|
||||
SelfNodeV4MasqAddrForThisPeer *netip.Addr `json:",omitzero"` // TODO: de-pointer: tailscale/tailscale#17978
|
||||
|
||||
// SelfNodeV6MasqAddrForThisPeer is the IPv6 that this peer knows the current node as.
|
||||
// It may be empty if the peer knows the current node by its native
|
||||
@@ -501,17 +501,17 @@ type Node struct {
|
||||
// This only applies to traffic originating from the current node to the
|
||||
// peer or any of its subnets. Traffic originating from subnet routes will
|
||||
// not be masqueraded (e.g. in case of --snat-subnet-routes).
|
||||
SelfNodeV6MasqAddrForThisPeer *netip.Addr `json:",omitempty"`
|
||||
SelfNodeV6MasqAddrForThisPeer *netip.Addr `json:",omitzero"` // TODO: de-pointer: tailscale/tailscale#17978
|
||||
|
||||
// IsWireGuardOnly indicates that this is a non-Tailscale WireGuard peer, it
|
||||
// is not expected to speak Disco or DERP, and it must have Endpoints in
|
||||
// order to be reachable.
|
||||
IsWireGuardOnly bool `json:",omitempty"`
|
||||
IsWireGuardOnly bool `json:",omitzero"`
|
||||
|
||||
// IsJailed indicates that this node is jailed and should not be allowed
|
||||
// initiate connections, however outbound connections to it should still be
|
||||
// allowed.
|
||||
IsJailed bool `json:",omitempty"`
|
||||
IsJailed bool `json:",omitzero"`
|
||||
|
||||
// ExitNodeDNSResolvers is the list of DNS servers that should be used when this
|
||||
// node is marked IsWireGuardOnly and being used as an exit node.
|
||||
@@ -827,10 +827,10 @@ type Location struct {
|
||||
// Because it contains pointers (slices), this type should not be used
|
||||
// as a value type.
|
||||
type Hostinfo struct {
|
||||
IPNVersion string `json:",omitempty"` // version of this code (in version.Long format)
|
||||
FrontendLogID string `json:",omitempty"` // logtail ID of frontend instance
|
||||
BackendLogID string `json:",omitempty"` // logtail ID of backend instance
|
||||
OS string `json:",omitempty"` // operating system the client runs on (a version.OS value)
|
||||
IPNVersion string `json:",omitzero"` // version of this code (in version.Long format)
|
||||
FrontendLogID string `json:",omitzero"` // logtail ID of frontend instance
|
||||
BackendLogID string `json:",omitzero"` // logtail ID of backend instance
|
||||
OS string `json:",omitzero"` // operating system the client runs on (a version.OS value)
|
||||
|
||||
// OSVersion is the version of the OS, if available.
|
||||
//
|
||||
@@ -842,25 +842,25 @@ type Hostinfo struct {
|
||||
// string on Linux, like "Debian 10.4; kernel=xxx; container; env=kn" and so
|
||||
// on. As of Tailscale 1.32, this is simply the kernel version on Linux, like
|
||||
// "5.10.0-17-amd64".
|
||||
OSVersion string `json:",omitempty"`
|
||||
OSVersion string `json:",omitzero"`
|
||||
|
||||
Container opt.Bool `json:",omitempty"` // best-effort whether the client is running in a container
|
||||
Env string `json:",omitempty"` // a hostinfo.EnvType in string form
|
||||
Distro string `json:",omitempty"` // "debian", "ubuntu", "nixos", ...
|
||||
DistroVersion string `json:",omitempty"` // "20.04", ...
|
||||
DistroCodeName string `json:",omitempty"` // "jammy", "bullseye", ...
|
||||
Container opt.Bool `json:",omitzero"` // best-effort whether the client is running in a container
|
||||
Env string `json:",omitzero"` // a hostinfo.EnvType in string form
|
||||
Distro string `json:",omitzero"` // "debian", "ubuntu", "nixos", ...
|
||||
DistroVersion string `json:",omitzero"` // "20.04", ...
|
||||
DistroCodeName string `json:",omitzero"` // "jammy", "bullseye", ...
|
||||
|
||||
// App is used to disambiguate Tailscale clients that run using tsnet.
|
||||
App string `json:",omitempty"` // "k8s-operator", "golinks", ...
|
||||
App string `json:",omitzero"` // "k8s-operator", "golinks", ...
|
||||
|
||||
Desktop opt.Bool `json:",omitempty"` // if a desktop was detected on Linux
|
||||
Package string `json:",omitempty"` // Tailscale package to disambiguate ("choco", "appstore", etc; "" for unknown)
|
||||
DeviceModel string `json:",omitempty"` // mobile phone model ("Pixel 3a", "iPhone12,3")
|
||||
PushDeviceToken string `json:",omitempty"` // macOS/iOS APNs device token for notifications (and Android in the future)
|
||||
Hostname string `json:",omitempty"` // name of the host the client runs on
|
||||
ShieldsUp bool `json:",omitempty"` // indicates whether the host is blocking incoming connections
|
||||
ShareeNode bool `json:",omitempty"` // indicates this node exists in netmap because it's owned by a shared-to user
|
||||
NoLogsNoSupport bool `json:",omitempty"` // indicates that the user has opted out of sending logs and support
|
||||
Desktop opt.Bool `json:",omitzero"` // if a desktop was detected on Linux
|
||||
Package string `json:",omitzero"` // Tailscale package to disambiguate ("choco", "appstore", etc; "" for unknown)
|
||||
DeviceModel string `json:",omitzero"` // mobile phone model ("Pixel 3a", "iPhone12,3")
|
||||
PushDeviceToken string `json:",omitzero"` // macOS/iOS APNs device token for notifications (and Android in the future)
|
||||
Hostname string `json:",omitzero"` // name of the host the client runs on
|
||||
ShieldsUp bool `json:",omitzero"` // indicates whether the host is blocking incoming connections
|
||||
ShareeNode bool `json:",omitzero"` // indicates this node exists in netmap because it's owned by a shared-to user
|
||||
NoLogsNoSupport bool `json:",omitzero"` // indicates that the user has opted out of sending logs and support
|
||||
// WireIngress indicates that the node would like to be wired up server-side
|
||||
// (DNS, etc) to be able to use Tailscale Funnel, even if it's not currently
|
||||
// enabled. For example, the user might only use it for intermittent
|
||||
@@ -868,38 +868,38 @@ type Hostinfo struct {
|
||||
// away, even if it's disabled most of the time. As an optimization, this is
|
||||
// only sent if IngressEnabled is false, as IngressEnabled implies that this
|
||||
// option is true.
|
||||
WireIngress bool `json:",omitempty"`
|
||||
IngressEnabled bool `json:",omitempty"` // if the node has any funnel endpoint enabled
|
||||
AllowsUpdate bool `json:",omitempty"` // indicates that the node has opted-in to admin-console-drive remote updates
|
||||
Machine string `json:",omitempty"` // the current host's machine type (uname -m)
|
||||
GoArch string `json:",omitempty"` // GOARCH value (of the built binary)
|
||||
GoArchVar string `json:",omitempty"` // GOARM, GOAMD64, etc (of the built binary)
|
||||
GoVersion string `json:",omitempty"` // Go version binary was built with
|
||||
WireIngress bool `json:",omitzero"`
|
||||
IngressEnabled bool `json:",omitzero"` // if the node has any funnel endpoint enabled
|
||||
AllowsUpdate bool `json:",omitzero"` // indicates that the node has opted-in to admin-console-drive remote updates
|
||||
Machine string `json:",omitzero"` // the current host's machine type (uname -m)
|
||||
GoArch string `json:",omitzero"` // GOARCH value (of the built binary)
|
||||
GoArchVar string `json:",omitzero"` // GOARM, GOAMD64, etc (of the built binary)
|
||||
GoVersion string `json:",omitzero"` // Go version binary was built with
|
||||
RoutableIPs []netip.Prefix `json:",omitempty"` // set of IP ranges this client can route
|
||||
RequestTags []string `json:",omitempty"` // set of ACL tags this node wants to claim
|
||||
WoLMACs []string `json:",omitempty"` // MAC address(es) to send Wake-on-LAN packets to wake this node (lowercase hex w/ colons)
|
||||
Services []Service `json:",omitempty"` // services advertised by this machine
|
||||
NetInfo *NetInfo `json:",omitempty"`
|
||||
NetInfo *NetInfo `json:",omitzero"`
|
||||
SSH_HostKeys []string `json:"sshHostKeys,omitempty"` // if advertised
|
||||
Cloud string `json:",omitempty"`
|
||||
Userspace opt.Bool `json:",omitempty"` // if the client is running in userspace (netstack) mode
|
||||
UserspaceRouter opt.Bool `json:",omitempty"` // if the client's subnet router is running in userspace (netstack) mode
|
||||
AppConnector opt.Bool `json:",omitempty"` // if the client is running the app-connector service
|
||||
ServicesHash string `json:",omitempty"` // opaque hash of the most recent list of tailnet services, change in hash indicates config should be fetched via c2n
|
||||
ExitNodeID StableNodeID `json:",omitzero"` // the client’s selected exit node, empty when unselected.
|
||||
Cloud string `json:",omitzero"`
|
||||
Userspace opt.Bool `json:",omitzero"` // if the client is running in userspace (netstack) mode
|
||||
UserspaceRouter opt.Bool `json:",omitzero"` // if the client's subnet router is running in userspace (netstack) mode
|
||||
AppConnector opt.Bool `json:",omitzero"` // if the client is running the app-connector service
|
||||
ServicesHash string `json:",omitzero"` // opaque hash of the most recent list of tailnet services, change in hash indicates config should be fetched via c2n
|
||||
ExitNodeID StableNodeID `json:",omitzero"` // the client’s selected exit node, empty when unselected.
|
||||
|
||||
// Location represents geographical location data about a
|
||||
// Tailscale host. Location is optional and only set if
|
||||
// explicitly declared by a node.
|
||||
Location *Location `json:",omitempty"`
|
||||
Location *Location `json:",omitzero"`
|
||||
|
||||
TPM *TPMInfo `json:",omitempty"` // TPM device metadata, if available
|
||||
TPM *TPMInfo `json:",omitzero"` // TPM device metadata, if available
|
||||
// StateEncrypted reports whether the node state is stored encrypted on
|
||||
// disk. The actual mechanism is platform-specific:
|
||||
// * Apple nodes use the Keychain
|
||||
// * Linux and Windows nodes use the TPM
|
||||
// * Android apps use EncryptedSharedPreferences
|
||||
StateEncrypted opt.Bool `json:",omitempty"`
|
||||
StateEncrypted opt.Bool `json:",omitzero"`
|
||||
|
||||
// NOTE: any new fields containing pointers in this type
|
||||
// require changes to Hostinfo.Equal.
|
||||
@@ -913,25 +913,25 @@ type TPMInfo struct {
|
||||
// https://trustedcomputinggroup.org/resource/vendor-id-registry/,
|
||||
// for example "MSFT" for Microsoft.
|
||||
// Read from TPM_PT_MANUFACTURER.
|
||||
Manufacturer string `json:",omitempty"`
|
||||
Manufacturer string `json:",omitzero"`
|
||||
// Vendor is a vendor ID string, up to 16 characters.
|
||||
// Read from TPM_PT_VENDOR_STRING_*.
|
||||
Vendor string `json:",omitempty"`
|
||||
Vendor string `json:",omitzero"`
|
||||
// Model is a vendor-defined TPM model.
|
||||
// Read from TPM_PT_VENDOR_TPM_TYPE.
|
||||
Model int `json:",omitempty"`
|
||||
Model int `json:",omitzero"`
|
||||
// FirmwareVersion is the version number of the firmware.
|
||||
// Read from TPM_PT_FIRMWARE_VERSION_*.
|
||||
FirmwareVersion uint64 `json:",omitempty"`
|
||||
FirmwareVersion uint64 `json:",omitzero"`
|
||||
// SpecRevision is the TPM 2.0 spec revision encoded as a single number. All
|
||||
// revisions can be found at
|
||||
// https://trustedcomputinggroup.org/resource/tpm-library-specification/.
|
||||
// Before revision 184, TCG used the "01.83" format for revision 183.
|
||||
SpecRevision int `json:",omitempty"`
|
||||
SpecRevision int `json:",omitzero"`
|
||||
|
||||
// FamilyIndicator is the TPM spec family, like "2.0".
|
||||
// Read from TPM_PT_FAMILY_INDICATOR.
|
||||
FamilyIndicator string `json:",omitempty"`
|
||||
FamilyIndicator string `json:",omitzero"`
|
||||
}
|
||||
|
||||
// Present reports whether a TPM device is present on this machine.
|
||||
@@ -1016,37 +1016,37 @@ func (v HostinfoView) TailscaleSSHEnabled() bool { return v.ж.TailscaleSSHEnabl
|
||||
type NetInfo struct {
|
||||
// MappingVariesByDestIP says whether the host's NAT mappings
|
||||
// vary based on the destination IP.
|
||||
MappingVariesByDestIP opt.Bool
|
||||
MappingVariesByDestIP opt.Bool `json:",omitzero"`
|
||||
|
||||
// WorkingIPv6 is whether the host has IPv6 internet connectivity.
|
||||
WorkingIPv6 opt.Bool
|
||||
WorkingIPv6 opt.Bool `json:",omitzero"`
|
||||
|
||||
// OSHasIPv6 is whether the OS supports IPv6 at all, regardless of
|
||||
// whether IPv6 internet connectivity is available.
|
||||
OSHasIPv6 opt.Bool
|
||||
OSHasIPv6 opt.Bool `json:",omitzero"`
|
||||
|
||||
// WorkingUDP is whether the host has UDP internet connectivity.
|
||||
WorkingUDP opt.Bool
|
||||
WorkingUDP opt.Bool `json:",omitzero"`
|
||||
|
||||
// WorkingICMPv4 is whether ICMPv4 works.
|
||||
// Empty means not checked.
|
||||
WorkingICMPv4 opt.Bool
|
||||
WorkingICMPv4 opt.Bool `json:",omitzero"`
|
||||
|
||||
// HavePortMap is whether we have an existing portmap open
|
||||
// (UPnP, PMP, or PCP).
|
||||
HavePortMap bool `json:",omitempty"`
|
||||
HavePortMap bool `json:",omitzero"`
|
||||
|
||||
// UPnP is whether UPnP appears present on the LAN.
|
||||
// Empty means not checked.
|
||||
UPnP opt.Bool
|
||||
UPnP opt.Bool `json:",omitzero"`
|
||||
|
||||
// PMP is whether NAT-PMP appears present on the LAN.
|
||||
// Empty means not checked.
|
||||
PMP opt.Bool
|
||||
PMP opt.Bool `json:",omitzero"`
|
||||
|
||||
// PCP is whether PCP appears present on the LAN.
|
||||
// Empty means not checked.
|
||||
PCP opt.Bool
|
||||
PCP opt.Bool `json:",omitzero"`
|
||||
|
||||
// PreferredDERP is this node's preferred (home) DERP region ID.
|
||||
// This is where the node expects to be contacted to begin a
|
||||
@@ -1055,10 +1055,10 @@ type NetInfo struct {
|
||||
// that are located elsewhere) but PreferredDERP is the region ID
|
||||
// that the node subscribes to traffic at.
|
||||
// Zero means disconnected or unknown.
|
||||
PreferredDERP int
|
||||
PreferredDERP int `json:",omitzero"`
|
||||
|
||||
// LinkType is the current link type, if known.
|
||||
LinkType string `json:",omitempty"` // "wired", "wifi", "mobile" (LTE, 4G, 3G, etc)
|
||||
LinkType string `json:",omitzero"` // "wired", "wifi", "mobile" (LTE, 4G, 3G, etc)
|
||||
|
||||
// DERPLatency is the fastest recent time to reach various
|
||||
// DERP STUN servers, in seconds. The map key is the
|
||||
@@ -1076,7 +1076,7 @@ type NetInfo struct {
|
||||
// "{nft,ift}-REASON", like "nft-forced" or "ipt-default". Empty means
|
||||
// either not Linux or a configuration in which the host firewall rules
|
||||
// are not managed by tailscaled.
|
||||
FirewallMode string `json:",omitempty"`
|
||||
FirewallMode string `json:",omitzero"`
|
||||
|
||||
// Update BasicallyEqual when adding fields.
|
||||
}
|
||||
@@ -1364,8 +1364,8 @@ type MapRequest struct {
|
||||
// For current values and history, see the CapabilityVersion type's docs.
|
||||
Version CapabilityVersion
|
||||
|
||||
Compress string // "zstd" or "" (no compression)
|
||||
KeepAlive bool // whether server should send keep-alives back to us
|
||||
Compress string `json:",omitzero"` // "zstd" or "" (no compression)
|
||||
KeepAlive bool `json:",omitzero"` // whether server should send keep-alives back to us
|
||||
NodeKey key.NodePublic
|
||||
DiscoKey key.DiscoPublic
|
||||
|
||||
@@ -1388,7 +1388,7 @@ type MapRequest struct {
|
||||
//
|
||||
// If true and Version >= 68, the server should treat this as a read-only
|
||||
// request and ignore any Hostinfo or other fields that might be set.
|
||||
Stream bool
|
||||
Stream bool `json:",omitzero"`
|
||||
|
||||
// Hostinfo is the client's current Hostinfo. Although it is always included
|
||||
// in the request, the server may choose to ignore it when Stream is true
|
||||
@@ -1405,14 +1405,14 @@ type MapRequest struct {
|
||||
//
|
||||
// The server may choose to ignore the request for any reason and start a
|
||||
// new map session. This is only applicable when Stream is true.
|
||||
MapSessionHandle string `json:",omitempty"`
|
||||
MapSessionHandle string `json:",omitzero"`
|
||||
|
||||
// MapSessionSeq is the sequence number in the map session identified by
|
||||
// MapSesssionHandle that was most recently processed by the client.
|
||||
// It is only applicable when MapSessionHandle is specified.
|
||||
// If the server chooses to honor the MapSessionHandle request, only sequence
|
||||
// numbers greater than this value will be returned.
|
||||
MapSessionSeq int64 `json:",omitempty"`
|
||||
MapSessionSeq int64 `json:",omitzero"`
|
||||
|
||||
// Endpoints are the client's magicsock UDP ip:port endpoints (IPv4 or IPv6).
|
||||
// These can be ignored if Stream is true and Version >= 68.
|
||||
@@ -1423,7 +1423,7 @@ type MapRequest struct {
|
||||
// TKAHead describes the hash of the latest AUM applied to the local
|
||||
// tailnet key authority, if one is operating.
|
||||
// It is encoded as tka.AUMHash.MarshalText.
|
||||
TKAHead string `json:",omitempty"`
|
||||
TKAHead string `json:",omitzero"`
|
||||
|
||||
// ReadOnly was set when client just wanted to fetch the MapResponse,
|
||||
// without updating their Endpoints. The intended use was for clients to
|
||||
@@ -1431,7 +1431,7 @@ type MapRequest struct {
|
||||
// update.
|
||||
//
|
||||
// Deprecated: always false as of Version 68.
|
||||
ReadOnly bool `json:",omitempty"`
|
||||
ReadOnly bool `json:",omitzero"`
|
||||
|
||||
// OmitPeers is whether the client is okay with the Peers list being omitted
|
||||
// in the response.
|
||||
@@ -1447,7 +1447,7 @@ type MapRequest struct {
|
||||
// If OmitPeers is true, Stream is false, but ReadOnly is true,
|
||||
// then all the response fields are included. (This is what the client does
|
||||
// when initially fetching the DERP map.)
|
||||
OmitPeers bool `json:",omitempty"`
|
||||
OmitPeers bool `json:",omitzero"`
|
||||
|
||||
// DebugFlags is a list of strings specifying debugging and
|
||||
// development features to enable in handling this map
|
||||
@@ -1467,7 +1467,7 @@ type MapRequest struct {
|
||||
// identifies this specific connection to the server. The server may choose to
|
||||
// use this handle to identify the connection for debugging or testing
|
||||
// purposes. It has no semantic meaning.
|
||||
ConnectionHandleForTest string `json:",omitempty"`
|
||||
ConnectionHandleForTest string `json:",omitzero"`
|
||||
}
|
||||
|
||||
// PortRange represents a range of UDP or TCP port numbers.
|
||||
@@ -1758,7 +1758,7 @@ type DNSConfig struct {
|
||||
// in the network map, aka MagicDNS.
|
||||
// Despite the (legacy) name, does not necessarily cause request
|
||||
// proxying to be enabled.
|
||||
Proxied bool `json:",omitempty"`
|
||||
Proxied bool `json:",omitzero"`
|
||||
|
||||
// Nameservers are the IP addresses of the global nameservers to use.
|
||||
//
|
||||
@@ -1795,7 +1795,7 @@ type DNSConfig struct {
|
||||
// TempCorpIssue13969 is a temporary (2023-08-16) field for an internal hack day prototype.
|
||||
// It contains a user inputed URL that should have a list of domains to be blocked.
|
||||
// See https://github.com/tailscale/corp/issues/13969.
|
||||
TempCorpIssue13969 string `json:",omitempty"`
|
||||
TempCorpIssue13969 string `json:",omitzero"`
|
||||
}
|
||||
|
||||
// DNSRecord is an extra DNS record to add to MagicDNS.
|
||||
@@ -1807,7 +1807,7 @@ type DNSRecord struct {
|
||||
// Type is the DNS record type.
|
||||
// Empty means A or AAAA, depending on value.
|
||||
// Other values are currently ignored.
|
||||
Type string `json:",omitempty"`
|
||||
Type string `json:",omitzero"`
|
||||
|
||||
// Value is the IP address in string form.
|
||||
// TODO(bradfitz): if we ever add support for record types
|
||||
@@ -1855,11 +1855,11 @@ type PingRequest struct {
|
||||
|
||||
// URLIsNoise, if true, means that the client should hit URL over the Noise
|
||||
// transport instead of TLS.
|
||||
URLIsNoise bool `json:",omitempty"`
|
||||
URLIsNoise bool `json:",omitzero"`
|
||||
|
||||
// Log is whether to log about this ping in the success case.
|
||||
// For failure cases, the client will log regardless.
|
||||
Log bool `json:",omitempty"`
|
||||
Log bool `json:",omitzero"`
|
||||
|
||||
// Types is the types of ping that are initiated. Can be any PingType, comma
|
||||
// separated, e.g. "disco,TSMP"
|
||||
@@ -1869,10 +1869,10 @@ type PingRequest struct {
|
||||
// node's c2n handler and the HTTP response sent in a POST to URL. For c2n,
|
||||
// the value of URLIsNoise is ignored and only the Noise transport (back to
|
||||
// the control plane) will be used, as if URLIsNoise were true.
|
||||
Types string `json:",omitempty"`
|
||||
Types string `json:",omitzero"`
|
||||
|
||||
// IP is the ping target, when needed by the PingType(s) given in Types.
|
||||
IP netip.Addr
|
||||
IP netip.Addr `json:",omitzero"`
|
||||
|
||||
// Payload is the ping payload.
|
||||
//
|
||||
@@ -3043,29 +3043,29 @@ type SSHRecordingAttempt struct {
|
||||
// See QueryFeatureResponse for response structure.
|
||||
type QueryFeatureRequest struct {
|
||||
// Feature is the string identifier for a feature.
|
||||
Feature string `json:",omitempty"`
|
||||
Feature string `json:",omitzero"`
|
||||
// NodeKey is the client's current node key.
|
||||
NodeKey key.NodePublic `json:",omitempty"`
|
||||
NodeKey key.NodePublic `json:",omitzero"`
|
||||
}
|
||||
|
||||
// QueryFeatureResponse is the response to an QueryFeatureRequest.
|
||||
// See cli.enableFeatureInteractive for usage.
|
||||
type QueryFeatureResponse struct {
|
||||
// Complete is true when the feature is already enabled.
|
||||
Complete bool `json:",omitempty"`
|
||||
Complete bool `json:",omitzero"`
|
||||
|
||||
// Text holds lines to display in the CLI with information
|
||||
// about the feature and how to enable it.
|
||||
//
|
||||
// Lines are separated by newline characters. The final
|
||||
// newline may be omitted.
|
||||
Text string `json:",omitempty"`
|
||||
Text string `json:",omitzero"`
|
||||
|
||||
// URL is the link for the user to visit to take action on
|
||||
// enabling the feature.
|
||||
//
|
||||
// When empty, there is no action for this user to take.
|
||||
URL string `json:",omitempty"`
|
||||
URL string `json:",omitzero"`
|
||||
|
||||
// ShouldWait specifies whether the CLI should block and
|
||||
// wait for the user to enable the feature.
|
||||
@@ -3078,7 +3078,7 @@ type QueryFeatureResponse struct {
|
||||
//
|
||||
// The CLI can watch the IPN notification bus for changes in
|
||||
// required node capabilities to know when to continue.
|
||||
ShouldWait bool `json:",omitempty"`
|
||||
ShouldWait bool `json:",omitzero"`
|
||||
}
|
||||
|
||||
// WebClientAuthResponse is the response to a web client authentication request
|
||||
@@ -3088,15 +3088,15 @@ type WebClientAuthResponse struct {
|
||||
// ID is a unique identifier for the session auth request.
|
||||
// It can be supplied to "/machine/webclient/wait" to pause until
|
||||
// the session authentication has been completed.
|
||||
ID string `json:",omitempty"`
|
||||
ID string `json:",omitzero"`
|
||||
|
||||
// URL is the link for the user to visit to authenticate the session.
|
||||
//
|
||||
// When empty, there is no action for the user to take.
|
||||
URL string `json:",omitempty"`
|
||||
URL string `json:",omitzero"`
|
||||
|
||||
// Complete is true when the session authentication has been completed.
|
||||
Complete bool `json:",omitempty"`
|
||||
Complete bool `json:",omitzero"`
|
||||
}
|
||||
|
||||
// OverTLSPublicKeyResponse is the JSON response to /key?v=<n>
|
||||
@@ -3172,10 +3172,10 @@ type PeerChange struct {
|
||||
|
||||
// DERPRegion, if non-zero, means that NodeID's home DERP
|
||||
// region ID is now this number.
|
||||
DERPRegion int `json:",omitempty"`
|
||||
DERPRegion int `json:",omitzero"`
|
||||
|
||||
// Cap, if non-zero, means that NodeID's capability version has changed.
|
||||
Cap CapabilityVersion `json:",omitempty"`
|
||||
Cap CapabilityVersion `json:",omitzero"`
|
||||
|
||||
// CapMap, if non-nil, means that NodeID's capability map has changed.
|
||||
CapMap NodeCapMap `json:",omitempty"`
|
||||
@@ -3185,23 +3185,23 @@ type PeerChange struct {
|
||||
Endpoints []netip.AddrPort `json:",omitempty"`
|
||||
|
||||
// Key, if non-nil, means that the NodeID's wireguard public key changed.
|
||||
Key *key.NodePublic `json:",omitempty"`
|
||||
Key *key.NodePublic `json:",omitzero"` // TODO: de-pointer: tailscale/tailscale#17978
|
||||
|
||||
// KeySignature, if non-nil, means that the signature of the wireguard
|
||||
// public key has changed.
|
||||
KeySignature tkatype.MarshaledSignature `json:",omitempty"`
|
||||
|
||||
// DiscoKey, if non-nil, means that the NodeID's discokey changed.
|
||||
DiscoKey *key.DiscoPublic `json:",omitempty"`
|
||||
DiscoKey *key.DiscoPublic `json:",omitzero"` // TODO: de-pointer: tailscale/tailscale#17978
|
||||
|
||||
// Online, if non-nil, means that the NodeID's online status changed.
|
||||
Online *bool `json:",omitempty"`
|
||||
Online *bool `json:",omitzero"`
|
||||
|
||||
// LastSeen, if non-nil, means that the NodeID's online status changed.
|
||||
LastSeen *time.Time `json:",omitempty"`
|
||||
LastSeen *time.Time `json:",omitzero"` // TODO: de-pointer: tailscale/tailscale#17978
|
||||
|
||||
// KeyExpiry, if non-nil, changes the NodeID's key expiry.
|
||||
KeyExpiry *time.Time `json:",omitempty"`
|
||||
KeyExpiry *time.Time `json:",omitzero"` // TODO: de-pointer: tailscale/tailscale#17978
|
||||
}
|
||||
|
||||
// DerpMagicIP is a fake WireGuard endpoint IP address that means to
|
||||
@@ -3279,14 +3279,14 @@ const (
|
||||
// POST https://<control-plane>/machine/audit-log
|
||||
type AuditLogRequest struct {
|
||||
// Version is the client's current CapabilityVersion.
|
||||
Version CapabilityVersion `json:",omitempty"`
|
||||
Version CapabilityVersion `json:",omitzero"`
|
||||
// NodeKey is the client's current node key.
|
||||
NodeKey key.NodePublic `json:",omitzero"`
|
||||
// Action is the action to be logged. It must correspond to a known action in the control plane.
|
||||
Action ClientAuditAction `json:",omitempty"`
|
||||
Action ClientAuditAction `json:",omitzero"`
|
||||
// Details is an opaque string, specific to the action being logged. Empty strings may not
|
||||
// be valid depending on the action being logged.
|
||||
Details string `json:",omitempty"`
|
||||
Details string `json:",omitzero"`
|
||||
// Timestamp is the time at which the audit log was generated on the node.
|
||||
Timestamp time.Time `json:",omitzero"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user