clampip.go 622 B

123456789101112131415161718192021222324252627282930313233
  1. package internal
  2. import "net/netip"
  3. func ClampIP(addr netip.Addr) (netip.Prefix, bool) {
  4. switch {
  5. case addr.Is4():
  6. result, err := addr.Prefix(24)
  7. if err != nil {
  8. return netip.Prefix{}, false
  9. }
  10. return result, true
  11. case addr.Is4In6():
  12. // Extract the IPv4 address from IPv4-mapped IPv6 and clamp it
  13. ipv4 := addr.Unmap()
  14. result, err := ipv4.Prefix(24)
  15. if err != nil {
  16. return netip.Prefix{}, false
  17. }
  18. return result, true
  19. case addr.Is6():
  20. result, err := addr.Prefix(48)
  21. if err != nil {
  22. return netip.Prefix{}, false
  23. }
  24. return result, true
  25. default:
  26. return netip.Prefix{}, false
  27. }
  28. }