blob: 929f247da125a5d366acfbf3629502c6b35fb66d [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}
donNewtonAlpha292d1432018-11-08 19:01:21 -050066func (chassis *Chassis) PreProvisonONT(slotNumber int, portNumber int, ontNumber int, cTag uint32, sTag uint32, nasPortID string, circuitID string, techProfile string, speedProfile string) error {
67 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
80 err := chassis.Slots[slotNumber-1].Ports[portNumber-1].preProvisionOnt(ontNumber, cTag, sTag, nasPortID, circuitID, techProfile, speedProfile)
81 return err
82}
83func (chassis *Chassis) ActivateSerial(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
84 if slotNumber > len(chassis.Slots) {
85 errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
86 return errors.New(errorMsg)
87 }
88 if portNumber > 16 {
89 errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
90 return errors.New(errorMsg)
91 }
92 if ontNumber > 64 {
93 errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
94 return errors.New(errorMsg)
95 }
96
97 err := chassis.Slots[slotNumber-1].Ports[portNumber-1].activateSerial(ontNumber, serialNumber)
98 return err
99
100}
Don Newton281e0252018-10-22 14:38:50 -0400101func (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 -0500102 if slotNumber > len(chassis.Slots) {
103 errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
104 return errors.New(errorMsg)
105 }
106 if portNumber > 16 {
107 errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
108 return errors.New(errorMsg)
109 }
110 if ontNumber > 64 {
111 errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
112 return errors.New(errorMsg)
113 }
114
Don Newton281e0252018-10-22 14:38:50 -0400115 err := chassis.Slots[slotNumber-1].Ports[portNumber-1].provisionOntFull(ontNumber, serialNumber, cTag, sTag, nasPortID, circuitID)
116 return err
117}
118
donNewtonAlpha5234b132018-08-16 14:12:28 -0400119func (chassis *Chassis) ActivateONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
Don Newton5154fff2018-11-06 17:40:58 -0500120 if slotNumber > len(chassis.Slots) {
121 errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
122 return errors.New(errorMsg)
123 }
124 if portNumber > 16 {
125 errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
126 return errors.New(errorMsg)
127 }
128 if ontNumber > 64 {
129 errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
130 return errors.New(errorMsg)
131 }
donNewtonAlpha8205a4d2018-08-16 18:27:20 -0400132 err := chassis.Slots[slotNumber-1].Ports[portNumber-1].provisionOnt(ontNumber, serialNumber)
donNewtonAlpha5234b132018-08-16 14:12:28 -0400133 return err
134}
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400135func (chassis *Chassis) DeleteONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
Don Newton5154fff2018-11-06 17:40:58 -0500136 if slotNumber > len(chassis.Slots) {
137 errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
138 return errors.New(errorMsg)
139 }
140 if portNumber > 16 {
141 errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
142 return errors.New(errorMsg)
143 }
144 if ontNumber > 64 {
145 errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
146 return errors.New(errorMsg)
147 }
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400148 err := chassis.Slots[slotNumber-1].Ports[portNumber-1].deleteOnt(ontNumber, serialNumber)
149 return err
150}