[VOL-4679] BBSIM: OMCI extended message set - support MIB upload
Change-Id: I291524f9d33194fb54c508e2344e53dd47370a8f
diff --git a/internal/common/omci/mibpackets.go b/internal/common/omci/mibpackets.go
index d22908d..a374371 100755
--- a/internal/common/omci/mibpackets.go
+++ b/internal/common/omci/mibpackets.go
@@ -18,8 +18,11 @@
import (
"encoding/binary"
+ "encoding/hex"
"errors"
"fmt"
+ "strconv"
+
"github.com/google/gopacket"
"github.com/opencord/omci-lib-go/v2"
me "github.com/opencord/omci-lib-go/v2/generated"
@@ -109,23 +112,48 @@
return HexEncode(pkt)
}
-func CreateMibUploadResponse(tid uint16, numberOfCommands uint16) ([]byte, error) {
- request := &omci.MibUploadResponse{
+func CreateMibUploadResponse(omciMsg *omci.OMCI, mibDb *MibDb) ([]byte, error) {
+
+ isExtended := false
+ numberOfCommands := mibDb.NumberOfBaselineCommands
+ if omciMsg.DeviceIdentifier == omci.ExtendedIdent {
+ isExtended = true
+ numberOfCommands = mibDb.NumberOfExtendedCommands
+ }
+ response := &omci.MibUploadResponse{
MeBasePacket: omci.MeBasePacket{
EntityClass: me.OnuDataClassID,
+ Extended: isExtended,
},
NumberOfCommands: numberOfCommands,
}
+ omciLogger.WithFields(log.Fields{
+ "NumberOfCommands": numberOfCommands, "isExtended": isExtended}).Debug("mib-upload-response")
- omciLogger.WithFields(log.Fields{"NumberOfCommands": numberOfCommands}).Debug("mib-upload-response")
+ omciLayer := &omci.OMCI{
+ TransactionID: omciMsg.TransactionID,
+ MessageType: omci.MibUploadResponseType,
+ DeviceIdentifier: omciMsg.DeviceIdentifier,
+ }
+ var options gopacket.SerializeOptions
+ options.FixLengths = true
- pkt, err := Serialize(omci.MibUploadResponseType, request, tid)
+ buffer := gopacket.NewSerializeBuffer()
+ err := gopacket.SerializeLayers(buffer, options, omciLayer, response)
if err != nil {
omciLogger.WithFields(log.Fields{
- "Err": err,
- }).Error("Cannot Serialize MibUploadResponse")
+ "Err": err,
+ "TxID": strconv.FormatInt(int64(omciMsg.TransactionID), 16),
+ }).Error("cannot-Serialize-MibUploadResponse")
return nil, err
}
+ pkt := buffer.Bytes()
+
+ log.WithFields(log.Fields{
+ "TxID": strconv.FormatInt(int64(omciMsg.TransactionID), 16),
+ "pkt": hex.EncodeToString(pkt),
+ }).Trace("omci-mib-upload-response")
+
return pkt, nil
}
@@ -165,7 +193,7 @@
return msgObj, nil
}
-func CreateMibUploadNextResponse(omciPkt gopacket.Packet, omciMsg *omci.OMCI, mds uint8, mibDb *MibDb) ([]byte, error) {
+func CreateMibUploadNextResponse(omciPkt gopacket.Packet, omciMsg *omci.OMCI, mibDb *MibDb) ([]byte, error) {
msgObj, err := ParseMibUploadNextRequest(omciPkt)
if err != nil {
@@ -180,65 +208,67 @@
"CommandSequenceNumber": msgObj.CommandSequenceNumber,
}).Trace("received-omci-mibUploadNext-request")
- if msgObj.CommandSequenceNumber > mibDb.NumberOfCommands {
+ isExtended := false
+ numberOfCommands := mibDb.NumberOfBaselineCommands
+ if omciMsg.DeviceIdentifier == omci.ExtendedIdent {
+ isExtended = true
+ numberOfCommands = mibDb.NumberOfExtendedCommands
+ }
+ if msgObj.CommandSequenceNumber > numberOfCommands {
omciLogger.WithFields(log.Fields{
"CommandSequenceNumber": msgObj.CommandSequenceNumber,
- "MibDbNumberOfCommands": mibDb.NumberOfCommands,
+ "MibDbNumberOfCommands": numberOfCommands,
}).Error("mibdb-does-not-contain-item")
return nil, fmt.Errorf("mibdb-does-not-contain-item")
}
- currentEntry := mibDb.items[int(msgObj.CommandSequenceNumber)]
+ if isExtended {
+ pkt := SetTxIdInEncodedPacket(mibDb.extendedResponses[int(msgObj.CommandSequenceNumber)], omciMsg.TransactionID)
+ return pkt, nil
+ } else {
+ currentEntry := mibDb.baselineItems[int(msgObj.CommandSequenceNumber)]
- // if packet is set then we don't need to serialize the packet, it's already done
- if currentEntry.packet != nil {
+ // if packet is set then we don't need to serialize the packet, it's already done
+ if currentEntry.packet != nil {
+ omciLogger.WithFields(log.Fields{
+ "CommandSequenceNumber": msgObj.CommandSequenceNumber,
+ "MibDbNumberOfCommands": numberOfCommands,
+ "packet": currentEntry.packet,
+ "request-txid": omciMsg.TransactionID,
+ }).Info("sending-custom-packet")
+
+ // NOTE we need to replace the first two bytes of the packet with the correct transactionId
+ pkt := SetTxIdInEncodedPacket(currentEntry.packet, omciMsg.TransactionID)
+
+ return pkt, nil
+ }
+ reportedMe, meErr := me.LoadManagedEntityDefinition(currentEntry.classId, me.ParamData{
+ EntityID: currentEntry.entityId.ToUint16(),
+ Attributes: currentEntry.params,
+ })
+
+ if meErr.GetError() != nil {
+ omciLogger.Errorf("Error while generating %s: %v", currentEntry.classId.String(), meErr.Error())
+ }
+ response := &omci.MibUploadNextResponse{
+ MeBasePacket: omci.MeBasePacket{
+ EntityClass: me.OnuDataClassID,
+ },
+ ReportedME: *reportedMe,
+ }
+
omciLogger.WithFields(log.Fields{
- "CommandSequenceNumber": msgObj.CommandSequenceNumber,
- "MibDbNumberOfCommands": mibDb.NumberOfCommands,
- "packet": currentEntry.packet,
- "request-txid": omciMsg.TransactionID,
- }).Info("sending-custom-packet")
+ "reportedMe": reportedMe,
+ }).Trace("created-omci-mibUploadNext-response")
- // NOTE we need to replace the first two bytes of the packet with the correct transactionId
- pkt := SetTxIdInEncodedPacket(currentEntry.packet, omciMsg.TransactionID)
+ pkt, err := Serialize(omci.MibUploadNextResponseType, response, omciMsg.TransactionID)
+
+ if err != nil {
+ omciLogger.WithFields(log.Fields{
+ "Err": err,
+ }).Fatalf("Cannot Serialize MibUploadNextRequest")
+ return nil, err
+ }
return pkt, nil
}
-
- reportedMe, meErr := me.LoadManagedEntityDefinition(currentEntry.classId, me.ParamData{
- EntityID: currentEntry.entityId.ToUint16(),
- Attributes: currentEntry.params,
- })
-
- if meErr.GetError() != nil {
- omciLogger.Errorf("Error while generating %s: %v", currentEntry.classId.String(), meErr.Error())
- }
-
- if reportedMe.GetClassID() == me.OnuDataClassID {
- // if this is ONU-Data we need to replace the MDS
- if err := reportedMe.SetAttribute("MibDataSync", mds); err.GetError() != nil {
- omciLogger.Errorf("Error while setting mds in %s: %v", currentEntry.classId.String(), meErr.Error())
- }
- }
-
- response := &omci.MibUploadNextResponse{
- MeBasePacket: omci.MeBasePacket{
- EntityClass: me.OnuDataClassID,
- },
- ReportedME: *reportedMe,
- }
-
- omciLogger.WithFields(log.Fields{
- "reportedMe": reportedMe,
- }).Trace("created-omci-mibUploadNext-response")
-
- pkt, err := Serialize(omci.MibUploadNextResponseType, response, omciMsg.TransactionID)
-
- if err != nil {
- omciLogger.WithFields(log.Fields{
- "Err": err,
- }).Fatalf("Cannot Serialize MibUploadNextRequest")
- return nil, err
- }
-
- return pkt, nil
}