blob: 06e0002f2e9987dda810f04dfd026919a40b41e1 [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"
21 "fmt"
22)
donNewtonAlpha5234b132018-08-16 14:12:28 -040023
Author Namea594e632018-08-10 11:33:58 -040024const MAX_SLOTS int = 16
25const MAX_PORTS int = 16
26
27/*
28Chassis is a model that takes up to 16 discreet OLT chassis as if it is a 16 slot OLT chassis
29*/
30type Chassis struct {
31 CLLI string
32 Slots [16]Slot
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040033 Rack int
34 Shelf int
Author Namea594e632018-08-10 11:33:58 -040035 AllocInfo PortAllocationInfo
36}
37
38type PortAllocationInfo struct {
39 // Current info on next port to be allocated
40 slot int
41 port int
42 outOfPorts bool
43}
donNewtonAlpha5234b132018-08-16 14:12:28 -040044
45func (chassis *Chassis) NextPort() (*Port, error) {
46 info := &chassis.AllocInfo
47
48 if info.outOfPorts {
49 return nil, errors.New("Abstract chassis out of ports")
50 }
51
52 nextPort := &chassis.Slots[info.slot].Ports[info.port]
53
54 info.port++
55 if info.port == MAX_PORTS {
56 info.port = 0
57 info.slot++
58 if info.slot == MAX_SLOTS {
59 info.slot = 0
60 info.outOfPorts = true
61 }
62 }
63
64 return nextPort, nil
65}
66func (chassis *Chassis) ActivateONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040067 fmt.Printf("chassis.ActivateONT(slot:%d,portNumber:%d,ontNumber:%d,serialNumber:%s\n", slotNumber, portNumber, ontNumber, serialNumber)
donNewtonAlpha8205a4d2018-08-16 18:27:20 -040068 err := chassis.Slots[slotNumber-1].Ports[portNumber-1].provisionOnt(ontNumber, serialNumber)
donNewtonAlpha5234b132018-08-16 14:12:28 -040069 return err
70}
donNewtonAlphaf7cc9992018-08-29 14:23:02 -040071func (chassis *Chassis) DeleteONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
72 err := chassis.Slots[slotNumber-1].Ports[portNumber-1].deleteOnt(ontNumber, serialNumber)
73 return err
74}