SEBA-122
bin/client is now cmdline app, tosca is sent to xos

Change-Id: I7bbf59569b5c96062aa1c7681708a4cf39532ae2
diff --git a/models/abstract/ChassisUtils.go b/models/abstract/ChassisUtils.go
index 2377453..5e38890 100644
--- a/models/abstract/ChassisUtils.go
+++ b/models/abstract/ChassisUtils.go
@@ -19,8 +19,8 @@
 /*
 GenerateChassis - constructs a new AbstractOLT Chassis
 */
-func GenerateChassis(CLLI string) *Chassis {
-	chassis := Chassis{CLLI: CLLI}
+func GenerateChassis(CLLI string, rack int, shelf int) *Chassis {
+	chassis := Chassis{CLLI: CLLI, Rack: rack, Shelf: shelf}
 
 	var slots [16]Slot
 	for i := 0; i < 16; i++ {
@@ -32,11 +32,11 @@
 }
 
 func generateSlot(n int, c *Chassis) Slot {
-	slot := Slot{Number: n, Parent: c}
+	slot := Slot{Number: n + 3, Parent: c}
 
 	var ports [16]Port
 	for i := 0; i < 16; i++ {
-		ports[i] = generatePort(i, &slot)
+		ports[i] = generatePort(i+1, &slot)
 	}
 
 	slot.Ports = ports
@@ -46,10 +46,11 @@
 	port := Port{Number: n, Parent: s}
 
 	var onts [64]Ont
-	for i := 0; i < 64; i++ {
+	//i starts with 1 because :P Architects - blah
+	for i := 1; i < 65; i++ {
 		/* adding one because the system that provisions is 1 based on everything not 0 based*/
-		onts[i] = Ont{Number: i, Svlan: calculateSvlan(s.Number+1, n+1, i+1),
-			Cvlan: calculateCvlan(s.Number+1, n+1, i+1), Parent: &port}
+		onts[i-1] = Ont{Number: i, Svlan: calculateSvlan(s.Number, n, i),
+			Cvlan: calculateCvlan(s.Number, n, i+1), Parent: &port}
 	}
 
 	port.Onts = onts
@@ -61,8 +62,7 @@
 	ontSlotOffset := 12  //= Max(ONT_PORT) = 12
 	vlanOffset := 1      //(VID 1 is reserved)
 
-	cVid := ((ont-1)%32)*ontPortOffset +
-		(slot-1)*ontSlotOffset + port + vlanOffset
+	cVid := ((ont-2)%32)*ontPortOffset + (slot-3)*ontSlotOffset + port + vlanOffset
 
 	return cVid
 }
@@ -71,8 +71,7 @@
 	ltSlotOffset := 16
 	vlanGap := 288  // Max(LT_SLOT) * Max(ltSlotOffset) = 18 * 16 = 288
 	vlanOffset := 1 //(VID 1 is reserved)
-
-	sVid := ((slot-1)*ltSlotOffset + port) + ((ont-1)/32)*vlanGap + vlanOffset
+	sVid := ((slot-3)*ltSlotOffset + port) + ((ont-1)/32)*vlanGap + vlanOffset
 
 	return sVid
 }
diff --git a/models/abstract/ChassisUtils_test.go b/models/abstract/ChassisUtils_test.go
index ecc5752..d6043f4 100644
--- a/models/abstract/ChassisUtils_test.go
+++ b/models/abstract/ChassisUtils_test.go
@@ -23,17 +23,16 @@
 )
 
 func TestChassisUtils_GenerateChassis(t *testing.T) {
-	chassis := abstract.GenerateChassis("MY_CLLI")
+	chassis := abstract.GenerateChassis("MY_CLLI", 1, 1)
 	slot := chassis.Slots[6]
 	port := slot.Ports[0]
 	ont := port.Onts[3]
 	svlan := ont.Svlan
 	cvlan := ont.Cvlan
 	if svlan != 98 { // see map doc
-		t.Fail()
+		t.Errorf("SVlan should be 98 and is %d\n", svlan)
 	}
 	if cvlan != 434 { // see map doc
-		t.Fail()
+		t.Errorf("CVlan should be 434 and is %d\n", cvlan)
 	}
-
 }
diff --git a/models/abstract/chassis.go b/models/abstract/chassis.go
index 687ecae..06e0002 100644
--- a/models/abstract/chassis.go
+++ b/models/abstract/chassis.go
@@ -16,7 +16,10 @@
 
 package abstract
 
-import "errors"
+import (
+	"errors"
+	"fmt"
+)
 
 const MAX_SLOTS int = 16
 const MAX_PORTS int = 16
@@ -27,6 +30,8 @@
 type Chassis struct {
 	CLLI      string
 	Slots     [16]Slot
+	Rack      int
+	Shelf     int
 	AllocInfo PortAllocationInfo
 }
 
@@ -59,6 +64,7 @@
 	return nextPort, nil
 }
 func (chassis *Chassis) ActivateONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
+	fmt.Printf("chassis.ActivateONT(slot:%d,portNumber:%d,ontNumber:%d,serialNumber:%s\n", slotNumber, portNumber, ontNumber, serialNumber)
 	err := chassis.Slots[slotNumber-1].Ports[portNumber-1].provisionOnt(ontNumber, serialNumber)
 	return err
 }
diff --git a/models/abstract/port.go b/models/abstract/port.go
index 2c2e07c..e626e7c 100644
--- a/models/abstract/port.go
+++ b/models/abstract/port.go
@@ -49,15 +49,22 @@
 	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 {
+
+	fmt.Printf("My Number:%d abstract.port.provisionOnt(ontNumber:%d,serialNumber:%s\n", port.Number, ontNumber, serialNumber)
+	slot := port.Parent
+	chassis := *slot.Parent
+	baseID := fmt.Sprintf("%d/%d/%d/%d:%d.1.1", chassis.Rack, chassis.Shelf, slot.Number, port.Number, ontNumber)
+	nasPortID := fmt.Sprintf("PON %s", baseID)
+	circuitID := fmt.Sprintf("%s %s", chassis.CLLI, baseID)
+
 	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]
-	err := phyPort.ActivateOnt(ontNumber, ont.Svlan, ont.Cvlan, serialNumber)
+	err := phyPort.ActivateOnt(ontNumber, ont.Svlan, ont.Cvlan, serialNumber, nasPortID, circuitID)
 	return err
 }
 func (port *Port) deleteOnt(ontNumber int, serialNumber string) error {