|
|
@ -157,7 +157,7 @@ type Node struct {
|
|
|
|
AllowedIPs []netaddr.IPPrefix // range of IP addresses to route to this node
|
|
|
|
AllowedIPs []netaddr.IPPrefix // range of IP addresses to route to this node
|
|
|
|
Endpoints []string `json:",omitempty"` // IP+port (public via STUN, and local LANs)
|
|
|
|
Endpoints []string `json:",omitempty"` // IP+port (public via STUN, and local LANs)
|
|
|
|
DERP string `json:",omitempty"` // DERP-in-IP:port ("127.3.3.40:N") endpoint
|
|
|
|
DERP string `json:",omitempty"` // DERP-in-IP:port ("127.3.3.40:N") endpoint
|
|
|
|
Hostinfo Hostinfo
|
|
|
|
Hostinfo HostinfoView
|
|
|
|
Created time.Time
|
|
|
|
Created time.Time
|
|
|
|
|
|
|
|
|
|
|
|
// Tags are the list of ACL tags applied to this node.
|
|
|
|
// Tags are the list of ACL tags applied to this node.
|
|
|
@ -256,7 +256,10 @@ func (n *Node) DisplayNames(forOwner bool) (name, hostIfDifferent string) {
|
|
|
|
// n.ComputedNameWithHost.
|
|
|
|
// n.ComputedNameWithHost.
|
|
|
|
func (n *Node) InitDisplayNames(networkMagicDNSSuffix string) {
|
|
|
|
func (n *Node) InitDisplayNames(networkMagicDNSSuffix string) {
|
|
|
|
name := dnsname.TrimSuffix(n.Name, networkMagicDNSSuffix)
|
|
|
|
name := dnsname.TrimSuffix(n.Name, networkMagicDNSSuffix)
|
|
|
|
hostIfDifferent := dnsname.SanitizeHostname(n.Hostinfo.Hostname)
|
|
|
|
var hostIfDifferent string
|
|
|
|
|
|
|
|
if n.Hostinfo.Valid() {
|
|
|
|
|
|
|
|
hostIfDifferent = dnsname.SanitizeHostname(n.Hostinfo.Hostname())
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if strings.EqualFold(name, hostIfDifferent) {
|
|
|
|
if strings.EqualFold(name, hostIfDifferent) {
|
|
|
|
hostIfDifferent = ""
|
|
|
|
hostIfDifferent = ""
|
|
|
@ -456,7 +459,7 @@ type Hostinfo struct {
|
|
|
|
// require changes to Hostinfo.Equal.
|
|
|
|
// require changes to Hostinfo.Equal.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// View returns a read-only accessor for the Hostinfo object.
|
|
|
|
// View returns a read-only accessor for hi.
|
|
|
|
func (hi *Hostinfo) View() HostinfoView { return HostinfoView{hi} }
|
|
|
|
func (hi *Hostinfo) View() HostinfoView { return HostinfoView{hi} }
|
|
|
|
|
|
|
|
|
|
|
|
// HostinfoView is a read-only accessor for Hostinfo.
|
|
|
|
// HostinfoView is a read-only accessor for Hostinfo.
|
|
|
@ -503,7 +506,7 @@ func (v HostinfoView) Hostname() string { return v.ж.Hostname }
|
|
|
|
func (v HostinfoView) ShieldsUp() bool { return v.ж.ShieldsUp }
|
|
|
|
func (v HostinfoView) ShieldsUp() bool { return v.ж.ShieldsUp }
|
|
|
|
func (v HostinfoView) ShareeNode() bool { return v.ж.ShareeNode }
|
|
|
|
func (v HostinfoView) ShareeNode() bool { return v.ж.ShareeNode }
|
|
|
|
func (v HostinfoView) GoArch() string { return v.ж.GoArch }
|
|
|
|
func (v HostinfoView) GoArch() string { return v.ж.GoArch }
|
|
|
|
func (v HostinfoView) Equal(h2 HostinfoView) bool { return v.ж.Equal(h2.ж) }
|
|
|
|
func (v HostinfoView) Equal(v2 HostinfoView) bool { return v.ж.Equal(v2.ж) }
|
|
|
|
|
|
|
|
|
|
|
|
func (v HostinfoView) RoutableIPs() views.IPPrefixSlice {
|
|
|
|
func (v HostinfoView) RoutableIPs() views.IPPrefixSlice {
|
|
|
|
return views.IPPrefixSliceOf(v.ж.RoutableIPs)
|
|
|
|
return views.IPPrefixSliceOf(v.ж.RoutableIPs)
|
|
|
@ -656,7 +659,7 @@ func (ni *NetInfo) portMapSummary() string {
|
|
|
|
return prefix + conciseOptBool(ni.UPnP, "U") + conciseOptBool(ni.PMP, "M") + conciseOptBool(ni.PCP, "C")
|
|
|
|
return prefix + conciseOptBool(ni.UPnP, "U") + conciseOptBool(ni.PMP, "M") + conciseOptBool(ni.PCP, "C")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// View returns a read-only accessor for the NetInfo object.
|
|
|
|
// View returns a read-only accessor for ni.
|
|
|
|
func (ni *NetInfo) View() NetInfoView { return NetInfoView{ni} }
|
|
|
|
func (ni *NetInfo) View() NetInfoView { return NetInfoView{ni} }
|
|
|
|
|
|
|
|
|
|
|
|
func conciseOptBool(b opt.Bool, trueVal string) string {
|
|
|
|
func conciseOptBool(b opt.Bool, trueVal string) string {
|
|
|
@ -1390,7 +1393,7 @@ func (n *Node) Equal(n2 *Node) bool {
|
|
|
|
eqCIDRs(n.PrimaryRoutes, n2.PrimaryRoutes) &&
|
|
|
|
eqCIDRs(n.PrimaryRoutes, n2.PrimaryRoutes) &&
|
|
|
|
eqStrings(n.Endpoints, n2.Endpoints) &&
|
|
|
|
eqStrings(n.Endpoints, n2.Endpoints) &&
|
|
|
|
n.DERP == n2.DERP &&
|
|
|
|
n.DERP == n2.DERP &&
|
|
|
|
n.Hostinfo.Equal(&n2.Hostinfo) &&
|
|
|
|
n.Hostinfo.Equal(n2.Hostinfo) &&
|
|
|
|
n.Created.Equal(n2.Created) &&
|
|
|
|
n.Created.Equal(n2.Created) &&
|
|
|
|
eqTimePtr(n.LastSeen, n2.LastSeen) &&
|
|
|
|
eqTimePtr(n.LastSeen, n2.LastSeen) &&
|
|
|
|
n.MachineAuthorized == n2.MachineAuthorized &&
|
|
|
|
n.MachineAuthorized == n2.MachineAuthorized &&
|
|
|
|