blob: 9b62c8c819bffa92d5a510ec42e8ac97050bbb58 [file] [log] [blame]
Author Namea594e632018-08-10 11:33:58 -04001/*
2 Copyright 2017 the original author or authors.
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17package abstract
18
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040019import (
20 "errors"
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040021)
donNewtonAlpha5234b132018-08-16 14:12:28 -040022
Author Namea594e632018-08-10 11:33:58 -040023const MAX_SLOTS int = 16
24const MAX_PORTS int = 16
25
26/*
27Chassis is a model that takes up to 16 discreet OLT chassis as if it is a 16 slot OLT chassis
28*/
29type Chassis struct {
30 CLLI string
31 Slots [16]Slot
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040032 Rack int
33 Shelf int
Author Namea594e632018-08-10 11:33:58 -040034 AllocInfo PortAllocationInfo
35}
36
37type PortAllocationInfo struct {
38 // Current info on next port to be allocated
39 slot int
40 port int
41 outOfPorts bool
42}
donNewtonAlpha5234b132018-08-16 14:12:28 -040043
44func (chassis *Chassis) NextPort() (*Port, error) {
45 info := &chassis.AllocInfo
46
47 if info.outOfPorts {
48 return nil, errors.New("Abstract chassis out of ports")
49 }
50
51 nextPort := &chassis.Slots[info.slot].Ports[info.port]
52
53 info.port++
54 if info.port == MAX_PORTS {
55 info.port = 0
56 info.slot++
57 if info.slot == MAX_SLOTS {
58 info.slot = 0
59 info.outOfPorts = true
60 }
61 }
62
63 return nextPort, nil
64}
65func (chassis *Chassis) ActivateONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
donNewtonAlpha8205a4d2018-08-16 18:27:20 -040066 err := chassis.Slots[slotNumber-1].Ports[portNumber-1].provisionOnt(ontNumber, serialNumber)
donNewtonAlpha5234b132018-08-16 14:12:28 -040067 return err
68}
donNewtonAlphaf7cc9992018-08-29 14:23:02 -040069func (chassis *Chassis) DeleteONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
70 err := chassis.Slots[slotNumber-1].Ports[portNumber-1].deleteOnt(ontNumber, serialNumber)
71 return err
72}