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:
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
Reference in New Issue
Block a user