3a910ab768
Type: test Change-Id: I1745719315d4e0785df5a03aa4312f84c40cb18f Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
43 lines
1014 B
Go
43 lines
1014 B
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
type AddressCounter = int
|
|
|
|
type Ip4AddressAllocator struct {
|
|
networks map[int]AddressCounter
|
|
}
|
|
|
|
func (a *Ip4AddressAllocator) AddNetwork(networkNumber int) {
|
|
a.networks[networkNumber] = 1
|
|
}
|
|
|
|
func (a *Ip4AddressAllocator) NewIp4InterfaceAddress(inputNetworkNumber ...int) (string, error) {
|
|
var networkNumber int = 0
|
|
if len(inputNetworkNumber) > 0 {
|
|
networkNumber = inputNetworkNumber[0]
|
|
}
|
|
|
|
if _, ok := a.networks[networkNumber]; !ok {
|
|
a.AddNetwork(networkNumber)
|
|
}
|
|
|
|
numberOfAddresses := a.networks[networkNumber]
|
|
|
|
if numberOfAddresses == 254 {
|
|
return "", fmt.Errorf("no available IPv4 addresses")
|
|
}
|
|
|
|
address := fmt.Sprintf("10.10.%v.%v/24", networkNumber, numberOfAddresses)
|
|
a.networks[networkNumber] = numberOfAddresses + 1
|
|
|
|
return address, nil
|
|
}
|
|
|
|
func NewIp4AddressAllocator() *Ip4AddressAllocator {
|
|
var ip4AddrAllocator = new(Ip4AddressAllocator)
|
|
ip4AddrAllocator.networks = make(map[int]AddressCounter)
|
|
ip4AddrAllocator.AddNetwork(0)
|
|
return ip4AddrAllocator
|
|
}
|