mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-29 15:15:00 -04:00 
			
		
		
		
	Port dns to net/netip
This commit is contained in:
		
							parent
							
								
									efb12f208c
								
							
						
					
					
						commit
						71410cb6da
					
				
							
								
								
									
										21
									
								
								dns.go
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								dns.go
									
									
									
									
									
								
							| @ -2,10 +2,11 @@ package headscale | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"net/netip" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	mapset "github.com/deckarep/golang-set/v2" | ||||
| 	"inet.af/netaddr" | ||||
| 	"go4.org/netipx" | ||||
| 	"tailscale.com/tailcfg" | ||||
| 	"tailscale.com/util/dnsname" | ||||
| ) | ||||
| @ -39,11 +40,11 @@ const ( | ||||
| 
 | ||||
| // From the netmask we can find out the wildcard bits (the bits that are not set in the netmask). | ||||
| // This allows us to then calculate the subnets included in the subsequent class block and generate the entries. | ||||
| func generateMagicDNSRootDomains(ipPrefixes []netaddr.IPPrefix) []dnsname.FQDN { | ||||
| func generateMagicDNSRootDomains(ipPrefixes []netip.Prefix) []dnsname.FQDN { | ||||
| 	fqdns := make([]dnsname.FQDN, 0, len(ipPrefixes)) | ||||
| 	for _, ipPrefix := range ipPrefixes { | ||||
| 		var generateDNSRoot func(netaddr.IPPrefix) []dnsname.FQDN | ||||
| 		switch ipPrefix.IP().BitLen() { | ||||
| 		var generateDNSRoot func(netip.Prefix) []dnsname.FQDN | ||||
| 		switch ipPrefix.Addr().BitLen() { | ||||
| 		case ipv4AddressLength: | ||||
| 			generateDNSRoot = generateIPv4DNSRootDomain | ||||
| 
 | ||||
| @ -54,7 +55,7 @@ func generateMagicDNSRootDomains(ipPrefixes []netaddr.IPPrefix) []dnsname.FQDN { | ||||
| 			panic( | ||||
| 				fmt.Sprintf( | ||||
| 					"unsupported IP version with address length %d", | ||||
| 					ipPrefix.IP().BitLen(), | ||||
| 					ipPrefix.Addr().BitLen(), | ||||
| 				), | ||||
| 			) | ||||
| 		} | ||||
| @ -65,9 +66,9 @@ func generateMagicDNSRootDomains(ipPrefixes []netaddr.IPPrefix) []dnsname.FQDN { | ||||
| 	return fqdns | ||||
| } | ||||
| 
 | ||||
| func generateIPv4DNSRootDomain(ipPrefix netaddr.IPPrefix) []dnsname.FQDN { | ||||
| func generateIPv4DNSRootDomain(ipPrefix netip.Prefix) []dnsname.FQDN { | ||||
| 	// Conversion to the std lib net.IPnet, a bit easier to operate | ||||
| 	netRange := ipPrefix.IPNet() | ||||
| 	netRange := netipx.PrefixIPNet(ipPrefix) | ||||
| 	maskBits, _ := netRange.Mask.Size() | ||||
| 
 | ||||
| 	// lastOctet is the last IP byte covered by the mask | ||||
| @ -101,11 +102,11 @@ func generateIPv4DNSRootDomain(ipPrefix netaddr.IPPrefix) []dnsname.FQDN { | ||||
| 	return fqdns | ||||
| } | ||||
| 
 | ||||
| func generateIPv6DNSRootDomain(ipPrefix netaddr.IPPrefix) []dnsname.FQDN { | ||||
| func generateIPv6DNSRootDomain(ipPrefix netip.Prefix) []dnsname.FQDN { | ||||
| 	const nibbleLen = 4 | ||||
| 
 | ||||
| 	maskBits, _ := ipPrefix.IPNet().Mask.Size() | ||||
| 	expanded := ipPrefix.IP().StringExpanded() | ||||
| 	maskBits, _ := netipx.PrefixIPNet(ipPrefix).Mask.Size() | ||||
| 	expanded := ipPrefix.Addr().StringExpanded() | ||||
| 	nibbleStr := strings.Map(func(r rune) rune { | ||||
| 		if r == ':' { | ||||
| 			return -1 | ||||
|  | ||||
							
								
								
									
										34
									
								
								dns_test.go
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								dns_test.go
									
									
									
									
									
								
							| @ -2,16 +2,16 @@ package headscale | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"net/netip" | ||||
| 
 | ||||
| 	"gopkg.in/check.v1" | ||||
| 	"inet.af/netaddr" | ||||
| 	"tailscale.com/tailcfg" | ||||
| 	"tailscale.com/types/dnstype" | ||||
| ) | ||||
| 
 | ||||
| func (s *Suite) TestMagicDNSRootDomains100(c *check.C) { | ||||
| 	prefixes := []netaddr.IPPrefix{ | ||||
| 		netaddr.MustParseIPPrefix("100.64.0.0/10"), | ||||
| 	prefixes := []netip.Prefix{ | ||||
| 		netip.MustParsePrefix("100.64.0.0/10"), | ||||
| 	} | ||||
| 	domains := generateMagicDNSRootDomains(prefixes) | ||||
| 
 | ||||
| @ -47,8 +47,8 @@ func (s *Suite) TestMagicDNSRootDomains100(c *check.C) { | ||||
| } | ||||
| 
 | ||||
| func (s *Suite) TestMagicDNSRootDomains172(c *check.C) { | ||||
| 	prefixes := []netaddr.IPPrefix{ | ||||
| 		netaddr.MustParseIPPrefix("172.16.0.0/16"), | ||||
| 	prefixes := []netip.Prefix{ | ||||
| 		netip.MustParsePrefix("172.16.0.0/16"), | ||||
| 	} | ||||
| 	domains := generateMagicDNSRootDomains(prefixes) | ||||
| 
 | ||||
| @ -75,8 +75,8 @@ func (s *Suite) TestMagicDNSRootDomains172(c *check.C) { | ||||
| 
 | ||||
| // Happens when netmask is a multiple of 4 bits (sounds likely). | ||||
| func (s *Suite) TestMagicDNSRootDomainsIPv6Single(c *check.C) { | ||||
| 	prefixes := []netaddr.IPPrefix{ | ||||
| 		netaddr.MustParseIPPrefix("fd7a:115c:a1e0::/48"), | ||||
| 	prefixes := []netip.Prefix{ | ||||
| 		netip.MustParsePrefix("fd7a:115c:a1e0::/48"), | ||||
| 	} | ||||
| 	domains := generateMagicDNSRootDomains(prefixes) | ||||
| 
 | ||||
| @ -89,8 +89,8 @@ func (s *Suite) TestMagicDNSRootDomainsIPv6Single(c *check.C) { | ||||
| } | ||||
| 
 | ||||
| func (s *Suite) TestMagicDNSRootDomainsIPv6SingleMultiple(c *check.C) { | ||||
| 	prefixes := []netaddr.IPPrefix{ | ||||
| 		netaddr.MustParseIPPrefix("fd7a:115c:a1e0::/50"), | ||||
| 	prefixes := []netip.Prefix{ | ||||
| 		netip.MustParsePrefix("fd7a:115c:a1e0::/50"), | ||||
| 	} | ||||
| 	domains := generateMagicDNSRootDomains(prefixes) | ||||
| 
 | ||||
| @ -165,7 +165,7 @@ func (s *Suite) TestDNSConfigMapResponseWithMagicDNS(c *check.C) { | ||||
| 		NamespaceID:    namespaceShared1.ID, | ||||
| 		Namespace:      *namespaceShared1, | ||||
| 		RegisterMethod: RegisterMethodAuthKey, | ||||
| 		IPAddresses:    []netaddr.IP{netaddr.MustParseIP("100.64.0.1")}, | ||||
| 		IPAddresses:    []netip.Addr{netip.MustParseAddr("100.64.0.1")}, | ||||
| 		AuthKeyID:      uint(preAuthKeyInShared1.ID), | ||||
| 	} | ||||
| 	app.db.Save(machineInShared1) | ||||
| @ -182,7 +182,7 @@ func (s *Suite) TestDNSConfigMapResponseWithMagicDNS(c *check.C) { | ||||
| 		NamespaceID:    namespaceShared2.ID, | ||||
| 		Namespace:      *namespaceShared2, | ||||
| 		RegisterMethod: RegisterMethodAuthKey, | ||||
| 		IPAddresses:    []netaddr.IP{netaddr.MustParseIP("100.64.0.2")}, | ||||
| 		IPAddresses:    []netip.Addr{netip.MustParseAddr("100.64.0.2")}, | ||||
| 		AuthKeyID:      uint(preAuthKeyInShared2.ID), | ||||
| 	} | ||||
| 	app.db.Save(machineInShared2) | ||||
| @ -199,7 +199,7 @@ func (s *Suite) TestDNSConfigMapResponseWithMagicDNS(c *check.C) { | ||||
| 		NamespaceID:    namespaceShared3.ID, | ||||
| 		Namespace:      *namespaceShared3, | ||||
| 		RegisterMethod: RegisterMethodAuthKey, | ||||
| 		IPAddresses:    []netaddr.IP{netaddr.MustParseIP("100.64.0.3")}, | ||||
| 		IPAddresses:    []netip.Addr{netip.MustParseAddr("100.64.0.3")}, | ||||
| 		AuthKeyID:      uint(preAuthKeyInShared3.ID), | ||||
| 	} | ||||
| 	app.db.Save(machineInShared3) | ||||
| @ -216,7 +216,7 @@ func (s *Suite) TestDNSConfigMapResponseWithMagicDNS(c *check.C) { | ||||
| 		NamespaceID:    namespaceShared1.ID, | ||||
| 		Namespace:      *namespaceShared1, | ||||
| 		RegisterMethod: RegisterMethodAuthKey, | ||||
| 		IPAddresses:    []netaddr.IP{netaddr.MustParseIP("100.64.0.4")}, | ||||
| 		IPAddresses:    []netip.Addr{netip.MustParseAddr("100.64.0.4")}, | ||||
| 		AuthKeyID:      uint(PreAuthKey2InShared1.ID), | ||||
| 	} | ||||
| 	app.db.Save(machine2InShared1) | ||||
| @ -308,7 +308,7 @@ func (s *Suite) TestDNSConfigMapResponseWithoutMagicDNS(c *check.C) { | ||||
| 		NamespaceID:    namespaceShared1.ID, | ||||
| 		Namespace:      *namespaceShared1, | ||||
| 		RegisterMethod: RegisterMethodAuthKey, | ||||
| 		IPAddresses:    []netaddr.IP{netaddr.MustParseIP("100.64.0.1")}, | ||||
| 		IPAddresses:    []netip.Addr{netip.MustParseAddr("100.64.0.1")}, | ||||
| 		AuthKeyID:      uint(preAuthKeyInShared1.ID), | ||||
| 	} | ||||
| 	app.db.Save(machineInShared1) | ||||
| @ -325,7 +325,7 @@ func (s *Suite) TestDNSConfigMapResponseWithoutMagicDNS(c *check.C) { | ||||
| 		NamespaceID:    namespaceShared2.ID, | ||||
| 		Namespace:      *namespaceShared2, | ||||
| 		RegisterMethod: RegisterMethodAuthKey, | ||||
| 		IPAddresses:    []netaddr.IP{netaddr.MustParseIP("100.64.0.2")}, | ||||
| 		IPAddresses:    []netip.Addr{netip.MustParseAddr("100.64.0.2")}, | ||||
| 		AuthKeyID:      uint(preAuthKeyInShared2.ID), | ||||
| 	} | ||||
| 	app.db.Save(machineInShared2) | ||||
| @ -342,7 +342,7 @@ func (s *Suite) TestDNSConfigMapResponseWithoutMagicDNS(c *check.C) { | ||||
| 		NamespaceID:    namespaceShared3.ID, | ||||
| 		Namespace:      *namespaceShared3, | ||||
| 		RegisterMethod: RegisterMethodAuthKey, | ||||
| 		IPAddresses:    []netaddr.IP{netaddr.MustParseIP("100.64.0.3")}, | ||||
| 		IPAddresses:    []netip.Addr{netip.MustParseAddr("100.64.0.3")}, | ||||
| 		AuthKeyID:      uint(preAuthKeyInShared3.ID), | ||||
| 	} | ||||
| 	app.db.Save(machineInShared3) | ||||
| @ -359,7 +359,7 @@ func (s *Suite) TestDNSConfigMapResponseWithoutMagicDNS(c *check.C) { | ||||
| 		NamespaceID:    namespaceShared1.ID, | ||||
| 		Namespace:      *namespaceShared1, | ||||
| 		RegisterMethod: RegisterMethodAuthKey, | ||||
| 		IPAddresses:    []netaddr.IP{netaddr.MustParseIP("100.64.0.4")}, | ||||
| 		IPAddresses:    []netip.Addr{netip.MustParseAddr("100.64.0.4")}, | ||||
| 		AuthKeyID:      uint(preAuthKey2InShared1.ID), | ||||
| 	} | ||||
| 	app.db.Save(machine2InShared1) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user