ipn/ipnlocal,tailcfg: add AppConnector service to HostInfo when configured

Updates tailscale/corp#15437

Signed-off-by: James Tucker <james@tailscale.com>
This commit is contained in:
James Tucker 2023-11-01 11:38:44 -07:00 committed by James Tucker
parent 6ad54fed00
commit 228a82f178
4 changed files with 39 additions and 7 deletions

View File

@ -3166,6 +3166,12 @@ func (b *LocalBackend) peerAPIServicesLocked() (ret []tailcfg.Service) {
Port: 1, // version
})
}
if b.appConnector != nil {
ret = append(ret, tailcfg.Service{
Proto: tailcfg.AppConnector,
Port: 1, // version
})
}
return ret
}

View File

@ -1157,6 +1157,28 @@ func TestOfferingAppConnector(t *testing.T) {
}
}
func TestAppConnectorHostinfoService(t *testing.T) {
hasAppConnectorService := func(s []tailcfg.Service) bool {
for _, s := range s {
if s.Proto == tailcfg.AppConnector && s.Port == 1 {
return true
}
}
return false
}
b := newTestBackend(t)
b.mu.Lock()
defer b.mu.Unlock()
if hasAppConnectorService(b.peerAPIServicesLocked()) {
t.Fatal("unexpected app connector service")
}
b.appConnector = appc.NewEmbeddedAppConnector(t.Logf, nil)
if !hasAppConnectorService(b.peerAPIServicesLocked()) {
t.Fatal("expected app connector service")
}
}
func TestRouteAdvertiser(t *testing.T) {
b := newTestBackend(t)
testPrefix := netip.MustParsePrefix("192.0.0.8/32")

View File

@ -1003,7 +1003,7 @@ func dnsQueryForName(name, typStr string) []byte {
b := dnsmessage.NewBuilder(nil, dnsmessage.Header{
OpCode: 0, // query
RecursionDesired: true,
ID: 0,
ID: 1, // arbitrary, but 0 is rejected by some servers
})
if !strings.HasSuffix(name, ".") {
name += "."

View File

@ -624,11 +624,12 @@ func (h *Hostinfo) CheckRequestTags() error {
type ServiceProto string
const (
TCP = ServiceProto("tcp")
UDP = ServiceProto("udp")
PeerAPI4 = ServiceProto("peerapi4")
PeerAPI6 = ServiceProto("peerapi6")
PeerAPIDNS = ServiceProto("peerapi-dns-proxy")
TCP = ServiceProto("tcp")
UDP = ServiceProto("udp")
PeerAPI4 = ServiceProto("peerapi4")
PeerAPI6 = ServiceProto("peerapi6")
PeerAPIDNS = ServiceProto("peerapi-dns-proxy")
AppConnector = ServiceProto("app-connector")
)
// Service represents a service running on a node.
@ -645,10 +646,13 @@ type Service struct {
// * "peerapi6": peerapi is available on IPv6; Port is the
// port number that the peerapi is running on the
// node's Tailscale IPv6 address.
// * "peerapi-dns": the local peerapi service supports
// * "peerapi-dns-proxy": the local peerapi service supports
// being a DNS proxy (when the node is an exit
// node). For this service, the Port number is really
// the version number of the service.
// * "app-connector": the local app-connector service is
// available. For this service, the Port number is
// really the version number of the service.
Proto ServiceProto
// Port is the port number.