[VOL-3880] Correctly reporting software image status in OMCI Get
[VOL-3900] OMCI ONU Software Image Download
Change-Id: I8d91be832f3a89404d0af0dd98e6b53359e6a738
diff --git a/internal/common/omci/get.go b/internal/common/omci/get.go
index e47dc0c..5172f60 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) ([]byte, error) {
+func CreateGetResponse(omciPkt gopacket.Packet, omciMsg *omci.OMCI, onuSn *openolt.SerialNumber, mds uint8, activeImageEntityId uint16, committedImageEntityId uint16) ([]byte, error) {
msgObj, err := ParseGetRequest(omciPkt)
@@ -66,7 +66,7 @@
case me.OnuGClassID:
response = createOnugResponse(msgObj.AttributeMask, msgObj.EntityInstance, onuSn)
case me.SoftwareImageClassID:
- response = createSoftwareImageResponse(msgObj.AttributeMask, msgObj.EntityInstance)
+ response = createSoftwareImageResponse(msgObj.AttributeMask, msgObj.EntityInstance, activeImageEntityId, committedImageEntityId)
case me.IpHostConfigDataClassID:
response = createIpHostResponse(msgObj.AttributeMask, msgObj.EntityInstance)
case me.UniGClassID:
@@ -200,9 +200,24 @@
//}
}
-func createSoftwareImageResponse(attributeMask uint16, entityInstance uint16) *omci.GetResponse {
+func createSoftwareImageResponse(attributeMask uint16, entityInstance uint16, activeImageEntityId uint16, committedImageEntityId uint16) *omci.GetResponse {
+
+ omciLogger.WithFields(log.Fields{
+ "EntityInstance": entityInstance,
+ }).Info("received-get-software-image-request")
+
+ // Only one image can be active and committed
+ committed := 0
+ active := 0
+ if entityInstance == activeImageEntityId {
+ active = 1
+ }
+ if entityInstance == committedImageEntityId {
+ committed = 1
+ }
+
// NOTE that we need send the response for the correct ME Instance or the adapter won't process it
- return &omci.GetResponse{
+ res := &omci.GetResponse{
MeBasePacket: omci.MeBasePacket{
EntityClass: me.SoftwareImageClassID,
EntityInstance: entityInstance,
@@ -210,8 +225,8 @@
Attributes: me.AttributeValueMap{
"ManagedEntityId": 0,
"Version": toOctets("00000000000001", 14),
- "IsCommitted": 1,
- "IsActive": 1,
+ "IsCommitted": committed,
+ "IsActive": active,
"IsValid": 1,
"ProductCode": toOctets("product-code", 25),
"ImageHash": toOctets("broadband-sim", 16),
@@ -219,6 +234,15 @@
Result: me.Success,
AttributeMask: attributeMask,
}
+
+ omciLogger.WithFields(log.Fields{
+ "omciMessage": res,
+ "entityId": entityInstance,
+ "active": active,
+ "committed": committed,
+ }).Info("Reporting SoftwareImage")
+
+ return res
}
func createIpHostResponse(attributeMask uint16, entityInstance uint16) *omci.GetResponse {