add all files from Hong
This commit is contained in:
48
plugins/allocators/allocator.go
Normal file
48
plugins/allocators/allocator.go
Normal file
@@ -0,0 +1,48 @@
|
||||
// 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 (
|
||||
"errors"
|
||||
"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())
|
||||
}
|
||||
|
||||
// ErrNoAddrAvail is returned when we can't allocate an IP because there's no unallocated space left
|
||||
var ErrNoAddrAvail = errors.New("no address available to allocate")
|
||||
Reference in New Issue
Block a user