blob: 2b3231b815418e7e26574ecb300d786e9abbb8ce [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"
Don Newton5154fff2018-11-06 17:40:58 -050021 "fmt"
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040022)
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}
Don Newton281e0252018-10-22 14:38:50 -040066func (chassis *Chassis) ActivateONTFull(slotNumber int, portNumber int, ontNumber int, serialNumber string, cTag uint32, sTag uint32, nasPortID string, circuitID string) error {
Don Newton5154fff2018-11-06 17:40:58 -050067 if slotNumber > len(chassis.Slots) {
68 errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
69 return errors.New(errorMsg)
70 }
71 if portNumber > 16 {
72 errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
73 return errors.New(errorMsg)
74 }
75 if ontNumber > 64 {
76 errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
77 return errors.New(errorMsg)
78 }
79
Don Newton281e0252018-10-22 14:38:50 -040080 err := chassis.Slots[slotNumber-1].Ports[portNumber-1].provisionOntFull(ontNumber, serialNumber, cTag, sTag, nasPortID, circuitID)
81 return err
82}
83
donNewtonAlpha5234b132018-08-16 14:12:28 -040084func (chassis *Chassis) ActivateONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
Don Newton5154fff2018-11-06 17:40:58 -050085 if slotNumber > len(chassis.Slots) {
86 errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
87 return errors.New(errorMsg)
88 }
89 if portNumber > 16 {
90 errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
91 return errors.New(errorMsg)
92 }
93 if ontNumber > 64 {
94 errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
95 return errors.New(errorMsg)
96 }
donNewtonAlpha8205a4d2018-08-16 18:27:20 -040097 err := chassis.Slots[slotNumber-1].Ports[portNumber-1].provisionOnt(ontNumber, serialNumber)
donNewtonAlpha5234b132018-08-16 14:12:28 -040098 return err
99}
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400100func (chassis *Chassis) DeleteONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
Don Newton5154fff2018-11-06 17:40:58 -0500101 if slotNumber > len(chassis.Slots) {
102 errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
103 return errors.New(errorMsg)
104 }
105 if portNumber > 16 {
106 errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
107 return errors.New(errorMsg)
108 }
109 if ontNumber > 64 {
110 errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
111 return errors.New(errorMsg)
112 }
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400113 err := chassis.Slots[slotNumber-1].Ports[portNumber-1].deleteOnt(ontNumber, serialNumber)
114 return err
115}