| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- // Copyright 2018-present the CoreDHCP Authors. All rights reserved
- // This source code is licensed under the MIT license found in the
- // LICENSE file in the root directory of this source tree.
- // Package allocators provides the interface and the algorithm(s) for allocation of ipv6
- // prefixes of various sizes within a larger prefix.
- // There are many many parallels with memory allocation.
- package allocators
- import (
- "fmt"
- "net"
- )
- // Allocator is the interface to the address allocator. It only finds and
- // allocates blocks and is not concerned with lease-specific questions like
- // expiration (ie garbage collection needs to be handled separately)
- type Allocator interface {
- // Allocate finds a suitable prefix of the given size and returns it.
- //
- // hint is a prefix, which the client desires especially, and that the
- // allocator MAY try to return; the allocator SHOULD try to return a prefix of
- // the same size as the given hint prefix. The allocator MUST NOT return an
- // error if a prefix was successfully assigned, even if the prefix has nothing
- // in common with the hinted prefix
- Allocate(hint net.IPNet) (net.IPNet, error)
- // Free returns the prefix containing the given network to the pool
- //
- // Free may return a DoubleFreeError if the prefix being returned was not
- // previously allocated
- Free(net.IPNet) error
- }
- // ErrDoubleFree is an error type returned by Allocator.Free() when a
- // non-allocated block is passed
- type ErrDoubleFree struct {
- Loc net.IPNet
- }
- // String returns a human-readable error message for a DoubleFree error
- func (err *ErrDoubleFree) Error() string {
- return fmt.Sprint("Attempted to free unallocated block at ", err.Loc.String())
- }
|