blob: 5012fe18ec289dbe8fb4b144c95d7cdfefc08106 [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 physical
18
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040019import (
20 "fmt"
21)
donNewtonAlphaf7cc9992018-08-29 14:23:02 -040022
Author Namea594e632018-08-10 11:33:58 -040023/*
donNewtonAlpha5234b132018-08-16 14:12:28 -040024PONPort represents a single PON port on the OLT chassis
Author Namea594e632018-08-10 11:33:58 -040025*/
26type PONPort struct {
27 Number int
28 DeviceID string
29 Onts [64]Ont
donNewtonAlphac997d642018-10-17 13:22:48 -040030 Parent *SimpleOLT `json:"-" bson:"-"`
Author Namea594e632018-08-10 11:33:58 -040031}
donNewtonAlpha5234b132018-08-16 14:12:28 -040032
donNewtonAlphaf7cc9992018-08-29 14:23:02 -040033/*
34AllReadyActiveError - thrown when an attempt to activate a ONT which is already activated
35*/
36type AllReadyActiveError struct {
37 slotNum int
38 clli string
39 ponportNum int
40 ontNumber int
41}
42
43/*
44Error - the interface method that must be implemented on error
45*/
46func (e *AllReadyActiveError) Error() string {
47 return fmt.Sprintf("Attempt to Activate ONT %d on PONPort %d Slot %d on %s but already active", e.ontNumber, e.ponportNum, e.slotNum, e.clli)
48}
49
50/*
51AllReadyDeactivatedError - thrown when an attempt to activate a ONT which is already activated
52*/
53type AllReadyDeactivatedError struct {
54 slotNum int
55 clli string
56 ponportNum int
57 ontNumber int
58}
59
60/*
61Error - the interface method that must be implemented on error
62*/
63func (e *AllReadyDeactivatedError) Error() string {
64 return fmt.Sprintf("Attempt to De-Activate ONT %d on PONPort %d Slot %d on %s but not active", e.ontNumber, e.ponportNum, e.slotNum, e.clli)
65}
66
67/*
donNewtonAlpha292d1432018-11-08 19:01:21 -050068PreProvisionOnt - passes ont information to chassis to make call to NEM to activate (whitelist) ont
69*/
70func (port *PONPort) PreProvisionOnt(number int, sVlan uint32, cVlan uint32, nasPortID string, circuitID string, techProfile string, speedProfile string) error {
Don Newton276cd1f2019-02-06 17:14:03 -050071 fmt.Printf("PrPreProvisionOnt(number %d, sVlan %d, cVlan %d, nasPortID %s, circuitID %s, techProfile %s, speedProfile %s\n", number, sVlan, cVlan, nasPortID, circuitID, techProfile, speedProfile)
donNewtonAlpha292d1432018-11-08 19:01:21 -050072 slot := port.Parent
73 chassis := slot.Parent
74
75 if port.Onts[number-1].Active {
76 e := AllReadyActiveError{ontNumber: number, slotNum: slot.Number, ponportNum: port.Number, clli: chassis.CLLI}
77 return &e
78 }
79 ont := &port.Onts[number-1]
80 ont.Number = number
81 ont.Svlan = sVlan
82 ont.Cvlan = cVlan
83 ont.Parent = port
84 ont.NasPortID = nasPortID
85 ont.CircuitID = circuitID
86 ont.TechProfile = techProfile
87 ont.SpeedProfile = speedProfile
Don Newton276cd1f2019-02-06 17:14:03 -050088 fmt.Printf("ponPort PreProvision ont :%v\n", ont)
donNewtonAlpha292d1432018-11-08 19:01:21 -050089 return nil
90}
91
92/*
93ActivateSerial - passes ont information to chassis to make call to NEM to activate (whitelist) ont assumes pre provisioned ont
94*/
95func (port *PONPort) ActivateSerial(number int, serialNumber string) error {
96 slot := port.Parent
97 chassis := slot.Parent
98
99 if port.Onts[number-1].Active {
100 e := AllReadyActiveError{ontNumber: number, slotNum: slot.Number, ponportNum: port.Number, clli: chassis.CLLI}
101 return &e
102 }
Don Newton276cd1f2019-02-06 17:14:03 -0500103 ont := &port.Onts[number-1]
donNewtonAlpha292d1432018-11-08 19:01:21 -0500104 ont.SerialNumber = serialNumber
105 fmt.Println(ont)
Don Newton276cd1f2019-02-06 17:14:03 -0500106 port.Parent.Parent.provisionONT(*ont)
donNewtonAlpha292d1432018-11-08 19:01:21 -0500107 port.Onts[number-1].Active = true
108 return nil
109
110}
111
112/*
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400113ActivateOnt - passes ont information to chassis to make call to NEM to activate (whitelist) ont
114*/
Don Newton281e0252018-10-22 14:38:50 -0400115func (port *PONPort) ActivateOnt(number int, sVlan uint32, cVlan uint32, serialNumber string, nasPortID string, circuitID string) error {
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400116 slot := port.Parent
117 chassis := slot.Parent
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400118
119 if port.Onts[number-1].Active {
120 e := AllReadyActiveError{ontNumber: number, slotNum: slot.Number, ponportNum: port.Number, clli: chassis.CLLI}
121 return &e
122 }
donNewtonAlpha1d2d6812018-09-14 16:00:02 -0400123 ont := Ont{Number: number, Svlan: sVlan, Cvlan: cVlan, SerialNumber: serialNumber, Parent: port, NasPortID: nasPortID, CircuitID: circuitID}
donNewtonAlpha5234b132018-08-16 14:12:28 -0400124 port.Onts[number-1] = ont
125 port.Parent.Parent.provisionONT(ont)
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400126 port.Onts[number-1].Active = true
127 return nil
donNewtonAlpha5234b132018-08-16 14:12:28 -0400128
129}
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400130
131/*
132DeleteOnt - passes ont information to chassis to make call to NEM to de-activate (de-whitelist) ont
133*/
Don Newton281e0252018-10-22 14:38:50 -0400134func (port *PONPort) DeleteOnt(number int, sVlan uint32, cVlan uint32, serialNumber string) error {
Don Newton276cd1f2019-02-06 17:14:03 -0500135
136 fmt.Printf("DeleteOnt(number %d, sVlan %d, cVlan %d, serialNumber %s)\n", number, sVlan, cVlan, serialNumber)
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400137 slot := port.Parent
138 chassis := slot.Parent
donNewtonAlphaf7cc9992018-08-29 14:23:02 -0400139 if port.Onts[number-1].Active != true {
140 e := AllReadyDeactivatedError{ontNumber: number, slotNum: slot.Number, ponportNum: port.Number, clli: chassis.CLLI}
141 return &e
142 }
143 ont := Ont{Number: number, Svlan: sVlan, Cvlan: cVlan, SerialNumber: serialNumber, Parent: port}
144 chassis.deleteONT(ont)
145 port.Onts[number-1].Active = false
146
147 return nil
148}