blob: 929f247da125a5d366acfbf3629502c6b35fb66d [file] [log] [blame]
/*
Copyright 2017 the original author or authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package abstract
import (
"errors"
"fmt"
)
const MAX_SLOTS int = 16
const MAX_PORTS int = 16
/*
Chassis is a model that takes up to 16 discreet OLT chassis as if it is a 16 slot OLT chassis
*/
type Chassis struct {
CLLI string
Slots [16]Slot
Rack int
Shelf int
AllocInfo PortAllocationInfo
}
type PortAllocationInfo struct {
// Current info on next port to be allocated
slot int
port int
outOfPorts bool
}
func (chassis *Chassis) NextPort() (*Port, error) {
info := &chassis.AllocInfo
if info.outOfPorts {
return nil, errors.New("Abstract chassis out of ports")
}
nextPort := &chassis.Slots[info.slot].Ports[info.port]
info.port++
if info.port == MAX_PORTS {
info.port = 0
info.slot++
if info.slot == MAX_SLOTS {
info.slot = 0
info.outOfPorts = true
}
}
return nextPort, nil
}
func (chassis *Chassis) PreProvisonONT(slotNumber int, portNumber int, ontNumber int, cTag uint32, sTag uint32, nasPortID string, circuitID string, techProfile string, speedProfile string) error {
if slotNumber > len(chassis.Slots) {
errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
return errors.New(errorMsg)
}
if portNumber > 16 {
errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
return errors.New(errorMsg)
}
if ontNumber > 64 {
errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
return errors.New(errorMsg)
}
err := chassis.Slots[slotNumber-1].Ports[portNumber-1].preProvisionOnt(ontNumber, cTag, sTag, nasPortID, circuitID, techProfile, speedProfile)
return err
}
func (chassis *Chassis) ActivateSerial(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
if slotNumber > len(chassis.Slots) {
errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
return errors.New(errorMsg)
}
if portNumber > 16 {
errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
return errors.New(errorMsg)
}
if ontNumber > 64 {
errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
return errors.New(errorMsg)
}
err := chassis.Slots[slotNumber-1].Ports[portNumber-1].activateSerial(ontNumber, serialNumber)
return err
}
func (chassis *Chassis) ActivateONTFull(slotNumber int, portNumber int, ontNumber int, serialNumber string, cTag uint32, sTag uint32, nasPortID string, circuitID string) error {
if slotNumber > len(chassis.Slots) {
errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
return errors.New(errorMsg)
}
if portNumber > 16 {
errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
return errors.New(errorMsg)
}
if ontNumber > 64 {
errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
return errors.New(errorMsg)
}
err := chassis.Slots[slotNumber-1].Ports[portNumber-1].provisionOntFull(ontNumber, serialNumber, cTag, sTag, nasPortID, circuitID)
return err
}
func (chassis *Chassis) ActivateONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
if slotNumber > len(chassis.Slots) {
errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
return errors.New(errorMsg)
}
if portNumber > 16 {
errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
return errors.New(errorMsg)
}
if ontNumber > 64 {
errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
return errors.New(errorMsg)
}
err := chassis.Slots[slotNumber-1].Ports[portNumber-1].provisionOnt(ontNumber, serialNumber)
return err
}
func (chassis *Chassis) DeleteONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
if slotNumber > len(chassis.Slots) {
errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
return errors.New(errorMsg)
}
if portNumber > 16 {
errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
return errors.New(errorMsg)
}
if ontNumber > 64 {
errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
return errors.New(errorMsg)
}
err := chassis.Slots[slotNumber-1].Ports[portNumber-1].deleteOnt(ontNumber, serialNumber)
return err
}