VOL-4013: Delivery of correct ONU pm-data for UNI_Status

Change-Id: I286c10ef08f8dfd1273aef094cbce60ecc4ab879
diff --git a/internal/common/omci/get.go b/internal/common/omci/get.go
index 4b02bda..67a65ff 100644
--- a/internal/common/omci/get.go
+++ b/internal/common/omci/get.go
@@ -45,7 +45,7 @@
 	return msgObj, nil
 }
 
-func CreateGetResponse(omciPkt gopacket.Packet, omciMsg *omci.OMCI, onuSn *openolt.SerialNumber, mds uint8, activeImageEntityId uint16, committedImageEntityId uint16) ([]byte, error) {
+func CreateGetResponse(omciPkt gopacket.Packet, omciMsg *omci.OMCI, onuSn *openolt.SerialNumber, mds uint8, activeImageEntityId uint16, committedImageEntityId uint16, onuDown bool) ([]byte, error) {
 
 	msgObj, err := ParseGetRequest(omciPkt)
 
@@ -70,9 +70,9 @@
 	case me.IpHostConfigDataClassID:
 		response = createIpHostResponse(msgObj.AttributeMask, msgObj.EntityInstance)
 	case me.UniGClassID:
-		response = createUnigResponse(msgObj.AttributeMask, msgObj.EntityInstance)
+		response = createUnigResponse(msgObj.AttributeMask, msgObj.EntityInstance, onuDown)
 	case me.PhysicalPathTerminationPointEthernetUniClassID:
-		response = createPptpResponse(msgObj.AttributeMask, msgObj.EntityInstance)
+		response = createPptpResponse(msgObj.AttributeMask, msgObj.EntityInstance, onuDown)
 	case me.AniGClassID:
 		response = createAnigResponse(msgObj.AttributeMask, msgObj.EntityInstance)
 	case me.OnuDataClassID:
@@ -260,13 +260,18 @@
 	}
 }
 
-func createUnigResponse(attributeMask uint16, entityID uint16) *omci.GetResponse {
+func createUnigResponse(attributeMask uint16, entityID uint16, onuDown bool) *omci.GetResponse {
+	// Valid values for uni_admin_state are 0 (unlocks) and 1 (locks)
+	omciAdminState := 1
+	if !onuDown {
+		omciAdminState = 0
+	}
 	managedEntity, meErr := me.NewUniG(me.ParamData{
 		EntityID: entityID,
 		Attributes: me.AttributeValueMap{
 			"ManagedEntityId":             entityID,
 			"Deprecated":                  0,
-			"AdministrativeState":         0,
+			"AdministrativeState":         omciAdminState,
 			"ManagementCapability":        0,
 			"NonOmciManagementIdentifier": 1,
 			"RelayAgentOptions":           1,
@@ -289,7 +294,14 @@
 	}
 }
 
-func createPptpResponse(attributeMask uint16, entityID uint16) *omci.GetResponse {
+func createPptpResponse(attributeMask uint16, entityID uint16, onuDown bool) *omci.GetResponse {
+	// Valid values for oper_state are 0 (enabled) and 1 (disabled)
+	// Valid values for uni_admin_state are 0 (unlocks) and 1 (locks)
+	onuAdminState := 1
+	if !onuDown {
+		onuAdminState = 0
+	}
+	onuOperState := onuAdminState // For now make the assumption that oper state reflects the admin state
 	managedEntity, meErr := me.NewPhysicalPathTerminationPointEthernetUni(me.ParamData{
 		EntityID: entityID,
 		Attributes: me.AttributeValueMap{
@@ -298,8 +310,8 @@
 			"SensedType":                    0,
 			"AutoDetectionConfiguration":    0,
 			"EthernetLoopbackConfiguration": 0,
-			"AdministrativeState":           0,
-			"OperationalState":              0,
+			"AdministrativeState":           onuAdminState,
+			"OperationalState":              onuOperState,
 			"ConfigurationInd":              0,
 			"MaxFrameSize":                  0,
 			"DteOrDceInd":                   0,