blob: 10649929191c987a19d3a6134d782af93a751ac3 [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/*
68ActivateOnt - passes ont information to chassis to make call to NEM to activate (whitelist) ont
69*/
Don Newton281e0252018-10-22 14:38:50 -040070func (port *PONPort) ActivateOnt(number int, sVlan uint32, cVlan uint32, serialNumber string, nasPortID string, circuitID string) error {
donNewtonAlphaf7cc9992018-08-29 14:23:02 -040071 slot := port.Parent
72 chassis := slot.Parent
donNewtonAlphaf7cc9992018-08-29 14:23:02 -040073
74 if port.Onts[number-1].Active {
75 e := AllReadyActiveError{ontNumber: number, slotNum: slot.Number, ponportNum: port.Number, clli: chassis.CLLI}
76 return &e
77 }
donNewtonAlpha1d2d6812018-09-14 16:00:02 -040078 ont := Ont{Number: number, Svlan: sVlan, Cvlan: cVlan, SerialNumber: serialNumber, Parent: port, NasPortID: nasPortID, CircuitID: circuitID}
donNewtonAlpha5234b132018-08-16 14:12:28 -040079 port.Onts[number-1] = ont
80 port.Parent.Parent.provisionONT(ont)
donNewtonAlphaf7cc9992018-08-29 14:23:02 -040081 port.Onts[number-1].Active = true
82 return nil
donNewtonAlpha5234b132018-08-16 14:12:28 -040083
84}
donNewtonAlphaf7cc9992018-08-29 14:23:02 -040085
86/*
87DeleteOnt - passes ont information to chassis to make call to NEM to de-activate (de-whitelist) ont
88*/
Don Newton281e0252018-10-22 14:38:50 -040089func (port *PONPort) DeleteOnt(number int, sVlan uint32, cVlan uint32, serialNumber string) error {
donNewtonAlphaf7cc9992018-08-29 14:23:02 -040090 slot := port.Parent
91 chassis := slot.Parent
donNewtonAlphaf7cc9992018-08-29 14:23:02 -040092 if port.Onts[number-1].Active != true {
93 e := AllReadyDeactivatedError{ontNumber: number, slotNum: slot.Number, ponportNum: port.Number, clli: chassis.CLLI}
94 return &e
95 }
96 ont := Ont{Number: number, Svlan: sVlan, Cvlan: cVlan, SerialNumber: serialNumber, Parent: port}
97 chassis.deleteONT(ont)
98 port.Onts[number-1].Active = false
99
100 return nil
101}