@@ -26,9 +26,17 @@ var defaultNameservers = []string{
2626// recursiveNameservers are used to pre-check DNS propagation.
2727var recursiveNameservers = getNameservers (defaultResolvConf , defaultNameservers )
2828
29- // networkStack is used to define which IP stack will be used. The default is
30- // both IPv4 and IPv6. Set to "ipv4" for IPv4 only, and "ipv6" for IPv6 only.
31- var networkStack = "both"
29+ type networkStack int
30+
31+ const (
32+ defaultNetworkStack networkStack = iota
33+ ipv4Only
34+ ipv6Only
35+ )
36+
37+ // currentNetworkStack is used to define which IP stack will be used. The default is
38+ // both IPv4 and IPv6. Set to ipv4Only or ipv6Only to select either version.
39+ var currentNetworkStack = defaultNetworkStack
3240
3341// soaCacheEntry holds a cached SOA record (only selected fields).
3442type soaCacheEntry struct {
@@ -74,10 +82,15 @@ func AddRecursiveNameservers(nameservers []string) ChallengeOption {
7482// SetNetworkStack defines the IP stack that will be used for DNS queries.
7583// Accepts "both", "ipv4", or "ipv6".
7684func SetNetworkStack (network string ) {
77- if network == "ipv4" || network == "ipv6" {
78- networkStack = network
79- } else {
80- networkStack = "both"
85+ switch network {
86+ case "ipv4" :
87+ currentNetworkStack = ipv4Only
88+
89+ case "ipv6" :
90+ currentNetworkStack = ipv6Only
91+
92+ default :
93+ currentNetworkStack = defaultNetworkStack
8194 }
8295}
8396
@@ -270,10 +283,10 @@ func getNetwork(proto string) string {
270283 // the [net.Dialer] (https://github.com/miekg/dns/blob/fe20d5d/client.go#L119-L141).
271284 // And the [net.Dialer] accepts strings such as "udp4" or "tcp6"
272285 // (https://cs.opensource.google/go/go/+/refs/tags/go1.18.9:src/net/dial.go;l=167-182).
273- if networkStack == "ipv4" {
286+ if currentNetworkStack == ipv4Only {
274287 return proto + "4"
275288 }
276- if networkStack == "ipv6" {
289+ if currentNetworkStack == ipv6Only {
277290 return proto + "6"
278291 }
279292 return proto
0 commit comments