summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLoyalsoldier <[email protected]>2023-10-14 21:07:06 +0800
committerLoyalsoldier <[email protected]>2023-10-14 21:07:06 +0800
commitdb04afeb8cfd0351a9c5d32f1a5362ea18a4e48d (patch)
tree290df5a13fc0a1f1d67fb832c957a53616b64eb1 /lib
parenta1bd197275580f949ed29d5d4b95eb6667a31c95 (diff)
Feat: support IPv4 address in IPv6 format
This change will convert 4in6 IPv6 addresses to IPv4 addresses
Diffstat (limited to 'lib')
-rw-r--r--lib/lib.go14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/lib.go b/lib/lib.go
index d1d23abd..1f039051 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