From bffe47a9746c286c982091c21e61a84b1cd20841 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Thu, 26 Oct 2023 10:39:54 +0800 Subject: [PATCH] chore: netip.Prefix should not using pointer --- component/dialer/bind.go | 2 +- component/fakeip/pool.go | 8 ++++---- component/fakeip/pool_test.go | 24 ++++++++++++------------ component/iface/iface.go | 24 ++++++++++++------------ config/config.go | 12 ++++++------ dns/dhcp.go | 2 +- dns/filters.go | 2 +- dns/resolver.go | 2 +- rules/common/ipcidr.go | 4 ++-- 9 files changed, 40 insertions(+), 40 deletions(-) diff --git a/component/dialer/bind.go b/component/dialer/bind.go index 4accabb3..c90212ef 100644 --- a/component/dialer/bind.go +++ b/component/dialer/bind.go @@ -15,7 +15,7 @@ func LookupLocalAddrFromIfaceName(ifaceName string, network string, destination return nil, err } - var addr *netip.Prefix + var addr netip.Prefix switch network { case "udp4", "tcp4": addr, err = ifaceObj.PickIPv4Addr(destination) diff --git a/component/fakeip/pool.go b/component/fakeip/pool.go index ee11fedd..9b51929e 100644 --- a/component/fakeip/pool.go +++ b/component/fakeip/pool.go @@ -36,7 +36,7 @@ type Pool struct { cycle bool mux sync.Mutex host *trie.DomainTrie[struct{}] - ipnet *netip.Prefix + ipnet netip.Prefix store store } @@ -91,7 +91,7 @@ func (p *Pool) Broadcast() netip.Addr { } // IPNet return raw ipnet -func (p *Pool) IPNet() *netip.Prefix { +func (p *Pool) IPNet() netip.Prefix { return p.ipnet } @@ -153,7 +153,7 @@ func (p *Pool) restoreState() { } type Options struct { - IPNet *netip.Prefix + IPNet netip.Prefix Host *trie.DomainTrie[struct{}] // Size sets the maximum number of entries in memory @@ -171,7 +171,7 @@ func New(options Options) (*Pool, error) { hostAddr = options.IPNet.Masked().Addr() gateway = hostAddr.Next() first = gateway.Next().Next().Next() // default start with 198.18.0.4 - last = nnip.UnMasked(*options.IPNet) + last = nnip.UnMasked(options.IPNet) ) if !options.IPNet.IsValid() || !first.IsValid() || !first.Less(last) { diff --git a/component/fakeip/pool_test.go b/component/fakeip/pool_test.go index ae343f96..183a7185 100644 --- a/component/fakeip/pool_test.go +++ b/component/fakeip/pool_test.go @@ -51,7 +51,7 @@ func createCachefileStore(options Options) (*Pool, string, error) { func TestPool_Basic(t *testing.T) { ipnet := netip.MustParsePrefix("192.168.0.0/28") pools, tempfile, err := createPools(Options{ - IPNet: &ipnet, + IPNet: ipnet, Size: 10, }) assert.Nil(t, err) @@ -79,7 +79,7 @@ func TestPool_Basic(t *testing.T) { func TestPool_BasicV6(t *testing.T) { ipnet := netip.MustParsePrefix("2001:4860:4860::8888/118") pools, tempfile, err := createPools(Options{ - IPNet: &ipnet, + IPNet: ipnet, Size: 10, }) assert.Nil(t, err) @@ -107,7 +107,7 @@ func TestPool_BasicV6(t *testing.T) { func TestPool_Case_Insensitive(t *testing.T) { ipnet := netip.MustParsePrefix("192.168.0.1/29") pools, tempfile, err := createPools(Options{ - IPNet: &ipnet, + IPNet: ipnet, Size: 10, }) assert.Nil(t, err) @@ -128,7 +128,7 @@ func TestPool_Case_Insensitive(t *testing.T) { func TestPool_CycleUsed(t *testing.T) { ipnet := netip.MustParsePrefix("192.168.0.16/28") pools, tempfile, err := createPools(Options{ - IPNet: &ipnet, + IPNet: ipnet, Size: 10, }) assert.Nil(t, err) @@ -152,7 +152,7 @@ func TestPool_Skip(t *testing.T) { tree := trie.New[struct{}]() tree.Insert("example.com", struct{}{}) pools, tempfile, err := createPools(Options{ - IPNet: &ipnet, + IPNet: ipnet, Size: 10, Host: tree, }) @@ -168,7 +168,7 @@ func TestPool_Skip(t *testing.T) { func TestPool_MaxCacheSize(t *testing.T) { ipnet := netip.MustParsePrefix("192.168.0.1/24") pool, _ := New(Options{ - IPNet: &ipnet, + IPNet: ipnet, Size: 2, }) @@ -183,7 +183,7 @@ func TestPool_MaxCacheSize(t *testing.T) { func TestPool_DoubleMapping(t *testing.T) { ipnet := netip.MustParsePrefix("192.168.0.1/24") pool, _ := New(Options{ - IPNet: &ipnet, + IPNet: ipnet, Size: 2, }) @@ -213,7 +213,7 @@ func TestPool_DoubleMapping(t *testing.T) { func TestPool_Clone(t *testing.T) { ipnet := netip.MustParsePrefix("192.168.0.1/24") pool, _ := New(Options{ - IPNet: &ipnet, + IPNet: ipnet, Size: 2, }) @@ -223,7 +223,7 @@ func TestPool_Clone(t *testing.T) { assert.True(t, last == netip.AddrFrom4([4]byte{192, 168, 0, 5})) newPool, _ := New(Options{ - IPNet: &ipnet, + IPNet: ipnet, Size: 2, }) newPool.CloneFrom(pool) @@ -236,7 +236,7 @@ func TestPool_Clone(t *testing.T) { func TestPool_Error(t *testing.T) { ipnet := netip.MustParsePrefix("192.168.0.1/31") _, err := New(Options{ - IPNet: &ipnet, + IPNet: ipnet, Size: 10, }) @@ -246,7 +246,7 @@ func TestPool_Error(t *testing.T) { func TestPool_FlushFileCache(t *testing.T) { ipnet := netip.MustParsePrefix("192.168.0.1/28") pools, tempfile, err := createPools(Options{ - IPNet: &ipnet, + IPNet: ipnet, Size: 10, }) assert.Nil(t, err) @@ -278,7 +278,7 @@ func TestPool_FlushFileCache(t *testing.T) { func TestPool_FlushMemoryCache(t *testing.T) { ipnet := netip.MustParsePrefix("192.168.0.1/28") pool, _ := New(Options{ - IPNet: &ipnet, + IPNet: ipnet, Size: 10, }) diff --git a/component/iface/iface.go b/component/iface/iface.go index c32b65ab..03051cb3 100644 --- a/component/iface/iface.go +++ b/component/iface/iface.go @@ -13,7 +13,7 @@ import ( type Interface struct { Index int Name string - Addrs []*netip.Prefix + Addrs []netip.Prefix HardwareAddr net.HardwareAddr } @@ -43,7 +43,7 @@ func ResolveInterface(name string) (*Interface, error) { continue } - ipNets := make([]*netip.Prefix, 0, len(addrs)) + ipNets := make([]netip.Prefix, 0, len(addrs)) for _, addr := range addrs { ipNet := addr.(*net.IPNet) ip, _ := netip.AddrFromSlice(ipNet.IP) @@ -59,7 +59,7 @@ func ResolveInterface(name string) (*Interface, error) { } pf := netip.PrefixFrom(ip, ones) - ipNets = append(ipNets, &pf) + ipNets = append(ipNets, pf) } r[iface.Name] = &Interface{ @@ -89,27 +89,27 @@ func FlushCache() { interfaces.Reset() } -func (iface *Interface) PickIPv4Addr(destination netip.Addr) (*netip.Prefix, error) { - return iface.pickIPAddr(destination, func(addr *netip.Prefix) bool { +func (iface *Interface) PickIPv4Addr(destination netip.Addr) (netip.Prefix, error) { + return iface.pickIPAddr(destination, func(addr netip.Prefix) bool { return addr.Addr().Is4() }) } -func (iface *Interface) PickIPv6Addr(destination netip.Addr) (*netip.Prefix, error) { - return iface.pickIPAddr(destination, func(addr *netip.Prefix) bool { +func (iface *Interface) PickIPv6Addr(destination netip.Addr) (netip.Prefix, error) { + return iface.pickIPAddr(destination, func(addr netip.Prefix) bool { return addr.Addr().Is6() }) } -func (iface *Interface) pickIPAddr(destination netip.Addr, accept func(addr *netip.Prefix) bool) (*netip.Prefix, error) { - var fallback *netip.Prefix +func (iface *Interface) pickIPAddr(destination netip.Addr, accept func(addr netip.Prefix) bool) (netip.Prefix, error) { + var fallback netip.Prefix for _, addr := range iface.Addrs { if !accept(addr) { continue } - if fallback == nil && !addr.Addr().IsLinkLocalUnicast() { + if !fallback.IsValid() && !addr.Addr().IsLinkLocalUnicast() { fallback = addr if !destination.IsValid() { @@ -122,8 +122,8 @@ func (iface *Interface) pickIPAddr(destination netip.Addr, accept func(addr *net } } - if fallback == nil { - return nil, ErrAddrNotFound + if !fallback.IsValid() { + return netip.Prefix{}, ErrAddrNotFound } return fallback, nil diff --git a/config/config.go b/config/config.go index 994f897d..ed2505d9 100644 --- a/config/config.go +++ b/config/config.go @@ -122,7 +122,7 @@ type DNS struct { type FallbackFilter struct { GeoIP bool `yaml:"geoip"` GeoIPCode string `yaml:"geoip-code"` - IPCIDR []*netip.Prefix `yaml:"ipcidr"` + IPCIDR []netip.Prefix `yaml:"ipcidr"` Domain []string `yaml:"domain"` GeoSite []*router.DomainMatcher `yaml:"geosite"` } @@ -1148,15 +1148,15 @@ func parseNameServerPolicy(nsPolicy map[string]any, ruleProviders map[string]pro return policy, nil } -func parseFallbackIPCIDR(ips []string) ([]*netip.Prefix, error) { - var ipNets []*netip.Prefix +func parseFallbackIPCIDR(ips []string) ([]netip.Prefix, error) { + var ipNets []netip.Prefix for idx, ip := range ips { ipnet, err := netip.ParsePrefix(ip) if err != nil { return nil, fmt.Errorf("DNS FallbackIP[%d] format error: %s", idx, err.Error()) } - ipNets = append(ipNets, &ipnet) + ipNets = append(ipNets, ipnet) } return ipNets, nil @@ -1224,7 +1224,7 @@ func parseDNS(rawCfg *RawConfig, hosts *trie.DomainTrie[resolver.HostValue], rul IPv6: cfg.IPv6, EnhancedMode: cfg.EnhancedMode, FallbackFilter: FallbackFilter{ - IPCIDR: []*netip.Prefix{}, + IPCIDR: []netip.Prefix{}, GeoSite: []*router.DomainMatcher{}, }, } @@ -1298,7 +1298,7 @@ func parseDNS(rawCfg *RawConfig, hosts *trie.DomainTrie[resolver.HostValue], rul } pool, err := fakeip.New(fakeip.Options{ - IPNet: &fakeIPRange, + IPNet: fakeIPRange, Size: 1000, Host: host, Persistence: rawCfg.Profile.StoreFakeIP, diff --git a/dns/dhcp.go b/dns/dhcp.go index 2fa2e8a4..70f9aeeb 100644 --- a/dns/dhcp.go +++ b/dns/dhcp.go @@ -26,7 +26,7 @@ type dhcpClient struct { ifaceInvalidate time.Time dnsInvalidate time.Time - ifaceAddr *netip.Prefix + ifaceAddr netip.Prefix done chan struct{} clients []dnsClient err error diff --git a/dns/filters.go b/dns/filters.go index 47e7adcd..f7e953e8 100644 --- a/dns/filters.go +++ b/dns/filters.go @@ -45,7 +45,7 @@ func (gf *geoipFilter) Match(ip netip.Addr) bool { } type ipnetFilter struct { - ipnet *netip.Prefix + ipnet netip.Prefix } func (inf *ipnetFilter) Match(ip netip.Addr) bool { diff --git a/dns/resolver.go b/dns/resolver.go index 2851f012..d27f7bcc 100644 --- a/dns/resolver.go +++ b/dns/resolver.go @@ -398,7 +398,7 @@ type NameServer struct { type FallbackFilter struct { GeoIP bool GeoIPCode string - IPCIDR []*netip.Prefix + IPCIDR []netip.Prefix Domain []string GeoSite []*router.DomainMatcher } diff --git a/rules/common/ipcidr.go b/rules/common/ipcidr.go index 8ab6cf5a..4cdf9106 100644 --- a/rules/common/ipcidr.go +++ b/rules/common/ipcidr.go @@ -22,7 +22,7 @@ func WithIPCIDRNoResolve(noResolve bool) IPCIDROption { type IPCIDR struct { *Base - ipnet *netip.Prefix + ipnet netip.Prefix adapter string isSourceIP bool noResolveIP bool @@ -63,7 +63,7 @@ func NewIPCIDR(s string, adapter string, opts ...IPCIDROption) (*IPCIDR, error) ipcidr := &IPCIDR{ Base: &Base{}, - ipnet: &ipnet, + ipnet: ipnet, adapter: adapter, }