1
0
mirror of https://github.com/MetaCubeX/mihomo.git synced 2025-09-20 04:25:59 +08:00

chore: allow setting cache-max-size in dns section

This commit is contained in:
wwqgtxx
2025-07-27 10:31:12 +08:00
parent c3a3009a8c
commit 66fd5c9f0c
3 changed files with 14 additions and 10 deletions

View File

@ -156,6 +156,7 @@ type DNS struct {
EnhancedMode C.DNSMode EnhancedMode C.DNSMode
DefaultNameserver []dns.NameServer DefaultNameserver []dns.NameServer
CacheAlgorithm string CacheAlgorithm string
CacheMaxSize int
FakeIPRange *fakeip.Pool FakeIPRange *fakeip.Pool
Hosts *trie.DomainTrie[resolver.HostValue] Hosts *trie.DomainTrie[resolver.HostValue]
NameServerPolicy []dns.Policy NameServerPolicy []dns.Policy
@ -223,6 +224,7 @@ type RawDNS struct {
FakeIPFilterMode C.FilterMode `yaml:"fake-ip-filter-mode" json:"fake-ip-filter-mode"` FakeIPFilterMode C.FilterMode `yaml:"fake-ip-filter-mode" json:"fake-ip-filter-mode"`
DefaultNameserver []string `yaml:"default-nameserver" json:"default-nameserver"` DefaultNameserver []string `yaml:"default-nameserver" json:"default-nameserver"`
CacheAlgorithm string `yaml:"cache-algorithm" json:"cache-algorithm"` CacheAlgorithm string `yaml:"cache-algorithm" json:"cache-algorithm"`
CacheMaxSize int `yaml:"cache-max-size" json:"cache-max-size"`
NameServerPolicy *orderedmap.OrderedMap[string, any] `yaml:"nameserver-policy" json:"nameserver-policy"` NameServerPolicy *orderedmap.OrderedMap[string, any] `yaml:"nameserver-policy" json:"nameserver-policy"`
ProxyServerNameserver []string `yaml:"proxy-server-nameserver" json:"proxy-server-nameserver"` ProxyServerNameserver []string `yaml:"proxy-server-nameserver" json:"proxy-server-nameserver"`
DirectNameServer []string `yaml:"direct-nameserver" json:"direct-nameserver"` DirectNameServer []string `yaml:"direct-nameserver" json:"direct-nameserver"`
@ -1352,6 +1354,8 @@ func parseDNS(rawCfg *RawConfig, hosts *trie.DomainTrie[resolver.HostValue], rul
IPv6: cfg.IPv6, IPv6: cfg.IPv6,
UseSystemHosts: cfg.UseSystemHosts, UseSystemHosts: cfg.UseSystemHosts,
EnhancedMode: cfg.EnhancedMode, EnhancedMode: cfg.EnhancedMode,
CacheAlgorithm: cfg.CacheAlgorithm,
CacheMaxSize: cfg.CacheMaxSize,
} }
var err error var err error
if dnsCfg.NameServer, err = parseNameServer(cfg.NameServer, cfg.RespectRules, cfg.PreferH3); err != nil { if dnsCfg.NameServer, err = parseNameServer(cfg.NameServer, cfg.RespectRules, cfg.PreferH3); err != nil {
@ -1485,12 +1489,6 @@ func parseDNS(rawCfg *RawConfig, hosts *trie.DomainTrie[resolver.HostValue], rul
dnsCfg.Hosts = hosts dnsCfg.Hosts = hosts
} }
if cfg.CacheAlgorithm == "" || cfg.CacheAlgorithm == "lru" {
dnsCfg.CacheAlgorithm = "lru"
} else {
dnsCfg.CacheAlgorithm = "arc"
}
return dnsCfg, nil return dnsCfg, nil
} }

View File

@ -459,13 +459,18 @@ type Config struct {
Hosts *trie.DomainTrie[resolver.HostValue] Hosts *trie.DomainTrie[resolver.HostValue]
Policy []Policy Policy []Policy
CacheAlgorithm string CacheAlgorithm string
CacheMaxSize int
} }
func (config Config) newCache() dnsCache { func (config Config) newCache() dnsCache {
if config.CacheAlgorithm == "" || config.CacheAlgorithm == "lru" { if config.CacheMaxSize == 0 {
return lru.New(lru.WithSize[string, *D.Msg](4096), lru.WithStale[string, *D.Msg](true)) config.CacheMaxSize = 4096
} else { }
return arc.New(arc.WithSize[string, *D.Msg](4096)) switch config.CacheAlgorithm {
case "arc":
return arc.New(arc.WithSize[string, *D.Msg](config.CacheMaxSize))
default:
return lru.New(lru.WithSize[string, *D.Msg](config.CacheMaxSize), lru.WithStale[string, *D.Msg](true))
} }
} }

View File

@ -260,6 +260,7 @@ func updateDNS(c *config.DNS, generalIPv6 bool) {
DirectServer: c.DirectNameServer, DirectServer: c.DirectNameServer,
DirectFollowPolicy: c.DirectFollowPolicy, DirectFollowPolicy: c.DirectFollowPolicy,
CacheAlgorithm: c.CacheAlgorithm, CacheAlgorithm: c.CacheAlgorithm,
CacheMaxSize: c.CacheMaxSize,
} }
r := dns.NewResolver(cfg) r := dns.NewResolver(cfg)