Implemented the provision / activate ont workflow
Change-Id: Ife684f41e54e176879332922ad86f517358f15e7
diff --git a/models/abstract/ChassisUtils.go b/models/abstract/ChassisUtils.go
index 4c41698..2377453 100644
--- a/models/abstract/ChassisUtils.go
+++ b/models/abstract/ChassisUtils.go
@@ -16,8 +16,6 @@
package abstract
-import "errors"
-
/*
GenerateChassis - constructs a new AbstractOLT Chassis
*/
@@ -82,24 +80,3 @@
/*
NextPort pulls the first unMapped port in the abstract chassis so the next physical port can be mapped to it
*/
-func (chassis *Chassis) NextPort() (*Port, error) {
- info := &chassis.AllocInfo
-
- if info.outOfPorts {
- return nil, errors.New("Abstract chassis out of ports")
- }
-
- nextPort := &chassis.Slots[info.slot].Ports[info.port]
-
- info.port++
- if info.port == MAX_PORTS {
- info.port = 0
- info.slot++
- if info.slot == MAX_SLOTS {
- info.slot = 0
- info.outOfPorts = true
- }
- }
-
- return nextPort, nil
-}
diff --git a/models/abstract/chassis.go b/models/abstract/chassis.go
index 52de90d..74a288c 100644
--- a/models/abstract/chassis.go
+++ b/models/abstract/chassis.go
@@ -16,6 +16,8 @@
package abstract
+import "errors"
+
const MAX_SLOTS int = 16
const MAX_PORTS int = 16
@@ -34,3 +36,29 @@
port int
outOfPorts bool
}
+
+func (chassis *Chassis) NextPort() (*Port, error) {
+ info := &chassis.AllocInfo
+
+ if info.outOfPorts {
+ return nil, errors.New("Abstract chassis out of ports")
+ }
+
+ nextPort := &chassis.Slots[info.slot].Ports[info.port]
+
+ info.port++
+ if info.port == MAX_PORTS {
+ info.port = 0
+ info.slot++
+ if info.slot == MAX_SLOTS {
+ info.slot = 0
+ info.outOfPorts = true
+ }
+ }
+
+ return nextPort, nil
+}
+func (chassis *Chassis) ActivateONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
+ err := chassis.Slots[slotNumber-1].Ports[portNumber].provisionOnt(ontNumber, serialNumber)
+ return err
+}
diff --git a/models/abstract/port.go b/models/abstract/port.go
index c23249a..5dfa195 100644
--- a/models/abstract/port.go
+++ b/models/abstract/port.go
@@ -16,7 +16,11 @@
package abstract
-import "gerrit.opencord.org/abstract-olt/models/physical"
+import (
+ "fmt"
+
+ "gerrit.opencord.org/abstract-olt/models/physical"
+)
/*
Port represents a single PON port on the OLT chassis
@@ -28,3 +32,26 @@
PhysPort *physical.PONPort
Parent *Slot `json:"-"`
}
+
+type UnprovisonedPortError struct {
+ oltNum int
+ clli string
+ portNum int
+}
+
+func (e *UnprovisonedPortError) Error() string {
+ return fmt.Sprintf("Port %d for olt %d on AbstractChasis %s is not provisioned", e.portNum, e.oltNum, e.clli)
+}
+func (port *Port) provisionOnt(ontNumber int, serialNumber string) error {
+ if port.PhysPort == nil {
+ slot := port.Parent
+ chassis := slot.Parent
+ err := UnprovisonedPortError{oltNum: slot.Number, clli: chassis.CLLI, portNum: port.Number}
+ return &err
+ }
+
+ phyPort := port.PhysPort
+ ont := port.Onts[ontNumber-1]
+ phyPort.ActivateOnt(ontNumber, ont.Svlan, ont.Cvlan, serialNumber)
+ return nil
+}
diff --git a/models/physical/chassis.go b/models/physical/chassis.go
index 339a610..3f050aa 100644
--- a/models/physical/chassis.go
+++ b/models/physical/chassis.go
@@ -16,7 +16,10 @@
package physical
-import "net"
+import (
+ "fmt"
+ "net"
+)
/*
Chassis is a model that takes up to 16 discreet OLT chassis as if it is a 16 slot OLT chassis
@@ -27,3 +30,16 @@
Dataswitch DataSwitch
Linecards []OLT
}
+
+/*
+AddOLTChassis - adds a reference to a new olt chassis
+*/
+func (chassis *Chassis) AddOLTChassis(olt OLT) {
+ chassis.Linecards = append(chassis.Linecards, olt)
+ //TODO - api call to add olt i.e. preprovision_olt
+ fmt.Printf("chassis.AddOLTChassis(%s)\n", olt.GetHostname())
+}
+func (chassis *Chassis) provisionONT(ont Ont) {
+ //TODO - api call to provison s/c vlans and ont serial number etc
+ fmt.Printf("chassis.provisionONT(%s,SVlan:%d,CVlan:%d)\n", ont.SerialNumber, ont.Svlan, ont.Cvlan)
+}
diff --git a/models/physical/edgecore.go b/models/physical/edgecore.go
index 196d44e..cded2dc 100644
--- a/models/physical/edgecore.go
+++ b/models/physical/edgecore.go
@@ -29,6 +29,9 @@
func CreateEdgecore(olt *SimpleOLT) *Edgecore {
var newPorts [16]PONPort
edge := Edgecore{SimpleOLT: *olt}
+ for i := 0; i < 16; i++ {
+ newPorts[i].Parent = &edge
+ }
edge.Ports = newPorts[:]
return &edge
}
diff --git a/models/physical/olt.go b/models/physical/olt.go
index 3c2094d..beffec8 100644
--- a/models/physical/olt.go
+++ b/models/physical/olt.go
@@ -41,6 +41,7 @@
Address net.TCPAddr
Number int
Ports []PONPort
+ Active bool
Parent *Chassis `json:"-"`
DataSwitchPort int
}
diff --git a/models/physical/ont.go b/models/physical/ont.go
index 4bd47ac..4a9ca89 100644
--- a/models/physical/ont.go
+++ b/models/physical/ont.go
@@ -20,8 +20,9 @@
Ont represents a single ont/onu connect to a splitter on a Port
*/
type Ont struct {
- Number int
- Svlan int
- Cvlan int
- Parent *PONPort `json:"-"`
+ Number int
+ Svlan int
+ Cvlan int
+ SerialNumber string
+ Parent *PONPort `json:"-"`
}
diff --git a/models/physical/ponport.go b/models/physical/ponport.go
index 99c282a..e17a07e 100644
--- a/models/physical/ponport.go
+++ b/models/physical/ponport.go
@@ -17,7 +17,7 @@
package physical
/*
-Port represents a single PON port on the OLT chassis
+PONPort represents a single PON port on the OLT chassis
*/
type PONPort struct {
Number int
@@ -25,3 +25,10 @@
Onts [64]Ont
Parent *Edgecore `json:"-"`
}
+
+func (port *PONPort) ActivateOnt(number int, sVlan int, cVlan int, serialNumber string) {
+ ont := Ont{Number: number, Svlan: sVlan, Cvlan: cVlan, SerialNumber: serialNumber, Parent: port}
+ port.Onts[number-1] = ont
+ port.Parent.Parent.provisionONT(ont)
+
+}