package ipam import ( "fmt" "net/netip" ) type Service struct{} func NewService() *Service { return &Service{} } func (s *Service) Allocate(cidr string, offset int) (string, error) { prefix, err := netip.ParsePrefix(cidr) if err != nil { return "", err } address := prefix.Addr().Next() for i := 1; i < offset; i++ { address = address.Next() } return fmt.Sprintf("%s/32", address.String()), nil }