mirror of
https://github.com/tailscale/tailscale.git
synced 2025-07-29 23:33:45 +00:00
types/netmap,wgengine/magicsock: propagate CapVer to magicsock.endpoint (#16244)
This enables us to mark nodes as relay capable or not. We don't actually do that yet, as we haven't established a relay CapVer. Updates tailscale/corp#27502 Signed-off-by: Jordan Whited <jordan@tailscale.com>
This commit is contained in:
parent
8114260019
commit
6a93b17c8c
@ -69,6 +69,17 @@ func (m NodeMutationLastSeen) Apply(n *tailcfg.Node) {
|
|||||||
n.LastSeen = ptr.To(m.LastSeen)
|
n.LastSeen = ptr.To(m.LastSeen)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NodeMutationCap is a NodeMutation that says a node's
|
||||||
|
// [tailcfg.CapabilityVersion] value has changed.
|
||||||
|
type NodeMutationCap struct {
|
||||||
|
mutatingNodeID
|
||||||
|
Cap tailcfg.CapabilityVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m NodeMutationCap) Apply(n *tailcfg.Node) {
|
||||||
|
n.Cap = m.Cap
|
||||||
|
}
|
||||||
|
|
||||||
var peerChangeFields = sync.OnceValue(func() []reflect.StructField {
|
var peerChangeFields = sync.OnceValue(func() []reflect.StructField {
|
||||||
var fields []reflect.StructField
|
var fields []reflect.StructField
|
||||||
rt := reflect.TypeFor[tailcfg.PeerChange]()
|
rt := reflect.TypeFor[tailcfg.PeerChange]()
|
||||||
@ -105,6 +116,8 @@ func NodeMutationsFromPatch(p *tailcfg.PeerChange) (_ []NodeMutation, ok bool) {
|
|||||||
ret = append(ret, NodeMutationOnline{mutatingNodeID(p.NodeID), *p.Online})
|
ret = append(ret, NodeMutationOnline{mutatingNodeID(p.NodeID), *p.Online})
|
||||||
case "LastSeen":
|
case "LastSeen":
|
||||||
ret = append(ret, NodeMutationLastSeen{mutatingNodeID(p.NodeID), *p.LastSeen})
|
ret = append(ret, NodeMutationLastSeen{mutatingNodeID(p.NodeID), *p.LastSeen})
|
||||||
|
case "Cap":
|
||||||
|
ret = append(ret, NodeMutationCap{mutatingNodeID(p.NodeID), p.Cap})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret, true
|
return ret, true
|
||||||
|
@ -177,6 +177,14 @@ func TestMutationsFromMapResponse(t *testing.T) {
|
|||||||
},
|
},
|
||||||
want: nil,
|
want: nil,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "patch-cap",
|
||||||
|
mr: fromChanges(&tailcfg.PeerChange{
|
||||||
|
NodeID: 1,
|
||||||
|
Cap: 2,
|
||||||
|
}),
|
||||||
|
want: muts(NodeMutationCap{1, 2}),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
@ -195,6 +203,7 @@ func TestMutationsFromMapResponse(t *testing.T) {
|
|||||||
NodeMutationDERPHome{},
|
NodeMutationDERPHome{},
|
||||||
NodeMutationOnline{},
|
NodeMutationOnline{},
|
||||||
NodeMutationLastSeen{},
|
NodeMutationLastSeen{},
|
||||||
|
NodeMutationCap{},
|
||||||
)); diff != "" {
|
)); diff != "" {
|
||||||
t.Errorf("wrong result (-want +got):\n%s", diff)
|
t.Errorf("wrong result (-want +got):\n%s", diff)
|
||||||
}
|
}
|
||||||
|
@ -1423,6 +1423,8 @@ func (de *endpoint) updateFromNode(n tailcfg.NodeView, heartbeatDisabled bool, p
|
|||||||
}
|
}
|
||||||
|
|
||||||
de.setEndpointsLocked(n.Endpoints())
|
de.setEndpointsLocked(n.Endpoints())
|
||||||
|
|
||||||
|
de.relayCapable = capVerIsRelayCapable(n.Cap())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (de *endpoint) setEndpointsLocked(eps interface {
|
func (de *endpoint) setEndpointsLocked(eps interface {
|
||||||
|
@ -2507,6 +2507,11 @@ func (c *Conn) SetProbeUDPLifetime(v bool) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func capVerIsRelayCapable(version tailcfg.CapabilityVersion) bool {
|
||||||
|
// TODO(jwhited): implement once capVer is bumped
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// SetNetworkMap is called when the control client gets a new network
|
// SetNetworkMap is called when the control client gets a new network
|
||||||
// map from the control server. It must always be non-nil.
|
// map from the control server. It must always be non-nil.
|
||||||
//
|
//
|
||||||
@ -3203,6 +3208,10 @@ func (c *Conn) UpdateNetmapDelta(muts []netmap.NodeMutation) (handled bool) {
|
|||||||
ep.mu.Lock()
|
ep.mu.Lock()
|
||||||
ep.setEndpointsLocked(views.SliceOf(m.Endpoints))
|
ep.setEndpointsLocked(views.SliceOf(m.Endpoints))
|
||||||
ep.mu.Unlock()
|
ep.mu.Unlock()
|
||||||
|
case netmap.NodeMutationCap:
|
||||||
|
ep.mu.Lock()
|
||||||
|
ep.relayCapable = capVerIsRelayCapable(m.Cap)
|
||||||
|
ep.mu.Unlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user