From db04afeb8cfd0351a9c5d32f1a5362ea18a4e48d Mon Sep 17 00:00:00 2001 From: Loyalsoldier <10487845+Loyalsoldier@users.noreply.github.com> Date: Sat, 14 Oct 2023 21:07:06 +0800 Subject: [PATCH] Feat: support IPv4 address in IPv6 format This change will convert 4in6 IPv6 addresses to IPv4 addresses --- lib/lib.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/lib.go b/lib/lib.go index d1d23abdb9..1f03905182 100644 --- a/lib/lib.go +++ b/lib/lib.go @@ -167,8 +167,8 @@ func (e *Entry) processPrefix(src any) (*netip.Prefix, IPType, error) { _, network, err := net.ParseCIDR(src) switch err { case nil: - prefix, ok := netipx.FromStdIPNet(network) - if !ok { + prefix, err2 := netip.ParsePrefix(network.String()) + if err2 != nil { return nil, "", ErrInvalidIPNet } ip := prefix.Addr() @@ -190,6 +190,16 @@ func (e *Entry) processPrefix(src any) (*netip.Prefix, IPType, error) { case ip.Is4(): prefix := netip.PrefixFrom(ip, 32) return &prefix, IPv4, nil + case ip.Is4In6(): + _, network, err2 := net.ParseCIDR(src + "/128") + if err2 != nil { + return nil, "", ErrInvalidIPNet + } + prefix, err3 := netip.ParsePrefix(network.String()) + if err3 != nil { + return nil, "", ErrInvalidIPNet + } + return &prefix, IPv4, nil case ip.Is6(): prefix := netip.PrefixFrom(ip, 128) return &prefix, IPv6, nil