hs-test: rename address allocator
Type: test Change-Id: I1745719315d4e0785df5a03aa4312f84c40cb18f Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
This commit is contained in:

committed by
Florin Coras

parent
d5b6f9c0ef
commit
3a910ab768
42
extras/hs-test/address_allocator.go
Normal file
42
extras/hs-test/address_allocator.go
Normal file
@ -0,0 +1,42 @@
|
||||
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
|
||||
}
|
@ -2,7 +2,6 @@ package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"time"
|
||||
@ -25,15 +24,15 @@ var nConfiguredCpus = flag.Int("cpus", 1, "number of CPUs assigned to vpp")
|
||||
|
||||
type HstSuite struct {
|
||||
suite.Suite
|
||||
containers map[string]*Container
|
||||
volumes []string
|
||||
netConfigs []NetConfig
|
||||
netInterfaces map[string]*NetInterface
|
||||
addresser *Addresser
|
||||
testIds map[string]string
|
||||
cpuAllocator *CpuAllocatorT
|
||||
cpuContexts []*CpuContext
|
||||
cpuPerVpp int
|
||||
containers map[string]*Container
|
||||
volumes []string
|
||||
netConfigs []NetConfig
|
||||
netInterfaces map[string]*NetInterface
|
||||
ip4AddrAllocator *Ip4AddressAllocator
|
||||
testIds map[string]string
|
||||
cpuAllocator *CpuAllocatorT
|
||||
cpuContexts []*CpuContext
|
||||
cpuPerVpp int
|
||||
}
|
||||
|
||||
func (s *HstSuite) SetupSuite() {
|
||||
@ -229,7 +228,7 @@ func (s *HstSuite) loadNetworkTopology(topologyName string) {
|
||||
s.T().Fatalf("unmarshal error: %v", err)
|
||||
}
|
||||
|
||||
s.addresser = newAddresser(s)
|
||||
s.ip4AddrAllocator = NewIp4AddressAllocator()
|
||||
s.netInterfaces = make(map[string]*NetInterface)
|
||||
for _, elem := range yamlTopo.Devices {
|
||||
switch elem["type"].(string) {
|
||||
@ -243,7 +242,7 @@ func (s *HstSuite) loadNetworkTopology(topologyName string) {
|
||||
}
|
||||
case Veth, Tap:
|
||||
{
|
||||
if netIf, err := newNetworkInterface(elem, s.addresser); err == nil {
|
||||
if netIf, err := newNetworkInterface(elem, s.ip4AddrAllocator); err == nil {
|
||||
s.netConfigs = append(s.netConfigs, netIf)
|
||||
s.netInterfaces[netIf.Name()] = netIf
|
||||
} else {
|
||||
@ -298,44 +297,3 @@ func (s *HstSuite) getTestId() string {
|
||||
|
||||
return s.testIds[testName]
|
||||
}
|
||||
|
||||
type AddressCounter = int
|
||||
|
||||
type Addresser struct {
|
||||
networks map[int]AddressCounter
|
||||
suite *HstSuite
|
||||
}
|
||||
|
||||
func (a *Addresser) addNetwork(networkNumber int) {
|
||||
a.networks[networkNumber] = 1
|
||||
}
|
||||
|
||||
func (a *Addresser) newIp4Address(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 newAddresser(suite *HstSuite) *Addresser {
|
||||
var addresser = new(Addresser)
|
||||
addresser.suite = suite
|
||||
addresser.networks = make(map[int]AddressCounter)
|
||||
addresser.addNetwork(0)
|
||||
return addresser
|
||||
}
|
||||
|
@ -32,8 +32,8 @@ type (
|
||||
|
||||
NetInterface struct {
|
||||
NetConfigBase
|
||||
addresser *Addresser
|
||||
ip4Address string // this will have form 10.10.10.1/24
|
||||
ip4AddrAllocator *Ip4AddressAllocator
|
||||
ip4Address string
|
||||
index InterfaceIndex
|
||||
hwAddress MacAddress
|
||||
networkNamespace string
|
||||
@ -72,10 +72,10 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
func newNetworkInterface(cfg NetDevConfig, a *Addresser) (*NetInterface, error) {
|
||||
func newNetworkInterface(cfg NetDevConfig, a *Ip4AddressAllocator) (*NetInterface, error) {
|
||||
var newInterface *NetInterface = &NetInterface{}
|
||||
var err error
|
||||
newInterface.addresser = a
|
||||
newInterface.ip4AddrAllocator = a
|
||||
newInterface.name = cfg["name"].(string)
|
||||
newInterface.networkNumber = DEFAULT_NETWORK_NUM
|
||||
|
||||
@ -98,7 +98,7 @@ func newNetworkInterface(cfg NetDevConfig, a *Addresser) (*NetInterface, error)
|
||||
if n, ok := ip.(NetDevConfig)["network"]; ok {
|
||||
newInterface.networkNumber = n.(int)
|
||||
}
|
||||
newInterface.ip4Address, err = newInterface.addresser.newIp4Address(
|
||||
newInterface.ip4Address, err = newInterface.ip4AddrAllocator.NewIp4InterfaceAddress(
|
||||
newInterface.networkNumber,
|
||||
)
|
||||
if err != nil {
|
||||
|
@ -236,7 +236,7 @@ func (vpp *VppInstance) createAfPacket(
|
||||
if veth.addressWithPrefix() == (AddressWithPrefix{}) {
|
||||
var err error
|
||||
var ip4Address string
|
||||
if ip4Address, err = veth.addresser.newIp4Address(veth.peer.networkNumber); err == nil {
|
||||
if ip4Address, err = veth.ip4AddrAllocator.NewIp4InterfaceAddress(veth.peer.networkNumber); err == nil {
|
||||
veth.ip4Address = ip4Address
|
||||
} else {
|
||||
return 0, err
|
||||
|
Reference in New Issue
Block a user